【问题标题】:Extracting the Required Strings from the Data从数据中提取所需的字符串
【发布时间】:2021-08-10 18:29:01
【问题描述】:

我一直在尝试创建公式以从Col"A" 中可用的数据中获取所需的字符串,但我设法创建了一些公式,但效率不高且无法正常工作,它们必须是动态的,所以我不会编辑公式一张一张(就像我在附件中所做的那样)。

col“A”中的数据

我想要的数据结果

这是我的尝试

任何帮助将不胜感激。我创建的所有公式都可以在附件中找到,如果它可以通过 VBA 创建,那么请。

Sheet Link

用 VBA 和公式都试过,但做不到。

Sub ReturnString()

Dim ws As Worksheet
Dim val As String
Dim val2 As String
Set ws = Sheet1

val = ws.Range("A2")
val2 = ws.Range("A5")
On Error Resume Next

ws.Range("B28") = Split(val, "(")(0)
ws.Range("C28") = Right(val, Len(val) - (InStrRev(val, "(")))
ws.Range("D28") = Left(val2, Len(val2) - (InStrRev(val2, ":")))
ws.Range("E28") = Left(val2, Len(val2) - (InStrRev(val2, ")")))
End Sub

公式

=LEFT(A2,(FIND("(",A2,1)-1))
=MID(A2,FIND("(",A2,1)+1,10)
=MID(A5,FIND(":",A5)+1,256)
=MID(A5,FIND("(",A5,1)+1,11)

【问题讨论】:

    标签: excel vba excel-formula formula


    【解决方案1】:

    基本上,你可以使用other question的答案。

    我们需要做的是循环遍历您拥有的数据。 像往常一样,准确的格式很重要,有几种方法可以做到这一点。

    一种方法:
    首先,我们确定需要查看的区域,然后遍历列并检查标准。我想出的是:“如果单元格中有东西,但前一行是空的,这是一个新人”

    建立后,我们需要运行格式化。我们使用现有的行 (val),以及向下 3 行的行 (val2)。
    但是我们还需要跟踪从哪里开始打印信息,并在连续条目中选择下一行。我们使用i 变量作为计数器。

    Sub extract()
    Dim ws As Worksheet, workArea As Range, val As Variant, val2 As String, i As Long
    
    Set ws = Worksheets(1)
    Set workArea = ws.Range("A2:A" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row)
       'Notice that we start at A2, this is both because your data starts there,
       'but also because the below code will throw an error on row 1, since we use .offset(-1)
       'and this is the lazy workaround.
    
    i = 3                                                'row to start printing
    For Each val In workArea
        If Len(val) > 0 And Len(val.Offset(-1)) = 0 Then 'look for new entry
            val2 = val.Offset(3)                         'val2 is the Insurance row (3 down)
            
            ws.Range("B" & i) = Split(val, "(")(0)
            ws.Range("C" & i) = Left(Right(val, Len(val) - (InStrRev(val, "("))), 10)
            ws.Range("D" & i) = Mid(val2, InStr(val2, ":") + 2, InStr(val2, "(") - InStr(val2, ":") - 2)
            ws.Range("E" & i) = Mid(val2, InStr(val2, "(") + 1, InStr(val2, ")") - InStr(val2, "(") - 1)
            
            i = i + 1                                    'next entry on next row
        End If
    Next val
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 2015-06-14
      • 1970-01-01
      • 2019-05-21
      • 1970-01-01
      相关资源
      最近更新 更多