您将如何使用内置 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 及以上版本。