Excel VBA - 字符串与分隔符和单引号的连接

时间:2017-03-24 17:20:26

标签: excel vba excel-vba string-concatenation textjoin

我有一列细胞。它们需要连接成一个字符串,中间有多个分隔符。

我需要类似于第1列

中第2列的结果
Column 1 | column 2
a1       |   'a1'
a2       |    'a1';'a2'
a3       |    'a1';'a2';'a3'
a4       |    'a1';'a2';'a3';'a4'
a5       |    'a1';'a2';'a3';'a4';'a5'

目前我使用以下公式

Column 1  |   Column 2
a1        |  ="'"&a1&"'"&";"
a2        |  =b1&"'"&a2&"'"&";"
a3        |

并将其复制到B2列。

是否有可以帮助我做到这一点的VBA代码。我确实找到了一些可以添加单个分隔符的内容。在单元格之间但我无法修改它以添加多个分隔符。

共享相同的VBA代码会非常有用。

6 个答案:

答案 0 :(得分:4)

您可以在VBA中使用给定分隔符的Join方法:

e.g。

someArray = Array("some", "words", "here")
Debug.Print "'" & Join(someArray, "';'") & "'"

'// will print:
'// 'some';'words';'here'

答案 1 :(得分:3)

我知道你要求VBA,但你可以用公式做到这一点:

B2

=IF(ROW()=2,TEXTJOIN(";",TRUE,"'"&B1,"'"&A2&"'"),TEXTJOIN(";",TRUE,B1,"'"&A2&"'"))

并向下拖动:

enter image description here

或者

B1中,使用="'"&A1&"'",然后在B2中(并向下拖动):

=SUBSTITUTE(TEXTJOIN(";",TRUE,"'"&B1,"'"&A2&"'"),"'","",1)

答案 2 :(得分:2)

您可以使用以下公式获得所需的输出:

=CONCATENATE(B2, " ; '", A3, "'")

首先手动将单元格A2中的值设置为B2(使用="'" & A2 & "'"公式),然后将此公式粘贴到单元格B3中并向下拖动。

以下是更新公式的结果:

enter image description here

更新感谢BruceWayne

使用以下方法在单元格B2中输入值:

="'" & A2 & "'"

所以它将采用第一个 '

答案 3 :(得分:1)

我会像这样做一个简单的循环。

Sub combineRows()

    'start and end rows, assuming column A
    Dim startRow, endRow As Integer

    Dim myString, myAdd As String

    startRow = 2
    endRow = 6



    For i = startRow To endRow


        myAdd = "'" & Range("A" & i) & "'" & ";"

        myString = myString + myAdd

        Range("B" & i) = myString

    Next i



End Sub

答案 4 :(得分:1)

这是我的JoinRange功能。它还有一些选项,而不是你正在寻找的。

Public Function JoinRange(rInput As Range, _
     Optional sDelim As String = vbNullString, _
     Optional sLineStart As String = vbNullString, _
     Optional sLineEnd As String = vbNullString, _
     Optional sBlank As String = vbNullString, _
     Optional sQuotes As String = vbNullString, _
     Optional IgnoreBlanks As Boolean = True) As String

     Dim vaCells As Variant
     Dim i As Long, j As Long
     Dim lCnt As Long
     Dim aReturn() As String

     If rInput.Cells.Count = 1 Then
        ReDim aReturn(1 To 1)
        aReturn(1) = sQuotes & rInput.Value & sQuotes
     Else
        vaCells = rInput.Value
         ReDim aReturn(1 To rInput.Cells.Count)

         For i = LBound(vaCells, 1) To UBound(vaCells, 1)
             For j = LBound(vaCells, 2) To UBound(vaCells, 2)
                 If Len(vaCells(i, j)) = 0 Then
                     If Not IgnoreBlanks Then
                         lCnt = lCnt + 1
                         aReturn(lCnt) = sQuotes & sBlank & sQuotes
                     End If
                 Else
                     lCnt = lCnt + 1
                     aReturn(lCnt) = sQuotes & vaCells(i, j) & sQuotes
                 End If
             Next j
         Next i

         ReDim Preserve aReturn(1 To lCnt)
     End If

     JoinRange = sLineStart & Join(aReturn, sDelim) & sLineEnd

End Function

在B1中使用

=JoinRange($A$1:A1,";")

并填写。

答案 5 :(得分:0)

  

为了避免视觉混淆,我将CHAR(39)&CHAR(59)&CHAR(39)代替"';'"

在B1中,使用:

=CHAR(39)&TEXTJOIN(CHAR(39)&CHAR(59)&CHAR(39), TRUE, A$1:A1)&CHAR(39)

填写。

![enter image description here

......或者如果最终结果是唯一重要的事情,

=CHAR(39)&TEXTJOIN(CHAR(39)&CHAR(59)&CHAR(39), TRUE, A1:A5)&CHAR(39)

enter image description here

单个刻度( aka 单引号或')是ASCII字符39,分号是ASCII字符59.