การสร้างชุดย่อยใน Excel


3

คุณจะสร้างชุดย่อยในคอลัมน์ใหม่ได้อย่างไรโดยใช้ฟังก์ชัน excel ในตัว (ไม่ใช่ vba ถ้าเป็นไปได้) ฉันได้สร้างคอลัมน์ของจุดข้อมูลที่มีจำนวนใด ๆ ที่เก็บไว้ในชุดย่อยหรือ 0 ซึ่งจะถูกลบออกจากชุดย่อย แนวคิดจะคล้ายกับการใช้ตัวกรอง แต่การใช้ตัวกรองไม่ใช่ตัวเลือกเนื่องจากคอลัมน์ชุดย่อยจะต้องสร้างขึ้นโดยอัตโนมัติ ชุดย่อยต้องไม่มีแถวว่างใด ๆ ระหว่างข้อมูล ตัวอย่างเช่นคอลัมน์ 1 (ชุดดั้งเดิม) และคอลัมน์ 2 (ชุดย่อย):

คอลัมน์ 1 คอลัมน์ 2
5 5
1 1
0 4
4 3
0 2
3
2

ขอบคุณล่วงหน้า.


1
คุณต้องการ VBA สำหรับสิ่งนี้
isJustMe

หากคุณกำลังสร้างคอลัมน์ 1 ทำไมคุณไม่ปรับเปลี่ยนสิ่งที่คุณทำเพื่อไม่เพียงสร้างค่าศูนย์ ฉันแน่ใจว่ามีวิธีที่จะทำสิ่งนี้กับสูตร แต่มันจะง่ายกว่ามากใน VBA นอกจากนี้ยังเป็นเว็บไซต์การเขียนโปรแกรมดังนั้นหากคุณกำลังมองหาฟังก์ชั่นแฮ็คโดยเฉพาะฉันขอแนะนำให้โพสต์ที่ SuperUser.com
David Zemens

ในกรณีที่มีประโยชน์ในการลบเซลล์ทั้งหมดในคอลัมน์แรกที่มี 0: เน้นข้อมูลและกด Ctrl-H เพื่อแทนที่; พิมพ์ 0 แต่ปล่อยให้กล่องแทนที่ว่างเปล่าจากนั้นแทนที่ทั้งหมด เน้นข้อมูลในคอลัมน์อีกครั้งและใช้ Ctrl-G (GoTo) คลิกพิเศษและค้นหาช่องว่างทั้งหมด ใน Excel 2007/10 ให้เลือกแท็บหน้าแรกกลุ่มเซลล์ลบและลบเซลล์เลื่อนเซลล์ขึ้น อย่างที่คนอื่น ๆ พูดถึงฉันไม่คิดว่าสูตรที่เหมาะสม - หลังจากคำอธิบายของคุณแนะนำว่าคุณต้องลบค่าจริง ๆ

คำตอบ:


1

นี่จะเป็นเรื่องง่ายใน VBA และไม่ต้องการการแทรกแซงจากผู้ใช้อื่นนอกจากการเลือกช่วงของเซลล์ที่จะสร้างรายการย่อยและระบุคอลัมน์ที่คุณต้องการให้ผลลัพธ์ปรากฏใน:

Sub CreateSubSetList()
Dim rng As Range: Set rng = Application.InputBox("Select the column which contains your list", "Select column", Type:=8)
Dim colNum As Variant: colNum = Application.InputBox("Input the destination column letter", "Destination Column?")
Dim oRng As Range
Dim cl As Range
Dim c As Long: c = 1
    If rng Is Nothing Then Exit Sub
    Set rng = rng.Columns(1)
    Set oRng = Range(Columns(colNum).Address).Columns(1)
    If oRng Is Nothing Then Exit Sub
    For Each cl In rng.Cells
        If Not cl.Value = 0 Then
            oRng.Cells(c).Value = cl.Value
            c = c + 1
        End If
    Next
End Sub

0

สมมติว่าข้อมูลคอลัมน์ 1 อยู่ใน A1: A7 แล้วCtrl+ Shift+ Enterตามสูตรในช่วงที่สมบูรณ์ B1: B7 หรือ cse และลากลง

=IFERROR(INDEX($A$1:$A$7,SMALL(IF($A$1:$A$7<>0,ROW($A$1:$A$7)),ROW()),),"").

หมายเหตุiferrorทำงานได้เฉพาะจาก Excel 2007 เป็นต้นไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.