在 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
它有效(它完成了我想做的事情),但我注意到一个小限制:如果行很多,我无法将整个文本保存在变量中。
我有一个包含四列的 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
它有效(它完成了我想做的事情),但我注意到一个小限制:如果行很多,我无法将整个文本保存在变量中。