如何在Excel VBA中串联字符串和变量(详细分析)

  • Share This
Hugh West

在与 VBA 在Excel中,我们经常需要在工作表中连接字符串(s)和变量(s)。 在本文中,我将向你展示如何在工作表中连接字符串(s)和变量(s)。 VBA 我将用适当的例子和说明来解释这些事情。

在Excel VBA中串联字符串(s)和变量(s)(快速查看)

下载实践工作手册

下载这本练习手册,在阅读本文时进行练习。

连接字符串和变量.xlsm

在Excel VBA中串联字符串(s)和变量(s)(逐步分析)

首先,让我们看看如何将字符串(s)和变量(s)连接起来。 VBA 一步一步来。

⧪ 连接字符串(s)。

要连接两个或更多的字符串,在 VBA ,你可以同时使用算术 加法 (+) 符号和 安培字(& ) 符号。

例如,要串联的字符串是 "伟大的期望" "双城记" 与一个 逗号 ,你可以使用。

 New_String = "《远大前程》" + ", " + "《双城记》" 

或者。

 New_String = "远大前程" & ", " & "双城记" 

运行上述任何代码,它将显示连接的输出。 远大前程》、《双城记》。 .

⧪ 串联变量(s)

如果所有变量都包含字符串值,那么你可以同时使用算术 加法 (+) 符号和 安培号(&) 符号。

但如果他们不这样做,那么你可以只使用 安培号(&) 符号来连接。

例如,我们有两个变量。 A B .

A 包含一个字符串。 "双城记" ,以及 B 包含另一个字符串。 "爱的四十条规则" .

你可以同时使用 加法 (+) 符号和 安培号(&) 符号来连接它们。

 A = "双城记" B = "爱情四十条" New_String = A + ", " + B 

或者。

 A = "双城记" B = "爱情四十条" New_String = A & ", " & B 

在这两种情况下,它们都会返回串联的字符串。

但如果 A 是一个字符串( "双城记" )和 B 是一个整数( 27 ),你必须使用 安培号(&) 符号来连接。

 A = "双城记" B = 27 New_String = A & ", " & B 

它将返回串联的输出。

在Excel VBA中串联字符串和变量的例子(涉及宏、UDF和用户表格)

我们已经学会了用以下方法来连接字符串(s)和变量(s)。 VBA 这一次我们将探讨一些例子,涉及将字符串(s)和变量(s)用 VBA .

例1:在Excel VBA中开发一个串联字符串(s)和变量(s)的宏程序

我们已经学会了用以下方法来连接字符串和变量 VBA 这一次,我们将制定一个 宏观 来连接工作表中多列的字符串和变量。

这里我们有一个数据集,其中有 书名 , 作者 ,以及 价格 一个叫马丁书店的书店的一些书。

让我们制定一个 宏观 来连接列 1, 2, 3 的数据集 B4:D14 在细胞中 F4 .

ǞǞǞ VBA 代码将是。

⧭ VBA代码。

 Sub Concatenate_String_and_Variable() Dim Rng As Range Set Rng = Range("B4:D14") Dim Column_Numbers() As Variant Column_Numbers = Array(1, 2, 3) Separator = ", " Output_Cell = "F4" For i = 1 To Rng.Rows.Count Output = "" For j = LBound(Column_Numbers) To UBound(Column_Number If j UBound(Column_Numbers) Then Output = Output & Rng.Cells(i, Int(Column_Numbers(j)) )& Separator Else Output = Output & Rng.Cells(i, Int(Column_Numbers(j))) End If Next j Range(Output_Cell).Cells(i, 1) = Output Next i End Sub 

⧭ 输出。

运行这段代码,你会得到 3 列在范围内串联起来的 F4:F14。

阅读更多:在Excel中串联多列的宏(使用UDF和UserForm)。

例2:在Excel VBA中创建一个用户定义的函数来串联字符串(s)和变量(s)。

我们已经学会了开发一个 宏观 这一次我们将创建一个 用户定义的功能 来连接Excel中的字符串或变量。

完整的 VBA 代码将是。

⧭ VBA代码。

 Function ConcatenateValues(Value1, Value2, Separator) If VarType(Value1) 8204 And VarType(Value2) 8204 Then ConcatenateValues = Value1 & Separator & Value2 ElseIf VarType(Value1) = 8204 And VarType(Value2) 8204 Then Dim Output1() As Variant ReDim Output1(Value1.Rows.Count - 1, 0) For i = 1 To Value1.Rows.Count 输出1(i - 1, 0) = Value1.Cells(i, 1) &。Separator & Value2 Next i ConcatenateValues = Output1 ElseIf VarType(Value1) = 8204 And VarType(Value2) = 8204 Then Dim Output2() As Variant ReDim Output2(Value1.Rows.Count - 1, 0) For i = 1 To Value1.Rows.Count Output2(i - 1, 0) = Value1.Cells(i, 1) & Separator & Value2.Cells(i, 1) Next i ConcatenateValues = Output2 End If 结束函数 

⧭ 输出。

选择你想连接范围的那一列,并输入这个公式。

=ConcatenateValues("She", "H. Rider Haggard",", ")

它将返回 她,H. Rider Haggard 作为输出。

再次,输入公式。

=ConcatenateValues(B4:B14,30,", ")

[ 阵列公式 所以别忘了按 ctrl + shift + enter 除非你是在 办公室365 .]

它将把30与范围内的所有值连接起来 B4:B14 .

最后,输入。

=ConcatenateValues(B4:B14,C4:C14,", ")

[再次 阵列公式 所以别忘了按 ctrl + shift + enter 除非你是在 办公室365 .]

它将把范围内的所有值串联起来 B4:B14 与那些 C4:C14 .

阅读更多:如何在Excel中串联(3种合适的方法)

类似的阅读。

  • 如何在Excel中把两个或多个单元格的文本合并到一个单元格中(5种方法)
  • 在Excel中把行合并为一个单元格
  • 在Excel中串联数字(4个快速公式)
  • 在Excel中合并文本(8种合适的方法)
  • 如何在Excel中串联撇号(6种简单方法)

例3:在Excel VBA中开发一个用户表格来连接不同工作表中的字符串(s)和变量(s)。

我们已经学会了开发一个 宏观 和一个 用户定义的功能 来连接字符串和值。 最后,我们将开发一个 用户表格 将字符串和数值连接到所需工作表的预期位置。

⧪ 第一步:插入用户表格

转到 Insert> UserForm 中的选项。 VBA 工具栏,插入一个新的 用户表格 .

⧪ 第2步:将工具拖到用户表格中

A 用户表格 叫做 用户表格1 将被打开,同时还有一个 工具箱 叫做 控制 .

将你的鼠标移到该 在 "工具箱 "中拖动2个列表框、5个文本框、7个标签和1个手动按钮到UserForm。 .

改动显示的 标签 如图所示。

同样地,改变显示的 命令按钮 认可 .

⧪ 第三步:为TextBox1编写代码

双击 文本框1 . A 私人子程序 叫做 纹理框1_变化 将打开,在那里输入以下代码。

 Private Sub TextBox1_Change() On Error GoTo Task Range(UserForm1.TextBox1.Text).Select UserForm1.ListBox1.Clear For i = 1 To Range(UserForm1.Text).Columns.Count UserForm1.ListBox1.AddItem Range(UserForm1.TextBox1.Text).Cells(1, i) Next i Exit Sub Task: x = 5 End Sub 

⧪ 第四步:为TextBox3编写代码

同样地,双击 文本框3 .另一个 私人子程序 叫做 纹理框3_变化 将打开,在那里输入以下代码。

 Private Sub TextBox3_Change() On Error GoTo Task Starting_Cell = UserForm1.TextBox3.Text For i = 1 To Len(Starting_Cell) If Asc(Mid(Starting_Cell, i, 1))>= 48 And Asc(Mid(Starting_Cell, i, 1)) <= 57 Then Col = Left(Starting_Cell, i - 1) Row = Right(Starting_Cell, Len(Starting_Cell) - i + 1) End_Range = Col + Right(Int(Row) +Range(UserForm1.TextBox1.Text).Rows.Count - 1), Len(Str(Int(Row) + 10)) - 1) Set Rng = Range(Starting_Cell + ":" + End_Range) Rng.Select Exit For End If Next i Rng.Cells(1, 1) = UserForm1.TextBox4.Text Exit Sub Task: x = 5 End Sub 

⧪ 步骤5:为TextBox4编写代码

同时,双击 文本框3 .另一个 私人子程序 叫做 纹理框3_变化 将打开,在那里输入以下代码。

 Private Sub TextBox4_Change() If UserForm1.TextBox3.Text "" Then Selection.Cells(1, 1) = UserForm1.TextBox4.Text End If End Sub 

⧪ 步骤6:为ListBox2编写代码

然后双击 列表框2 .当 私人子程序 叫做 列表框2_点击 打开,在那里输入这个代码。

 Private Sub ListBox2_Click() Reserved_Address = Selection.Address For i = 0 To UserForm1.ListBox2.ListCount - 1 If UserForm1.ListBox2.Selected(i) = True Then Worksheets(UserForm1.ListBox2.List(i)).Activate Range(Reserved_Address).Select Exit For End If Next i If UserForm1.TextBox3.Text " " Then Selection.Cells(1, 1) = UserForm1.TextBox4.Text End If End Sub 

⧪ 第七步:为CommanButton1编写代码

同时,双击 命令按钮1 在这之后 私人子程序 叫做 命令按钮1_改变 打开,在那里插入以下代码。

 Private Sub CommandButton1_Click() On Error GoTo Message Dim Rng As Range Set Rng = Worksheets(UserForm1.TextBox5.Text).Range(UserForm1.TextBox1.Text) Dim Column_Numbers() As Variant Count = 0 For i = 0 To UserForm1.ListBox1.ListCount - 1 If UserForm1.ListBox1.Selected(i) = True Then ReDim Preserve Column_Numbers(Count) Column_Numbers(Count) = i + 1 Count = Count + 1End If Next i Separator = UserForm1.TextBox2.Text Output_Cell = UserForm1.TextBox3.Text For i = 0 To UserForm1.ListBox2.ListCount-1 If UserForm1.ListBox2.Selected(i) = True Then Sheet_Name = UserForm1.ListBox2.List(i) Exit For End If Next i Worksheets(Sheet_Name) .Range(Output_Cell) .Cells(1, 1) = UserForm1.TextBox4.Text For i = 2 To Rng.Rows.Count Output = "" For j= LBound(Column_Numbers) To UBound(Column_Numbers) If j UBound(Column_Numbers) Then Output = Output & Rng.Cells(i, Int(Column_Numbers(j)) & Separator Else Output = Output & Rng.Cells(i, Int(Column_Numbers(j)) End If Next j Worksheets(Sheet_Name) .Range(Output_Cell) .Cells(i, 1) = Output Next i Unload UserForm1 Exit Sub Message。MsgBox "正确选择所有选项。", vbExclamation End Sub 

⧪ 第7步:编写运行用户表格的代码

现在是最后一步。 插入一个新的 模块 VBA 工具栏,并插入以下代码。

 Sub Run_UserForm() UserForm1.Caption = "Concatenate Values" UserForm1.TextBox1.Text = Selection.Address UserForm1.TextBox5.Text = ActiveSheet.Name UserForm1.ListBox1.ListStyle = fmListStyleOption UserForm1.ListBox1.BorderStyleSingle UserForm1.ListBox1.MultiSelect = fmMultiSelectMulti UserForm1.ListBox1.Clear For i = 1 To Selection.Columns.Count UserForm1.ListBox1.AddItemSelection.Cells(1, i) Next i UserForm1.ListBox2.ListStyle = fmListStyleOption UserForm1.ListBox2.BorderStyleSingle For i = 1 To Sheets.Count UserForm1.ListBox2.AddItem Sheets(i).Name Next i Load UserForm1 UserForm1.Show End Sub 

⧪ 步骤8:运行用户表格

你的 用户表格 要运行它,从工作表中选择数据集(包括 标题 )并运行 宏观 叫做 运行_用户表格 .

ǞǞǞ 用户表格 选定的范围地址将显示在 文本框1 ( B3:D4 如果你愿意,你可以改变它。 工作表中选定的范围将改变。

选择你想连接的列,从 串联的列 列表框,这里我选择了 书名 价格 .

输入 分离器 .在这里,我已经进入了一个 逗号 ( , ).

选择你想把串联的范围放在哪里的工作表名称,从 串联在一起的 列表框,在这里我输入了 第三张 .

(当你选择工作表的时候,它就会被激活,即使它不是活动的工作表)。

然后插入 输出位置 它是连接区的第一个单元格的单元格引用。 在这里我把 B3 .

(当你进入 输出位置 ,输出范围将被选中)。

最后,输入 输出头 (输出范围的标题)。 在这里我把 串联的范围 .

(当你把 输出头 ,输出列的标题将被设置)。

点击 认可 你会在所需的位置上得到所需的输出。

阅读更多:如何使用VBA将字符串和整数连接起来

总结

因此,这些是你可以使用Excel的几个例子 VBA 来连接字符串和变量。 希望这些例子能让你明白一切。 你有什么问题吗? 请随时问我们。 不要忘记访问我们的网站 ǞǞǞ 以了解更多帖子和更新。

Hugh West is a highly experienced Excel trainer and analyst with over 10 years of experience in the industry. He holds a Bachelor's degree in Accounting and Finance and a Master's degree in Business Administration. Hugh has a passion for teaching and has developed a unique teaching approach that is easy to follow and understand. His expert knowledge of Excel has helped thousands of students and professionals worldwide improve their skills and excel in their careers. Through his blog, Hugh shares his knowledge with the world, offering free Excel tutorials and online training to help individuals and businesses reach their full potential.