【问题标题】:Get a certain pattern for each cell of a column为列的每个单元格获取特定模式
【发布时间】:2020-03-10 22:53:41
【问题描述】:

我有这个excel文件:

我想恢复为第一列,每个单元格的一部分内容。但是,单元格是这种形式:

sentence [A/sentence] [B/sentence] [C/sentence] sentence

我希望只有 [ ] 之间的模式。

我有这个代码:

Sub groupByTypo2()
    Dim rng As Range, c As Range
    Dim dict As Object, dict2 As Object, dict3 As Object, col As Collection
    Dim dictFonctionnel As Object, dictTechnique As Object, dictSecurite As Object
    Dim v, w, k
    Dim sKey As String, S As String
    Dim I As Long

    'get the input range for the labels
    With ActiveSheet
        Set rng = .Range(.Range("C1"), .Cells(.Rows.Count, 3).End(xlUp))
    End With

    For Each c In rng.Cells
        v = Trim(c.Value)
        Debug.Print "valeur de v : " & v

         Z = Split(Trim(c.Offset(0, -2).Value))
            For Each w In Z
            Debug.Print "valeur de w : " & w

            Next w
    Next c

End Sub

这会导致输出:

valeur de v : Fonctionnel
valeur de w : sentence
valeur de w : [A/sentence
valeur de w : 1]
valeur de w : [B/sentence
valeur de w : 2]
valeur de w : [C/sentence
valeur de w : 3]
valeur de w : sentence
valeur de v : Fonctionnel
valeur de w : sentence
valeur de w : [A/sentence
valeur de w : 4]
valeur de w : [B/sentence
valeur de w : 5]
valeur de w : [C/sentence
valeur de w : 6]
valeur de w : sentence
valeur de v : Securite
valeur de w : sentence
valeur de w : [A/sentence
valeur de w : 7]
valeur de w : [B/sentence
valeur de w : 8]
valeur de w : [C/sentence
valeur de w : 9]
valeur de w : sentence
valeur de v : Fonctionnel
valeur de w : sentence
valeur de w : [A/sentence
valeur de w : 10]
valeur de w : [B/sentence
valeur de w : 11]
valeur de w : [C/sentence
valeur de w : 12]
valeur de w : sentence
valeur de v : Technique
valeur de w : sentence
valeur de w : [A/sentence
valeur de w : 13]
valeur de w : [B/sentence
valeur de w : 14]
valeur de w : [C/sentence
valeur de w : 15]
valeur de w : sentence
valeur de v : Securite
valeur de w : sentence
valeur de w : [A/sentence
valeur de w : 16]
valeur de w : [B/sentence
valeur de w : 17]
valeur de w : [C/sentence
valeur de w : 18]
valeur de w : sentence

但我想拥有:

valeur de v : Fonctionnel
valeur de w : [A/sentence 1]
valeur de w : [B/sentence 2]
valeur de w : [C/sentence 3]
valeur de v : Fonctionnel
valeur de w : [A/sentence 4]
valeur de w : [B/sentence 5]
valeur de w : [C/sentence 6]
valeur de v : Securite
valeur de w : [A/sentence 7]
valeur de w : [B/sentence 8]
valeur de w : [C/sentence 9]
valeur de v : Fonctionnel
valeur de w : [A/sentence 10]
valeur de w : [B/sentence 11]
valeur de w : [C/sentence 12]
valeur de v : Technique
valeur de w : [A/sentence 13]
valeur de w : [B/sentence 14]
valeur de w : [C/sentence 15]
valeur de v : Securite
valeur de w : [A/sentence 16]
valeur de w : [B/sentence 17]
valeur de w : [C/sentence 18]

我认为问题出在这一行:

Z = Split(Trim(c.Offset(0, -2).Value))

但我不知道如何解决。

感谢您的帮助!

【问题讨论】:

  • 以下答案可能对您有所帮助:excel vba- extract text between 2 characters
  • split 在这种情况下不起作用。而是使用正则表达式来获取 [] 之间的值。类似Set regEx = CreateObject("VBScript.RegExp") regEx.Pattern = "\[(.*?)\]" Set matches = regEx.Execute(Trim(c.Offset(0, -2).Value))
  • 谢谢大家的回答,我今天下午试试
  • @Maddy Split 可以与第二次吐痰结合使用,以针对特定部位。您可以在 2 个拆分之间trap 特定文本。

标签: excel vba


【解决方案1】:

不确定我是否正确回复了您的输入,但这可能对您有用。我制作的假数据集是:

我用过的代码:

Sub test()
Dim MiMatriz As Variant
Dim i As Long
Dim ZZ As Long
MiMatriz = Range("A3:A8").Value

For i = 1 To UBound(MiMatriz) Step 1
    For ZZ = 0 To 3 Step 1
        If ZZ > 0 Then
            Debug.Print "[" & Trim(Split(Split(MiMatriz(i, 1), "[")(ZZ), "]")(0)) & "]"
        Else
            Debug.Print Trim(Split(Split(MiMatriz(i, 1), "[")(ZZ), "]")(0))
        End If
    Next ZZ
Next i

Erase MiMatriz

End Sub

我得到的输出:

Fonctionnel
[A/sentence 1]
[B/sentence 2]
[C/sentence 3]
Fonctionnel
[A/sentence 4]
[B/sentence 5]
[C/sentence 6]
Securite
[A/sentence 7]
[B/sentence 8]
[C/sentence 9]
Fonctionnel
[A/sentence 10]
[B/sentence 11]
[C/sentence 12]
Technique
[A/sentence 13]
[B/sentence 14]
[C/sentence 15]
Securite
[A/sentence 16]
[B/sentence 17]
[C/sentence 18]

无论如何,我认为如果您能发布一个真实的数据示例(您的输入)会很有帮助。

希望这会有所帮助。

更新:看起来 OP 只需要括号内的文本,所以我们需要调整 ZZ 循环:

Sub test()
Dim MiMatriz As Variant
Dim i As Long
Dim ZZ As Long
MiMatriz = Range("A3:A8").Value

For i = 1 To UBound(MiMatriz) Step 1
    For ZZ = 1 To 3 Step 1
        Debug.Print "[" & Trim(Split(Split(MiMatriz(i, 1), "[")(ZZ), "]")(0)) & "]"
    Next ZZ
Next i

Erase MiMatriz

End Sub

这个更新代码的输出是:

[A/sentence 1]
[B/sentence 2]
[C/sentence 3]
[A/sentence 4]
[B/sentence 5]
[C/sentence 6]
[A/sentence 7]
[B/sentence 8]
[C/sentence 9]
[A/sentence 10]
[B/sentence 11]
[C/sentence 12]
[A/sentence 13]
[B/sentence 14]
[C/sentence 15]
[A/sentence 16]
[B/sentence 17]
[C/sentence 18]

【讨论】:

  • 感谢您的回答!在您的示例中,我需要删除所有不带 [ ] 的模式。所以我不必恢复 Fonctionnel、Securite、Technique……你能告诉我我需要改变什么吗?
猜你喜欢
  • 2023-04-08
  • 2015-10-06
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多