我正在分析从网站上提取的一些数据,现在它在Excel中的单个单元格中格式化如下:例如:
[2015-08-01--2010-01-01], Jerry Smith; [2009-12-31--2000-01-01], John Brown
所有这些都位于,例如,A1。
我想首先用分号分隔它,然后转置信息,然后将两个日期周期分成列,这样我上面列出的例子的最终结果就变成了一个2x3的单元格分组。列为1.开始日期2.结束日期3.名称
我玩了一些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个名称和日期范围配对,而不仅仅是我在示例单元格中列出的两个?
答案 0 :(得分:1)
在分号上使用变量数组到第一个Split,然后在逗号上分割每个部分。将日期拆分/解析为实际日期,并应用单元格编号格式以重新创建原始字符串日期的格式。
Sub CommandButton1_Click()
Dim v As Long, vTMPs As Variant, vVALs As Variant, vDTs As Variant
With ActiveSheet
'split on semi-colon (e.g. 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列的下一个空白行。
答案 1 :(得分:0)
dim strSplit() as string
strSplit =split(range("a1").value,";")
range("b1").value=strsplit(0)
range("b2").value=strSplit(1)
是第1位:)然后同样适用于每个strSplit,使用","第二次,将是1的日期和另一个的名字
split(" test show","")给出一个数组(0)=" test" (1)="显示"
也可以在公式中使用SUBSTITUTE和FIND / SEARCH来完成,但是跟踪可能会很棘手。