使用VBA过滤掉列内容

时间:2014-02-10 19:40:39

标签: excel vba excel-vba

我有一个列将项目维度与其产品名称混合在一起,类似于:

               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,我不确定从哪里开始。有没有人有想法/指点?

1 个答案:

答案 0 :(得分:1)

  

问题是有些物品只有宽度/高度而没有深度,而其他物品(大部分)都有三种。

<强>逻辑:

找出"的数量及其位置。如果没有第3个",则在第2个" "之后查找",如果有第3个",则在此之后查找空格。

假设你的数据看起来像这样

enter image description here

<强>代码:

这是你在尝试的吗?

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

<强>输出:

enter image description here