我有一列细胞。它们需要连接成一个字符串,中间有多个分隔符。
我需要类似于第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代码会非常有用。
答案 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&"'"))
并向下拖动:
或者
在B1
中,使用="'"&A1&"'"
,然后在B2
中(并向下拖动):
=SUBSTITUTE(TEXTJOIN(";",TRUE,"'"&B1,"'"&A2&"'"),"'","",1)
答案 2 :(得分:2)
您可以使用以下公式获得所需的输出:
=CONCATENATE(B2, " ; '", A3, "'")
首先手动将单元格A2中的值设置为B2(使用="'" & A2 & "'"
公式),然后将此公式粘贴到单元格B3中并向下拖动。
以下是更新公式的结果:
更新(感谢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
功能。它还有一些选项,而不是你正在寻找的。 p>
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)