在 vba 中的单个变量中连接更多单元格的值

Concatenate values of more cells in a single variable in vba

我有一个包含四列的 excel 文件:姓名、姓氏、地址、地区。 有很多行。 有没有办法使用 vba?

连接变量中每一行的所有值

我需要一个包含如下内容的变量:

(name1, surname1, address1, area1); (姓名 2、姓氏 2、地址 2、地区 2); (name3, surname3, address3, area3)...

如果您的工作表中有以下数据

然后下面的代码会把数据读入数组...

Option Explicit

Public Sub Example()
    
    Dim RangeData() As Variant  ' declare an array
    
    RangeData = Range("A1:D5").Value2  ' read data into array
    
End Sub

…结构如下:


或者你可以做类似的事情

Public Sub Example()   
    Dim DataRange As Range
    Set DataRange = Range("A2:D5")
    
    Dim RetVal As String
    
    Dim Row As Range
    For Each Row In DataRange.Rows
        RetVal = RetVal & "(" & Join(Application.Transpose(Application.Transpose(Row.Value2)), ",") & "); "
    Next Row

    Debug.Print RetVal
End Sub

要获得此输出:

(name1, surname1, address1, area1); (name2, surname2, address2, area2); (name3, surname3, address3, area3); (name4, surname4, address4, area4); 

.. is there a way to write the result like a sort of list that shows all the values of the cells of the range?

是的,有。除了 PEH 的有效答案和处理 Excel 版本 MS365 之外,您还可以使用

    Dim s as String
    s = Evaluate("ArrayToText(A2:D5, 1)") ' arg. value 1 representing strict format 

导致以下输出字符串:


{"name1","surname1","address1","area1";"name2","surname2","address2","area2";"name3","surname3","address3","area3";"name4","surname4","address4","area4"}

语法

ARRAYTOTEXT(array, [format])

ARRAYTOTEXT 函数returns 任意指定范围内的文本值数组。它传递未更改的文本值,并将 non-text 值转换为文本。

format参数有两个值,0(简洁的默认格式)和1(此处使用严格格式来区分不同的行,也是):

严格格式,即值 1 包括转义字符和行分隔符。生成一个可以在输入公式栏时解析的字符串。将返回的字符串封装在引号中,布尔值、数字和错误除外。

感谢您的回答、建议、想法和提示。很抱歉,如果我的问题不是很清楚,您添加的所有解决方案都非常完美且非常优雅。

最后我找到了一种方法——与你写的所有东西相比更笨的方法——我用 for 语句解决了。

我喜欢这个:

totRow = ActiveSheet.UsedRange.Rows.Count

 For i = 1 To totRow

    name = Cells(i, 1)
    surname = Cells(i, 2)
    address = Cells(i, 3)
    area = Cells(i, 4)

    Example = Example & "(" & name & ", " &  surname & ", " & address & ", " & area & "); "
    
 Next i

Range("E1").Value = Example

它有效(它完成了我想做的事情),但我注意到一个小限制:如果行很多,我无法将整个文本保存在变量中。