我需要将数据数组拆分为 excel 中的单元格
I need to split an array of data into cells in excel
我有一个查询数据源的电子表格和 returns 一个包含大约 230 行逗号分隔结果的数组。数据如下所示:
我需要将现在位于一个单元格(B 列)中的所有逗号分隔值拆分为单独的单元格。每行通常有 21 个结果。所以结果应该是这样的:
数据的起始行可能不同,但通常从第 80 行左右开始。最上面的行用于显示其下方数据的结果。起点可以固定在第 120 行(如果这样可以使编写脚本更容易),这将为未来的开发留出足够的空间。
我已经尝试修改我在此处找到的几个不同的解决方案,但 none 奏效了。非常感谢任何帮助!
我没有完全测试这个,但也许你可以试试这样的东西。该过程应遍历行并拆分 B 列中的值。
您需要将 Set ws = ActiveWorkbook.Worksheets("Sheet1")
中 "Sheet1" 的名称更改为您正在使用的作品sheet 的名称。
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
我的 sheet 开始看起来像这样。
经过 运行 程序后,它最终看起来像这样。
感谢大家的帮助和指出正确的方向。这是我最终使用的:
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
看起来效果不错。我 运行 挥之不去的问题是,如果数据集少于 21 个条目(大多数是 21,但不是全部),最后一列数据将在 T 列或 V 列或其他列结束。我需要最后一个条目始终在 W 列中,并向后填充。我可能需要将其作为一个单独的问题进行搜索。
再次感谢大家的帮助!
我会建议一个非常简单的方法。
- 剪切所有逗号分隔的数据并将其粘贴到一个 txt 文件中。在你的情况下,它应该从 B 列开始(第 120 行或其他任何行)
- 在数据选项卡中,单击 "From Text" 并打开您的文本文件
- Select 以逗号分隔选项并单击下一步
- 单击“完成”后,excel 会询问要将数据粘贴到的单元格。提供您想要数据的所需单元格名称。你的情况可以是 B120。
现在你得到了你想要的。最好备份您的工作表,以防您意外损坏数据
您应该能够使用 Excel 的“文本到列”功能(解释为 at this link)来做您想做的事情。您可以一键重写单行或大块。我特别提请您注意第三个选项卡上的参数,您可以在其中定义数据的目的地,例如您提到的 B120。
我有一个查询数据源的电子表格和 returns 一个包含大约 230 行逗号分隔结果的数组。数据如下所示:
我需要将现在位于一个单元格(B 列)中的所有逗号分隔值拆分为单独的单元格。每行通常有 21 个结果。所以结果应该是这样的:
数据的起始行可能不同,但通常从第 80 行左右开始。最上面的行用于显示其下方数据的结果。起点可以固定在第 120 行(如果这样可以使编写脚本更容易),这将为未来的开发留出足够的空间。
我已经尝试修改我在此处找到的几个不同的解决方案,但 none 奏效了。非常感谢任何帮助!
我没有完全测试这个,但也许你可以试试这样的东西。该过程应遍历行并拆分 B 列中的值。
您需要将 Set ws = ActiveWorkbook.Worksheets("Sheet1")
中 "Sheet1" 的名称更改为您正在使用的作品sheet 的名称。
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
我的 sheet 开始看起来像这样。
经过 运行 程序后,它最终看起来像这样。
感谢大家的帮助和指出正确的方向。这是我最终使用的:
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
看起来效果不错。我 运行 挥之不去的问题是,如果数据集少于 21 个条目(大多数是 21,但不是全部),最后一列数据将在 T 列或 V 列或其他列结束。我需要最后一个条目始终在 W 列中,并向后填充。我可能需要将其作为一个单独的问题进行搜索。
再次感谢大家的帮助!
我会建议一个非常简单的方法。
- 剪切所有逗号分隔的数据并将其粘贴到一个 txt 文件中。在你的情况下,它应该从 B 列开始(第 120 行或其他任何行)
- 在数据选项卡中,单击 "From Text" 并打开您的文本文件
- Select 以逗号分隔选项并单击下一步
- 单击“完成”后,excel 会询问要将数据粘贴到的单元格。提供您想要数据的所需单元格名称。你的情况可以是 B120。
现在你得到了你想要的。最好备份您的工作表,以防您意外损坏数据
您应该能够使用 Excel 的“文本到列”功能(解释为 at this link)来做您想做的事情。您可以一键重写单行或大块。我特别提请您注意第三个选项卡上的参数,您可以在其中定义数据的目的地,例如您提到的 B120。