VBA加入| Excel VBA连接功能的分步示例
与工作表中的连接函数和用于将两个或两个以上字符串连接在一起的&命令类似,在VBA中,我们使用Join命令来执行此操作;在VBA中的Join中,我们获取数组中的数据源与连接类似,我们使用定界符将它们连接起来。
Excel VBA JOIN函数
顾名思义, VBA JOIN功能 用于将带有指定定界符的子字符串数组连接在一起。如果我们未指定任何分隔符,则它将“空格”作为默认的分隔符。它与Excel中的Concatenate函数具有相同的功能,只是我们只需要指定一次定界符,而在Concatenate函数中,每次必须在每两个字符串之间指定定界符。
该函数的语法是
如我们所见,该函数接受两个参数并返回一个字符串。参数为:
- 源数组:我们需要指定或引用要连接的子字符串数组。
- 定界符:分隔符用于在创建结果字符串时分隔每个子字符串。由于这是一个可选参数,因此如果我们省略它,则定界符将设置为空格“”。
VBA SPLIT函数与VBA JOIN函数完全相反。
VBA连接功能的示例
下面是Excel VBA中联接函数的示例。
您可以在此处下载此VBA连接功能Excel模板– VBA连接功能Excel模板VBA加入–示例1
假设我们要联接名字(Ramesh),中间名(Kumar)和姓氏(Mishra)。
步骤将是:
- 首先,我们需要打开Visual Basic编辑器。我们可以通过在“开发人员”标签的excel下面的“代码”组中单击“ Visual Basic”命令来执行相同操作,也可以使用excel快捷键 Alt + F11.
- 通过右键单击“工作表1”并从上下文菜单中选择“插入”命令来插入模块,然后选择要插入的“模块”。
- 创建一个名为“ JoiningName”的子例程。
代码:
子JoiningName()结束子
- 如下使用JOIN函数
代码:
Sub JoiningName()Range(“ D2”)。Value = Join(Array(“ Ramesh”,“ Kumar”,“ Mishra”))End Sub
我们可以看到我们已经使用ARRAY函数将SourceArray提供给JOIN函数,并且跳过了指定分隔符的操作,因此“ space”将成为默认字符。当我们使用F5键或手动执行此代码时,JOIN函数的处理后的值将写入单元格D2中。
VBA加入–示例2
假设我们要创建各种excel文件,其商品名称仅包含该商品的销售额。
- 使用快捷键Alt + F11打开Visual Basic编辑器。
- 右键单击“ Sheet1”(示例2)工作表以打开上下文菜单,然后单击“插入”以在VBA项目中插入VBA“模块”。
- 定义一个名为“ CreateItemSoldFiles”的子例程。
代码:
子CreateItemSoldFiles()结束子
- 我们需要使用“工具”菜单->“引用...”命令来设置对“ Microsoft Scripting Runtime”对象库的引用,因为我们将使用一些代码(对象),如果不包括该对象库,该代码将无法工作。
- 现在我们将声明所有变量。
代码:
将FSO调暗为新Scripting.FileSystemObject
上面的FSO变量提供对VBA FileSystemObject的访问。绑定后,我们可以使用诸如BuildPath,CopyFile,CreateTextFile等功能。
- 下一条语句创建一个TextStream对象。通过TextStream对象,我们可以读取或附加到原始文件。
代码:
将FSO调为新的Scripting.FileSystemObject调暗为Scripting.TextStream
- 我们将声明更多变量。 “ r”用于保存范围内的行,“ fs”用于存储最终连接的字符串,“ cols”用于存储范围内的列数,“ FolPath”用于存储文件夹的路径,以便我们可以保存文件在文件夹中,“ Items_Sold”用于存储各种项目名称,以使用这些名称创建文件。
代码:
Dim r As Range Dim fs As String Dim cols Integer Dim FolPath As String Dim Items_Sold As String
- 为了计算范围内的列总数,我们将定义以下语句。
代码:
cols = Range(“ A1”)。CurrentRegion.Columns.Count
该语句将首先为单元格A1选择当前区域,然后将计算当前区域中的列总数。
- 我们将编写以下语句,以使用VBA ENVIRON函数和串联运算符为变量“ FolPath”分配路径。
代码:
FolPath = Environ(“ UserProfile”)&“ \ Desktop \ Items_Sold”如果不是FSO.FolderExists(FolPath),则FSO.CreateFolder FolPath
如果该文件夹不存在于同一位置,则第二条语句将创建该文件夹。
- 这段代码将B列的值一个接一个地分配给“ Items_Sold”,因为当前选定的单元格位于A列中,所以我们已经使用“ OFFSET函数”来获取B列中的单元格引用。
代码:
Items_Sold = r.Offset(0,1).Value
- 以下带边框的语句将在追加模式中一一打开具有存储在“ Items_Sold”变量中的名称的文件(新值将最后追加)。
代码:
设置ts = FSO.OpenTextFile(FolPath和“ \”&Items_Sold&“ .xls”,ForAppending,True)
我们已将Concatenate运算符与变量“ FolPath”和“ Items_Sold”以及静态值(“ \”和“ .xls”)一起使用,以创建excel文件的文件名。
- 我们需要记住,VBA JOIN函数仅将一维数组作为SourceArray要将行转换为一维数组,我们需要使用Application.Transpose方法两次。
代码:
fs = Join(Application.Transpose(Application.Transpose(r.Resize(1,cols).Value)),vbTab)
我们使用范围对象的Resize方法将范围调整为该范围内许多列的宽度。
作为分隔符,我们使用了“ vbTab”关键字,以便将值填充到不同的单元格中。
- 由于已将JOIN函数的处理后的值存储到'fs'变量中,因此将fs的值写入VBA创建的excel文件的新行中,该文件针对原始文件中从第2行到最后一行的每一行(在本例中为是第350行)。
- 在结束循环之前,我们将关闭打开的文件。该代码将如屏幕截图所示。
现在,我们已经编写了完整的代码。
代码:
Sub CreateItemSoldFiles()将FSO用作新脚本。将FileSystemObject用作脚本。将文本流作为范围将Dim fs作为字符串将Dim cols作为整数Dim FolPath作为字符串Dim Items_Sold作为字符串cols = Range(“ A1”)。CurrentRegion.Columns。计数FolPath = Environ(“ UserProfile”)&“ \ Desktop \ Items_Sold”如果不是FSO.FolderExists(FolPath),则对每个r在Range(“ A2”,Range(“ A1”)。End(xlDown)中的FSO.FolderExists(FolPath) )Items_Sold = r.Offset(0,1).Value Set ts = FSO.OpenTextFile(FolPath&“ \”&Items_Sold&“ .xls”,ForAppending,True)fs = Join(Application.Transpose(Application.Transpose(r .Resize(1,cols).Value)),vbTab)ts.WriteLine fs ts.Close Next r End Sub
现在执行代码,我们按F5,然后我们可以看到已经在桌面上借助VBA代码创建了一个名为“ Items_Sold”的文件夹。
在该文件夹中,使用项目名称创建了7个唯一文件,我们可以在文件中找到有关该特定项目的详细信息。
Laptop.xls
有关VBA JOIN函数的注意事项
- 这 源数组 必须是一维数组。我们无法引用单个单元格,因为这将创建多个多维数组。
- 如果我们将零长度字符串(“”)指定为分隔符,则数组中的所有项目都将没有分隔符的情况下进行级联。