在 Excel 中将包含零的列拆分为单独的列,并在零处断开

在 Excel 中将包含零的列拆分为单独的列,并在零处断开

我希望在 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+12. i+13 .。 如果是奇数:1. 2. 3.i
    i+1ii

要获取数组的第一i、第二i和第三i部分,您需要使用另一个整数,例如。j设置j0,为第一部分创建一个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))))

此公式的结果就是您在上文中看到的橙色。

相关内容