我需要在Excel中将数组数据分割成单元格

我有一个电子表格查询数据源,并返回一个约230行逗号分隔结果的数组。 数据如下所示:

现有数据

我需要所有这些逗号分隔的值,现在在一个单元格(B列)拆分成单独的单元格。 每行通常有21个结果。 所以结果应该是这样的:

期望的结果

数据开始的行可能会有所不同,但通常在第80行左右开始。最上面的行用于显示下面数据的结果。 起点可以固定在120行(如果这使脚本更容易),这将为未来的开发留下充足的空间。

我试过修改我在这里find的几个不同的解决scheme,但都没有工作。 任何帮助是至高无上的赞赏!

你应该可以用Excel的“文本到列”function来完成你想要的function。 你可以重新写一个单独的行或大块的他们。 我特别提请注意第三个选项卡上的参数,您可以在其中定义数据的目的地,例如您提到的B120。

我没有完全testing,但也许你可以尝试这样的事情。 该过程应遍历行并分割列B中的值。

您将需要将Set ws = ActiveWorkbook.Worksheets("Sheet1")中的Set ws = ActiveWorkbook.Worksheets("Sheet1")的名称更改为您正在使用的工作表的名称。

 Public Sub SplitData() Dim ws As Worksheet Set ws = ActiveWorkbook.Worksheets("Sheet1") Dim row As Integer For row = 1 To ws.Range("A" & ws.Rows.Count).End(xlUp).row Dim split_array() As String split_array = Split(ws.Range("B" & row).Value, ",") Dim split_str As Variant Dim col As Integer col = 3 For Each split_str In split_array ws.Cells(row, col).Value = split_str col = col + 1 Next split_str Next row End Sub 

我的表开始看起来像这样。

在这里输入图像说明

运行程序后,看起来像这样。

在这里输入图像说明

我会build议一个非常简单的方法来做到这一点。

  • 剪下所有逗号分隔的数据并粘贴到一个txt文件中。 在你的情况下,它应该从列B(第120行或任何它是)
  • 在数据选项卡中,单击“从文本”并打开您的文本文件
  • 用逗号分隔的选项select分隔符,然后单击下一步
  • 当您点击完成时,Excel会要求粘贴数据的单元格。 给出所需的单元名称,你想你的数据。 在你的情况下,它可以是B120。

现在你得到了你想要的。 如果您意外破坏数据,最好备份工作表

感谢所有的帮助,指出了正确的方向。 这是我最终使用的:

 Sub Expand_Array_On_New_Sheet ' First check that new sheet name doesn't already exist, and create sheet Sheet_name_to_create = Sheet10.Range("B1").Value If WorksheetExists2(Sheet10.Range("B1")) Then MsgBox "Sheet name already exists" Exit Sub Else Sheets.Add After:=Sheets(1) ActiveSheet.Name = Sheet_name_to_create End If ' Copy array data to new sheet Worksheets("Lookup").Range("A11:B250").Copy Range("A101").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False ' Expand Array Data into Columns and do some formatting Range("B101:B350").Select Selection.TextToColumns Destination:=Range("C101"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _ Semicolon:=False, Comma:=True, Space:=False, Other:=False, OtherChar _ :=",", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1)), TrailingMinusNumbers:=True Range("C100").Select ActiveCell.FormulaR1C1 = "=R[-98]C[-1]-19" Range("D100").Select ActiveCell.FormulaR1C1 = "=RC[-1]+1" Range("D100").Select Selection.AutoFill Destination:=Range("D100:V100"), Type:=xlFillDefault Range("W100").Select ActiveCell.FormulaR1C1 = "Current" Range("C100:W100").Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorDark1 .TintAndShade = -0.149998474074526 .PatternTintAndShade = 0 End With Selection.Font.Bold = True With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlMedium End With Selection.Borders(xlEdgeRight).LineStyle = xlNone Selection.Borders(xlInsideVertical).LineStyle = xlNone Selection.Borders(xlInsideHorizontal).LineStyle = xlNone Range("B1").Select End Sub 

它似乎运作良好。 我遇到的问题是,如果数据集less于21个条目(大多数是21个,但不是全部),则最后一列数据结束于T或V列。 我需要最后一个入口总是在W列,并向后填充。 我可能需要search作为一个单独的问题。

再次感谢所有的帮助!