Vbscript将excel列数据分成2列

我试图在excel表中分割数据,就像这样:

|aa 1| |bb 2| |cc 3| |ddd 4| 

 |aa| 1| |bb| 2| |cc| 3| |ddd| 4| 

我观察到一个模式,就像在任何特定的单元格(或行)的字符之间有多个空格的情况下,它们应该被拆分成单独的列。

我将使用一个正则expression式用一个选项卡replace2个或更多连续空格的序列,然后使用TextToColumns方法将列拆分为两部分:

 Set xl = CreateObject("Excel.Application") xl.Visible = True Set wb = xl.Workbooks.Open("C:\path\to\your.xlsx") Set ws = wb.Sheets(1) Set re = New RegExp re.Pattern = " +" For Each cell In ws.UsedRange cell.Value = re.Replace(cell.Value, vbTab) Next ws.UsedRange.TextToColumns 

使用正在寻找的RegExp

  1. 一个非贪婪的序列
  2. 之前是一个非空的空白序列
  3. 其次是数字

如:

 Option Explicit Function qq(s) : qq = """" & s & """" : End Function Dim r : Set r = New RegExp r.Pattern = "^(.+?)\s+(\d+)$" Dim s, m For Each s In Split("aa 1|ddd 4", "|") Set m = r.Execute(s)(0) WScript.Echo qq(m.Submatches(0)), qq(m.Submatches(1)) Next 

输出:

 cscript 31160562.vbs "aa" "1" "ddd" "4" 

你可以编写一个基于空间使用Splitfunction的函数,

下面是感觉会为你工作的代码片段

  Dim arrVar strCelldata = Worksheets("Sheet1").Cells(1, 1) arrVar = Split(strCelldata, " ") j = 2 For Each arrVal In arrVar If Trim(arrVal) <> "" Then Worksheets("Sheet1").Cells(1, j) = arrVal j = j + 1 End If Next 

您可能需要再添加一个循环来查看Excel工作表上可用的所有数据。