Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 基于括号和括号前后的空格分割单元格的Vba代码_Excel_Vba - Fatal编程技术网

Excel 基于括号和括号前后的空格分割单元格的Vba代码

Excel 基于括号和括号前后的空格分割单元格的Vba代码,excel,vba,Excel,Vba,我有一个excel文件,其中有一些单元格,括号内和括号外有几个文本。我想把细胞分开。例如,我有一些细胞像这样出现 (一些文本在括号内)和(其他文本在括号外) 我希望拆分单元格,以便中的某些文本位于不同的单元格中,括号和也位于不同的单元格中,外部的其他文本也位于不同的单元格中。到目前为止,我所说的只是把括号里的部分分开。提前谢谢。下面是我的代码 Sub StripCells() Dim r As Range, i As Long With CreateObject("VBScript.RegEx

我有一个excel文件,其中有一些单元格,括号内和括号外有几个文本。我想把细胞分开。例如,我有一些细胞像这样出现

(一些文本在括号内)和(其他文本在括号外)

我希望拆分单元格,以便中的
某些文本位于不同的单元格中,
括号和
也位于不同的单元格中,
外部的其他文本也位于不同的单元格中。到目前为止,我所说的只是把括号里的部分分开。提前谢谢。下面是我的代码

Sub StripCells()

Dim r As Range, i As Long
With CreateObject("VBScript.RegExp")
    .Global = True
    .Pattern = "\(([^\)]+)\)"
    For Each r In Range("a1", Range("a" & Rows.Count).End(xlUp))
        If .test(r.Value) Then
            For i = 0 To .Execute(r.Value).Count - 1
                r(, i + 2).Value = "'" & .Execute(r.Value)(i).submatches(0)
            Next
        End If
    Next
End With
End Sub

我找到了一个有效的模式。(我作弊,并使用
Replace()
,但它似乎做到了这一点):


如果所有单元格都以“”开头,则:

Sub-fracture()
变暗r为范围,a、arr、i为长度
对于范围内的每个r(“a1”、范围(“a”和行数)。结束(xlUp))
arr=拆分(替换(r.值,(“,”),”)
i=0
对于arr中的每个a
如果我是0那么
r、 偏移量(0,i)。值=a
如果结束
i=i+1
下一个
下一个r
端接头

您能给出一些示例输入和预期输出吗?
Sub StripCells()

Dim r As Range, i As Long
With CreateObject("VBScript.RegExp")
    .Global = True
    '.Pattern = "\(([^\)]+)\)"
    .Pattern = "((\(([^\)]+)\))|[\w+ ]+)"
    For Each r In Range("a1", Range("a" & Rows.Count).End(xlUp))
        If .test(r.Value) Then
            For i = 0 To .Execute(r.Value).Count - 1
                r(, i + 2).Value = "'" & Replace(Replace(.Execute(r.Value)(i).submatches(0), ")", ""), "(", "")
            Next
        End If
    Next
End With
End Sub
Sub fracture()
    Dim r As Range, a, arr, i As Long

    For Each r In Range("a1", Range("a" & Rows.Count).End(xlUp))
        arr = Split(Replace(r.Value, "(", ")"), ")")
        i = 0
        For Each a In arr
            If i <> 0 Then
                r.Offset(0, i).Value = a
            End If
            i = i + 1
        Next a
    Next r
End Sub