我希望在 Excel 中将散布着零的列数组拆分为单独的列,同时在列中的零处断开并忽略零。
例如,如果我有一个数组{1,2,3,0,4,5,0,0,6,7,0}
,Excel 应该返回三个数组 - 数组 1 应该是{1,2,3}
,数组 2 应该是{4,5}
,数组 3 应该是{6,7}
。我如何在 excel 中执行此操作?
答案1
你需要使用虚拟专用网络为此。
我会这样做:
- 将每个非 0 的数字读入数组。
- 计算数组中有多少个值并将其读入整数:
假设i
是数组计数。然后将其除以 3。i = i/3
- 检查是否
i
为整数。
如果是,则输出i
数组的第一个值,然后是第二个和第三个。 - 如果不是整数,例如数组计数为
13
=>13/3 = 4,333
。
删除分数并检查它是偶数还是奇数。
如果是偶数,则输出将是数组的1.i+1
2.i+1
3 .。 如果是奇数:1. 2. 3.i
i+1
i
i
要获取数组的第一i
、第二i
和第三i
部分,您需要使用另一个整数,例如。j
设置j
为0
,为第一部分创建一个do while array(j) = i-1
(-1,因为数组索引从 0 开始,而不是 1)。
您设置的第二部分j = i(+1 if necessary)
,等等
答案2
我建议两种方法……首先使用代码(这可能比 Divin3 建议的方法更混乱,但对我来说更容易理解)。基本上,您使用“,”作为分隔符创建一个数组,然后为非零重新组装新数组。当发现零时,我们保存当前数组变量并移动到下一个,以“组装”连续的非零段:
Sub splitter()
Dim theNewArray(999)
theStr = ActiveCell.Value
theOldArray = Split(theStr, ",")
x = 0
theNewArray(x) = ""
For i = 0 To UBound(theOldArray)
If theOldArray(i) <> 0 And theOldArray(i) <> "0" Then
If Len(theNewArray(x)) > 0 Then
theNewArray(x) = theNewArray(x) & "," & theOldArray(i)
Else
theNewArray(x) = theOldArray(i)
End If
Else
If Len(theNewArray(x)) > 0 Then
x = x + 1
theNewArray(x) = ""
End If
End If
Next i
For i = 0 To (x - 1)
ActiveCell(1, (2 + i)).Value = theNewArray(i)
Next i
End Sub
这将为您提供以下内容(其中蓝色是原始数据,橙色是输出数据):
或者,您可能更喜欢使用几个简单的功能来完成此操作...选择您的数据并使用“文本到列”:
假设您的数据是分隔的。选择“其他”并输入 0(零),如下所示:
其余部分可以保留默认设置。最终您将得到以下黄色所示的结果:
之后,您可以使用以下公式清除尾随的逗号字符:
=IF(F1=",","",IF(LEFT(F1, 1)=",",IF(RIGHT(F1, 1)=",",MID(F1, 2, (LEN(F1)-2)),MID(F1,2,(LEN(F1)-1))),MID(F1, 1, (LEN(F1)-1))))
此公式的结果就是您在上文中看到的橙色。