从数据中提取所需的字符串
Extracting the Required Strings from the Data
我一直在尝试创建公式以从 Col"A"
中可用的数据中获取所需的字符串 我设法创建了一些公式但效率不高且无法正常工作,它们必须是动态的所以我会不要一一编辑公式(就像我在附件 sheet 中所做的那样)。
列“A”中的数据
我想从数据中得到的结果
这是我的尝试
我们将不胜感激任何帮助。我创建的所有公式都在附件 sheet 中可用,如果它可以通过 VBA 创建,那么请。
用 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)
基本上,您可以使用 中的答案。
我们需要做的是循环遍历您拥有的数据。
与往常一样,准确的格式很重要,有几种方法可以做到这一点。
一种方法:
首先我们确定我们需要查看的区域,然后我们遍历该列并检查条件。我想到的是:“如果单元格中有东西,但前一行是空的,这是一个新人”.
当这个建立后,我们需要运行格式化。我们使用现有的行 (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
我一直在尝试创建公式以从 Col"A"
中可用的数据中获取所需的字符串 我设法创建了一些公式但效率不高且无法正常工作,它们必须是动态的所以我会不要一一编辑公式(就像我在附件 sheet 中所做的那样)。
列“A”中的数据
我想从数据中得到的结果
这是我的尝试
我们将不胜感激任何帮助。我创建的所有公式都在附件 sheet 中可用,如果它可以通过 VBA 创建,那么请。
用 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)
基本上,您可以使用
我们需要做的是循环遍历您拥有的数据。 与往常一样,准确的格式很重要,有几种方法可以做到这一点。
一种方法:
首先我们确定我们需要查看的区域,然后我们遍历该列并检查条件。我想到的是:“如果单元格中有东西,但前一行是空的,这是一个新人”.
当这个建立后,我们需要运行格式化。我们使用现有的行 (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