【问题标题】:Get sub-parts of text in cell获取单元格中文本的子部分
【发布时间】:2014-09-10 15:11:27
【问题描述】:

我有一个 Excel 电子表格,每行一个产品,我想根据列中的文本获取每个项目的高度和宽度。我在 A 列中有尺寸文本:

8" H x 8" W 
2.5" H x 3.5" W 
per side 8" H x 8" W 
1 color left side 1" H x 3" W 

并且想将高度放在列 (B) 中,将宽度放在列 (C) 中。像这样:

              (A)                   (B)                (C)
8" H x 8" W                         8                  8
2.5" H x 3.5" W                     2.5                3.5
per side 8" H x 8" W                8                  8
1 color left side 1" H x 3" W       1                  3

我从这个 sn-p 开始,但我不知道如何获得所需的部分:

Sub numberExtractor()
Dim Cell As Integer
For Cell = 2 To 449

    If InStr(Cells(Cell, 17), """ H") > 0 Then
        Cells(Cell, 18).Value = Left(Cells(Cell, 17), InStr(Cells(Cell, 17), " ") - 1)
    End If
    If InStr(Cells(Cell, 17), """ W") > 0 Then
        Cells(Cell, 19).Value = Right(Cells(Cell, 17), InStr(Cells(Cell, 17), " ") + 2)
    End If

Next Cell
End Sub

【问题讨论】:

    标签: vba parsing excel


    【解决方案1】:

    逻辑:

    1. 使用唯一的分隔符。我正在使用SIDZ。
    2. 将" W 替换为""
    3. 将" H x 替换为SIDZ
    4. 首先在SPACE 上拆分,然后在唯一分隔符上拆分

    试试这个。

    Option Explicit
    
    Sub Sample()
        Dim rng As Range, aCell As Range
        Dim Ar
        Dim Ht As Double, Wt As Double
        Dim sTemp As String, sDelim As String
        Dim i As Long
    
        sDelim = "SIDZ"
    
        Set rng = Range("A1:A4")
    
        For Each aCell In rng
            sTemp = aCell.Value
            sTemp = Replace(Replace(sTemp, """ W ", ""), """ H x ", sDelim)
    
            Ar = Split(sTemp)
    
            For i = LBound(Ar) To UBound(Ar)
                If Ar(i) Like "*" & sDelim & "*" Then
                    aCell.Offset(, 1).Value = Split(Ar(i), sDelim)(0)
                    aCell.Offset(, 2).Value = Split(Ar(i), sDelim)(1)
                End If
            Next i
        Next aCell
    End Sub
    

    【讨论】:

    • 效果很好,我从你的例子中学到了很多东西。非常感谢!
    【解决方案2】:

    有公式,要复制下来以适应:

    在B1:

    =IF(FIND(" H",SUBSTITUTE(A1,"""",""))>4,MID(SUBSTITUTE(A1,"""",""),FIND(" ",SUBSTITUTE(A1,"""",""),FIND(" H",SUBSTITUTE(A1,"""",""))-4)+1,FIND(" ",SUBSTITUTE(A1,"""",""),FIND(" ",SUBSTITUTE(A1,"""",""),FIND(" H",SUBSTITUTE(A1,"""",""))-4)+1)-FIND(" ",SUBSTITUTE(A1,"""",""),FIND(" H",SUBSTITUTE(A1,"""",""))-4)),LEFT(SUBSTITUTE(A1,"""",""),FIND(" ",SUBSTITUTE(A1,"""",""))))  
    

    在 C1 中:

    =RIGHT(SUBSTITUTE(SUBSTITUTE(A1,"""","")," W",""),LEN(SUBSTITUTE(SUBSTITUTE(A1,"""","")," W",""))-FIND(" x ",SUBSTITUTE(SUBSTITUTE(A1,"""","")," W",""))-2)  
    

    【讨论】:

    • 在我的情况下,我更喜欢宏观方式,但在某些情况下有足够的公式很好 ☺ 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    相关资源
    最近更新 更多