【问题标题】:Insert square brackets around some text in a cell using Excel VBA使用 Excel VBA 在单元格中的某些文本周围插入方括号
【发布时间】:2016-08-26 03:28:39
【问题描述】:

是否可以在没有 Excel VBA 代码的单元格中的某些文本周围插入方括号?

它需要找到第一个逗号之前的文本,如果第一个逗号之前没有方括号,则用[]方括号括起来

单元格 A 中的文本就是这种格式。全部在一个文本字符串中

A12345, blah, blah, blah, blah blah
[B45678], blah, blah, blah, blah blah
C97665, blah, blah, blah, blah blah
D89798, blah, blah, blah, blah blah
[B97494], blah, blah, blah, blah blah
Y34987, blah, blah, blah, blah blah

我需要运行它进入

[A12345], blah, blah, blah, blah blah
[B45678], blah, blah, blah, blah blah
[C97665], blah, blah, blah, blah blah
[D89798], blah, blah, blah, blah blah
[B97494], blah, blah, blah, blah blah
[Y34987], blah, blah, blah, blah blah

我没有 VBA 知识,但认为最好使用 VBA 处理,因为可能有数千行

【问题讨论】:

  • 这绝对是可能的......我会说看看InStr函数exceltrick.com/formulas_macros/vba-instr-function寻找第一个逗号,然后查看字符串的第一个字母......试一试,如果遇到困难,请将一些代码作为新问题发布,其中包含您要解决的特定问题。
  • 老实说,您甚至可以使用 Excel 公式轻松管理它。
  • 我会使用空格作为分隔符,然后在新值之间添加列并在文本周围放置“[”和“]”,然后将这些值连接在一起。
  • 我能算出的最接近的公式是:=IF(ISERROR(MID($A2,FIND("[",$A2)*1,FIND("]",$A2)-FIND ("[",$A2)+1)),"["&LEFT(A2,6)&"]",IF(ISERROR(LEFT($A2,FIND("@@@",SUBSTITUTE($A2," ,","@@@",1))-1)),"无代码",LEFT($A2,FIND("@@@",SUBSTITUTE($A2,",","@@@", 1))-1)))。但是它不排除没有逗号的文本,因为它仍然用括号括起来

标签: vba excel


【解决方案1】:

使用如下数据:

运行这个小宏:

Sub bracket()
    Dim r As Range, N As Long, s As String
    Dim i As Long

    N = Cells(Rows.Count, "A").End(xlUp).Row

    For i = 1 To N
        ary = Split(Cells(i, 1).Text, ",")
        If Left(ary(0), 1) = "[" Then
        Else
            ary(0) = "[" & ary(0) & "]"
            Cells(i, 1).Value = Join(ary, ",")
        End If
    Next i
End Sub

将产生:

编辑#1:

为了调整原始代码以处理 E 列中的数据,我们需要更改 3 行代码:

Sub bracket()
    Dim r As Range, N As Long, s As String
    Dim i As Long

    N = Cells(Rows.Count, "E").End(xlUp).Row

    For i = 1 To N
        ary = Split(Cells(i, 5).Text, ",")
        If Left(ary(0), 1) = "[" Then
        Else
            ary(0) = "[" & ary(0) & "]"
            Cells(i, 5).Value = Join(ary, ",")
        End If
    Next i
End Sub

这是因为Cells(13,1) 引用单元格A13,而Cells(13,5) 将引用单元格E13。

【讨论】:

  • 这工作得更好,因为它可以就地解决问题,而不必创建另一个列。谢谢
  • 我试图让它在 E 列中工作,所以将“A”更改为 N = Cells(Rows.Count,“E”).End(xlUp).Row,但它仍然会更改文本在 A 列中
  • @BradleyS 查看我的 EDIT#1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-23
相关资源
最近更新 更多