在 Excel 中创建子集

在 Excel 中创建子集

您将如何使用内置 excel 函数(如果可能的话,不要使用 vba)在新列中创建子集。我之前创建了一列数据点,这些数据点要么是保留在子集中的任意数字,要么是将从子集中删除的 0。该概念类似于使用过滤器,但使用过滤器不是一种选择,因为子集列需要自动创建。子集的数据之间不能有任何空白行。例如,第 1 列(原始集)和第 2 列(子集):

第 1 列 第 2 列
5 5
1 1
0 4
4 3
0 2
3
2

提前致谢。

答案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

答案2

假设第 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 及以上版本。

相关内容