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。