我在特定列的单元格中有一个多行文本,每行中的数字都在括号[]中
实际数据超过1000行,想要在新插入的列中生成结果输出1和2。
我有一个公式,用于提取在括号之间写入的文本,但它只适用于第一行而不是整个多行文本。
=MID(A2,FIND("[",A2)+1,FIND("]",A2)-FIND("[",A2)-1)
任何人都可以帮助我使用宏在特定列“ABC”上运行并且仅将文本保留在括号中。
答案 0 :(得分:2)
尝试类似:
Sub get_btw_bracket()
output_row = 1
input_row = 1
input_column = 1
Do Until Sheet1.Cells(1, input_column) = "ABC" Or input_column = 50
input_column = input_column + 1
Loop
If input_column = 50 Then Exit Sub
Do Until Sheet1.Cells(input_row, input_column) = ""
cell_data = Sheet1.Cells(input_row, input_column)
split_by_newline = Split(cell_data, Chr(10))
For Each element In split_by_newline
Sheet1.Cells(output_row, 10) = Right(element, Len(element) - InStr(element, "[") + 1)
output_row = output_row + 1
Next element
input_row = input_row + 1
Loop
End Sub
答案 1 :(得分:0)
启用工作表中的宏,按Alt + F11
并选择插入 - >在模块窗口中模块化并粘贴以下代码,
Sub SplitCells()
'Update 20141024
Dim Rng As Range
Dim WorkRng As Range
On Error Resume Next
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address,
Type:=8)
For Each Rng In WorkRng
lLFs = VBA.Len(Rng) - VBA.Len(VBA.Replace(Rng, vbLf, ""))
If lLFs > 0 Then
Rng.Offset(1, 0).Resize(lLFs).Insert shift:=xlShiftDown
Rng.Resize(lLFs + 1).Value = Application.WorksheetFunction.Transpose(VBA.Split(Rng, vbLf))
End If
Next
End Sub
保存模块,选择要修改的列范围,然后按模块中的F5。该范围再次显示在对话框中。按确定。 现在,您将所有文本放在不同的行中。您现在可以使用此列并使用公式派生所需的字符串。希望这会有所帮助。