我有一个列将项目维度与其产品名称混合在一起,类似于:
A
47"H X 18"W Six-Light ChandW Three-Light Pendant
29"H X 38"W X 33"D Eight-Lt Chandelier
40"H X 32"W Four-Light Chand
43"H X 36"W X 29"D Three-Light Sconce
60"H X 50"W Eighteen-Light Chand
... // another 600 rows
我正在尝试使用Magmi将其导入我们的商店。我想从其尺寸中分离产品名称。
问题是有些物品只有宽度/高度而没有深度,而其他物品(大部分)都有三种。使用文本到列似乎不足以过滤此数据,所以我假设我需要使用VBA。
刚接触VBA,我不确定从哪里开始。有没有人有想法/指点?
答案 0 :(得分:1)
问题是有些物品只有宽度/高度而没有深度,而其他物品(大部分)都有三种。
<强>逻辑:强>
找出"
的数量及其位置。如果没有第3个"
,则在第2个" "
之后查找"
,如果有第3个"
,则在此之后查找空格。
假设你的数据看起来像这样
<强>代码:强>
这是你在尝试的吗?
Option Explicit
Sub Sample()
Dim ws As Worksheet
Dim Delim As String
Dim Pos1 As Long, Pos2 As Long, Pos3 As Long
Dim i As Long, lRow As Long
'~~> This is "
Delim = Chr(34)
'~~> Set this to the relevant worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
With ws
'~~> Find Last Row of Col A
lRow = .Range("A" & .Rows.Count).End(xlUp).Row
For i = 1 To lRow
'~~> Get 1st position of "
Pos1 = InStr(1, .Range("A" & i).Value, Delim)
'~~> Get 2nd position of "
Pos2 = InStr(Pos1 + 1, .Range("A" & i).Value, Delim)
'~~> Get 3rd position of "
Pos3 = InStr(Pos2 + 1, .Range("A" & i).Value, Delim)
'~~> Check if 3rd " is present
If Pos3 = 0 Then
Pos1 = InStr(Pos2 + 1, .Range("A" & i).Value, " ")
Else
Pos1 = InStr(Pos3 + 1, .Range("A" & i).Value, " ")
End If
'~~> Extract relevant text into Col B
.Range("B" & i).Value = Mid(.Range("A" & i).Value, Pos1 + 1)
Next i
End With
End Sub
<强>输出:强>