Excel VBA – 带分隔符和单引号的string结合
我有一列细胞。 他们需要连接成一个单一的string与多个分隔符之间。
我需要第2列中的值与第1列中的值相似
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代码相同。
您可以在给定的分隔符中使用VBA中的Join
方法:
例如
someArray = Array("some", "words", "here") Debug.Print "'" & Join(someArray, "';'") & "'" '// will print: '// 'some';'words';'here'
我知道你问过VBA,但你可以用一个公式来做到这一点:
在B2
:
=IF(ROW()=2,TEXTJOIN(";",TRUE,"'"&B1,"'"&A2&"'"),TEXTJOIN(";",TRUE,B1,"'"&A2&"'"))
并向下拖动:
要么
在B1
,使用="'"&A1&"'"
,然后在B2
(并向下拖动):
=SUBSTITUTE(TEXTJOIN(";",TRUE,"'"&B1,"'"&A2&"'"),"'","",1)
您可以使用此公式获得所需的输出:
=CONCATENATE(B2, " ; '", A3, "'")
首先手动将单元格A2中的值赋给B2(使用="'" & A2 & "'"
公式),然后将此公式粘贴到单元格B3中,并将其拖放。
以下是更新公式的结果:
更新 ( 感谢BruceWayne )
input单元格B2中的值使用:
="'" & A2 & "'"
所以它会采取第一个'
我只是这样做一个简单的循环。
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
这是我的JoinRange
函数。 它有更多的select比你正在寻找。
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,";")
并填写。
为了避免视觉混乱,我会提供
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。