2011-06-08 91 views
2

的应用程序,我在一个小区内使用的数据出口字符串数组,像这样:Excel中拆分单一阵列到多个单元格

"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; 

这将永远是搜索terms1 - 搜索terms5,但“价值”将成为各行不同。

Windows XP上的Excel 2003

+0

为什么有3行? – 2011-06-08 15:15:19

+0

数据库导出数千行,每行都有一个包含该字符串的列。我只是展示了我期望通过某种脚本或其他方式完成的布局。 – Devin 2011-06-08 15:17:26

回答

3

这将在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 
+0

<3非常感谢! – Devin 2011-06-09 12:26:31

+0

这很好,但我有两个小问题。我正在尝试在列为'AZ'的文档上使用它。我试图将'A2'更改为'AZ2',但我得到运行时错误'9':下标超出范围。另外,不知道它是否确实如此,但是如果脚本是空的,脚本会忽略一行?以防万一,这是搞砸脚本。 – Devin 2011-06-09 15:20:06

0

首先将字符串拆分为“;”,而不是“=”。下面的代码可以让你开始:

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 
+0

data [x]和value [x]不是如图所示,它们是不同的数据字符串。这是来自导出文件的真实字符串。 “search-terms1”=中国玉器; “search-terms2”=中国弓箭手; “search-terms3”=仿古玉; “search-terms4”=亚洲玉; “search-terms5”=中国历史; 它始终是search-terms1 - 5,仅供参考。每个行的“值”将会不同。 – Devin 2011-06-08 19:04:23

+0

如果你想使用这个,你只需要遍历整个工作表,并对每个单元格在s = cell – datatoo 2011-06-09 13:39:49

1

你你应该做一个搜索和替换的一系列完整的字符串,用一个换行符替换分号,\ n或vbCrLf 之前数组字符串导入Excel,因为电池串大小限制如果您在字符串中提取大量数据,可能会导致内容被截断。 (的东西可能被切断,你不会知道

任何东西少可能无法正确导入你正在处理的所有结果。

在您更换分号与换行符导入的文本,或打开带有“=”的文件作为分隔符

+0

在进入Excel之前,我什么也做不了。它从一个在线应用程序导出。无论出口是什么,我得到。也许我误解你在说什么。 – Devin 2011-06-09 12:53:04

+0

是在线应用程序创建和Excel表格为您?如果将所有内容插入单个单元格中,则可能会丢失数据。如果导出的格式是你刚才在excel中打开的格式,那么你可以先操作它。如果是在线显示的复制/粘贴,则可以先将其粘贴到文本编辑器中 – datatoo 2011-06-09 13:02:24

+0

它将导出为CSV文件。 – Devin 2011-06-09 13:07:59

相关问题