【问题标题】:Excel Split Single Array into Multiple CellsExcel将单个数组拆分为多个单元格
【发布时间】:2025-12-31 13:00:06
【问题描述】:

我使用的应用程序将数据字符串导出到一个单元格中的数组中,如下所示:

"data1"= value1; "data2"= value2; "data3"= value3; "data4"= value4; "data5"= value5;

我想要一个方程式或宏或可以像这样拆分它的东西:

----------------------------------------------------------------
|   |  data0  |  data1  |  data2 |  data3  |  data4  |  data5  |
----------------------------------------------------------------
| 1 |  ARRAY  |  value1 | value2 |  value3 |  value4 |  value5 |
----------------------------------------------------------------
| 2 |  ARRAY  |  value1 | value2 |  value3 |  value4 |  value5 |
----------------------------------------------------------------
| 3 |  ARRAY  |  value1 | value2 |  value3 |  value4 |  value5 |
----------------------------------------------------------------
. . . . and so on.

这可能吗?

这是文档中的一个字符串:

"search-terms1" = Chinese jade; "search-terms2" = Chinese archers; "search-terms3" = Antique jade; "search-terms4" = Asian jade; "search-terms5" = China history;

它始终是 search-terms1 - search-terms5,但每行的“值”会有所不同。

Windows XP 上的 Excel 2003

【问题讨论】:

  • 数据库导出了数千行,每行都有一个包含该字符串的列。我只是展示了我希望使用某种脚本或其他东西来完成的布局。

标签: arrays excel split rows


【解决方案1】:

这将从 A2 开始,向下计算有多少行有数据。它将值拆分到右侧的列中。

Sub SplitSearch()

    Dim vaTerms As Variant
    Dim vaSearch As Variant
    Dim rCell As Range
    Dim vaOutput As Variant
    Dim i As Long

    For Each rCell In Sheet1.Range("A2", Sheet1.Cells(Sheet1.Rows.Count, 1).End(xlUp)).Cells
        vaSearch = Split(rCell.Value, ";")
        ReDim vaOutput(1 To 1, 1 To UBound(vaSearch))
        For i = LBound(vaSearch) To UBound(vaSearch)
            vaTerms = Split(vaSearch(i), "=")
            If UBound(vaTerms) > -1 Then
                vaOutput(1, i + 1) = Trim(vaTerms(UBound(vaTerms)))
            End If
        Next i
        rCell.Offset(0, 1).Resize(1, UBound(vaOutput, 2)).Value = vaOutput
    Next rCell
End Sub

【讨论】:

  • 很好,但我有两个小问题。我正在尝试在列为“AZ”的文档上使用它。我试图将“A2”更改为“AZ2”,但出现运行时错误“9”:下标超出范围。另外,不确定是否有,但如果它是空的,脚本会忽略一行吗?以防万一那是什么弄乱了脚本。
【解决方案2】:

您可能应该对完整的数组字符串进行搜索和替换,用换行符替换分号,\n 或 vbCrLf 之前数组字符串被带入 excel,因为单元格字符串大小如果您在字符串中提取大量数据,限制可能会导致内容被截断。 (东西可能被剪掉而你不知道

任何不足都可能无法正确导入您正在处理的所有结果。

用换行符替换分号后,导入文本,或使用“=”作为分隔符打开文件

【讨论】:

  • 在导入 Excel 之前我什么也做不了。它是从在线应用程序中导出的。它出口什么就是我得到什么。也许我误解了你在说什么。
  • 是在线应用程序为您创建和 Excel 表吗?如果它将所有内容插入单个单元格,则可能会丢失数据。如果导出的格式是您碰巧在 excel 中打开的格式,您也许可以先对其进行操作。如果是在线显示的复制/粘贴,您可以先粘贴到文本编辑器中
  • excel 2003单元格字符限制是32767左右,2010好像也一样。
  • 此外,如果这样的话,单元格不应超过 300 个字符。
  • 然后您可以在记事本中打开 csv 文件并进行搜索/替换,这非常容易。我会推荐notepad++,因为你可以替换';'用 '\n' 然后在 excel 中打开文件,用 '=' 分隔,这正是你想要的。如果您愿意,甚至可以删除或包含第一列
【解决方案3】:

首先在“;”处拆分字符串,而不是在“=”处。下面的代码可以帮助您入门:

Dim s As String
Dim parts As Variant
s = """data1""= value1; ""data2""= value2;"
parts = Split(s, ";")

For i = 0 To UBound(parts)
    Debug.Print parts(i)
    ' TODO: Split part along "=" and insert into cell
Next i

【讨论】:

  • data[x] 和 value[x] 不是如图所示,它们是不同的数据字符串。这是导出文件中的真实字符串。 "search-terms1" = 中国玉; "search-terms2" = 中国弓箭手; "search-terms3" = 古玉; "search-terms4" = 亚洲玉; "search-terms5" = 中国历史;它始终是 search-terms1 - 5,仅供参考。每行的“值”都不同。
  • 如果你想使用它,你只需遍历整个工作表并为范围 s=cell 中的每个单元格
最近更新 更多