【发布时间】:2016-09-29 13:10:52
【问题描述】:
GIVEN:我正在尝试使用 VBScript 重新排列数据在 Excel 文档中的呈现方式。我知道数据将始终采用以下格式:
A | B | C | D
--------------|------------------------------|-----|-----
1 ANGLE | 6 x 3-1/2 x 5-16 x 240 | 1 | C1054
2 SQAURE TUBE | 1-1/2 x 1-1/2 x 1/8 x 31-3/4 | 3 | C1588
3 DOM TUBE | 5-1/2 OD x 1" WALL | 4 | C1670
目标:我的目标是把它变成这种格式:
A | B | C | D
----------------------------------|---------|-----|-------
1 6 X 3-1/2 X 5-16 ANGLE | 240 | 1 | C1054
2 1-1/2 X 1-1/2 X 1/8 SQAURE TUBE | 31-3/4 | 3 | C1588
3 5-1/2 OD X 1" WALL DOM TUBE | | 4 | C1670
我的想法是首先在 B 列和 C 列之间插入空白列。然后,我将使用 split 命令将 B 列拆分为带有小“x”的中间步骤:
A | B | C | D | E | F | G
--------------|----------|---------|------|--------|---|-------
1 ANGLE | 6 | 3-1/2 | 5-16 | 240 | 1 | C1054
2 SQAURE TUBE | 1-1/2 | 1-1/2 | 1/8 | 31-3/4 | 3 | C1588
3 DOM TUBE | 5-1/2 OD | 1" WALL | | | 4 | C1670
接下来,我将 A 列移动到 D 列和 E 列之间。然后我将使用“X”以某种方式将这些数字混合在一起,然后将该列与下一个混合以达到目标。
我在vbscript中的代码是:
'inserting 3 blank columns into given format
objSheet2.Columns("C:C").Insert xlToRight
objSheet2.Columns("C:C").Insert xlToRight
objSheet2.Columns("C:C").Insert xlToRight
'splitting
Split objSheet2.Columns("B:B"),"x"
'objSheet2.Columns("B:B").TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
' TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
' Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
' :="x", FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2)), _
' TrailingMinusNumbers:=True
'moving column A between column E and F
objSheet2.Columns("A:A").Cut
objSheet2.Columns("F:F").Insert
我首先录制了一个宏,然后随便将其粘贴到我的 vbscript 中,这显然不起作用,这就是我将其注释掉的原因。 split 命令也不起作用。在运行期间,我在拆分行的开头收到类型不匹配错误。请注意,第 3 行中的信息比其他行少一条。
问题:如何使用 VBScript 以及可能的拆分命令从给定格式中得出我的目标格式?
【问题讨论】:
-
你没有把你的目标说得很清楚。您是说如果字符串中有3个“x”,则将其拆分,将最后一个值放在它最初所在的列中,并将剩余部分移到A列中的字符串中间。
-
拆分单元格 B1 "6 x 3-1/2 x 5-16 x 240" 将产生 B1="6 " B2="3-1/2 " B3="5-16" 和B4="240"
-
这不是你的目标。
-
我打错了。拆分单元格 B1 "6 x 3-1/2 x 5-16 x 240" 将产生 B1="6" C1="3-1/2 " D1="5-16" 和 E1="240" 下一步拆分后将重新排列单元格以匹配目标顺序。最后一步是加入单元格。
-
最容易解释你的最终目标是什么,而不是你想采取的步骤。人们通常有更好的方法来达到相同的结果,但是询问如何执行您认为正确的步骤会混淆您的真正要求。我们想避免X Y Problem。