如何设置代码来dynamic分隔多次?

我正在分析从网站中提取的一些数据,现在它在Excel中的一个单元格中被格式化,例如:

[2015-08-01--2010-01-01], Jerry Smith; [2009-12-31--2000-01-01], John Brown 

所有这一切都在哪里,让我们说,A1。

我想先用分号分隔它,然后转置信息,然后将这两个date分隔成两列,这样上面列出的例子的最终结果变成了一个2×3的单元格组,其列为1开始date2.结束date3.名称

我已经玩了一些VBA代码,我感到沮丧,因为我甚至不知道如何编码第一步用分号分隔。

这是我到目前为止使用的:

  Sub CommandButton1_Click() Selection.TextToColumns _ Destination:=Range("A1"), _ DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, _ Tab:=False, _ Semicolon:=True, _ Comma:=False, _ Space:=False, _ Other:=False, _ OtherChar:=False, _ End Sub 

我知道这是用分号分隔的不正确的第一步,那么我需要做些什么来解决这个问题?我如何处理我描述的下一步?

另外,如何正确地编写代码,使其能够适应3+名称和date范围配对,而不是像我在示例单元格中列出的那样只有两个配对?

使用变体数组首先在分号上分割,然后在逗号分割每一块。 date被拆分/parsing为实际date,并且应用单元格数字格式来重新创build原始stringdate的格式。

 Sub CommandButton1_Click() Dim v As Long, vTMPs As Variant, vVALs As Variant, vDTs As Variant With ActiveSheet 'split on semi-colon (eg Chr(59)) vTMPs = Split(.Cells(1, 1).Value2, Chr(59)) For v = LBound(vTMPs) To UBound(vTMPs) Debug.Print vTMPs(v) 'split each piece on the comma vVALs = Split(vTMPs(v), Chr(44)) 'stuff it underneath and split the dates With .Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) vDTs = Split(Mid(Trim(vVALs(LBound(vVALs))), 2, Len(Trim(vVALs(LBound(vVALs)))) - 2), "--") .Cells(1, 1) = DateSerial(Left(vDTs(0), 4), Mid(vDTs(0), 6, 2), Right(vDTs(0), 2)) .Cells(1, 2) = DateSerial(Left(vDTs(1), 4), Mid(vDTs(1), 6, 2), Right(vDTs(1), 2)) .Resize(1, 2).NumberFormat = "yyyy-mm-dd" .Offset(0, 2) = Trim(vVALs(UBound(vVALs))) End With Next v End With End Sub 

最后一个分割的每个元素被放入A列中的下一个空行

 dim strSplit() as string strSplit =split(range("a1").value,";") range("b1").value=strsplit(0) range("b2").value=strSplit(1) 

是第一位:)那么相同的将适用于每个strSplit,使用“,”第二次,将在1date和名称在其他

split(“test show”,“”)给出一个数组(0)=“test”(1)=“Show”

也可以使用公式中的SUBSTITUTE和FIND / SEARCH来完成,但可能会变得棘手。