2

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

我需要第 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 代码,将会非常有帮助。

4

6 回答 6

4

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

例如

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

'// will print:
'// 'some';'words';'here'
于 2017-03-24T17:28:20.227 回答
3

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

B2

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

并向下拖动:

在此处输入图像描述

或者

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

=SUBSTITUTE(TEXTJOIN(";",TRUE,"'"&B1,"'"&A2&"'"),"'","",1)
于 2017-03-24T18:12:42.490 回答
2

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

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

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

这是更新公式的结果:

在此处输入图像描述

更新感谢布鲁斯韦恩

使用以下命令在单元格 B2 中输入值:

="'" & A2 & "'"

所以它将采取第一个'

于 2017-03-24T17:35:05.110 回答
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
于 2017-03-24T17:55:57.737 回答
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,";")

并填写。

于 2017-03-24T18:43:37.543 回答
0

为了避免视觉混乱,我将提供CHAR(39)&CHAR(59)&CHAR(39)."';'"

在 B1 中,使用这个:

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

填写下来。

![在此处输入图像描述

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

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

在此处输入图像描述

单引号(也称为单引号或')是 ASCII 字符 39,分号是 ASCII 字符 59。

于 2017-04-12T01:14:37.353 回答