Excel多行文本截断

时间:2017-04-08 16:51:52

标签: excel excel-vba vba

我在特定列的单元格中有一个多行文本,每行中的数字都在括号[]中

LINK TO FILE

实际数据超过1000行,想要在新插入的列中生成结果输出1和2。

我有一个公式,用于提取在括号之间写入的文本,但它只适用于第一行而不是整个多行文本。

=MID(A2,FIND("[",A2)+1,FIND("]",A2)-FIND("[",A2)-1)

任何人都可以帮助我使用宏在特定列“ABC”上运行并且仅将文本保留在括号中。

2 个答案:

答案 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。该范围再次显示在对话框中。按确定。 现在,您将所有文本放在不同的行中。您现在可以使用此列并使用公式派生所需的字符串。希望这会有所帮助。