Как сцепить ячейки vba excel

Return to VBA Code Examples

In this Article

  • Concatenate Strings
  • Concatenate Cells
    • Concatenate Variables
    • Using the & Operator with Spaces
    • Using the & Operator to Concatenate a Quotation Mark
    • Putting Strings on a New line

We have already gone over an introduction to string functions in our VBA Strings and Substrings Functions tutorial. We are now going to look at how to concatenate text strings.

Concatenate Strings

You can use the & operator in VBA to join text strings.

MsgBox "Merge" & "Text"

vba-concatenate

Concatenate Cells

You can also concatenate cells together. Below, we have the text strings in A1 and B1:

Concatenate Text Strings in VBA

The following code shows you how to join text strings from cell A1 and B1 using the & operator,  in cell C1:

Range("C1").Value = Range("A1").Value & Range("B1").value

The result is:

Using The Concatenate Operator in VBA to join Text Strings

Concatenate Variables

This is the full procedure to concatenate two cells together using string variables.

Sub ConcatenateStrings()

Dim StringOne as String
Dim StringTwo as String

StringOne = Range("A1").Value
StringTwo = Range("B1").Value 

Range("C1").Value = StringOne & StringTwo

End Sub

Using the & Operator with Spaces

When you want to include spaces you use & in conjunction with ” “. The following code shows you how you would include spaces:

Sub ConcatenatingStringsWithSpaces()

Dim StringOne As String
Dim StringTwo As String
Dim StringThree As String

StringOne = "This is"
StringTwo = "the text"
StringThree = StringOne & " " & StringTwo

MsgBox StringThree
End Sub

The MessageBox result is:

Concatenating Text in VBA with Spaces

Using the & Operator to Concatenate a Quotation Mark

Let’s say your text string contains a quotation mark, the following code shows you how to include a quotation mark within a text string:

Sub ConcatenatingAQuotationMark()

Dim StringOne As String
Dim StringTwo As String
Dim StringThree As String

StringOne = "This is the quotation mark"
StringTwo = """"
StringThree = StringOne & " " & StringTwo

MsgBox StringThree

End Sub

The result is:

Using the Concatenate Operator to Concatenate a Quotation Mark

Putting Strings on a New line

Let’s say you have five text strings, you can put each text string on a new line or paragraph, using either the vbNewLine, vbCrLf, vbCr or Chr Function. The following code shows you how to put each text string on a new line:

Sub PuttingEachTextStringOnANewLine()

Dim StringOne As String
Dim StringTwo As String
Dim StringThree As String
Dim StringFour As String
Dim StringFive As String


StringOne = "This is the first string"
StringTwo = "This is the second string"
StringThree = "This is the third string"
StringFour = "This is the fourth string"
StringFive = "This is the fifth string"

MsgBox StringOne & vbNewLine & StringTwo & vbCrLf & StringThree & vbCr & StringFour & Chr(13) & StringFive

End Sub

The result is:

Using vbNewLine to Put Text on its own line in VBA

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
vba save as

Learn More!

 

Kindness

Пользователь

Сообщений: 201
Регистрация: 01.01.1970

Подскажите, пожалуйста, как написать правильно формулу сцепить в VBA  

  Надо, чтобы колонтитул содержал значения нескольких ячеек удаленные друг от друга на определенное количество пробелов, например на 3  

  Worksheets(i).PageSetup.LeftHeader = Worksheets(1).Range(«A1″).Value+»   «+Worksheets(1).Range(«A2»).Value

 

Kindness

Пользователь

Сообщений: 201
Регистрация: 01.01.1970

Спасибо огромное.  

  Сам так пробовал, но не написал пробелы перед и после & — сломал голову что не так!  

  Век живи век учись!!!

 

слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

[a8] = Join(Array([a7], [b7], [c7]), «oo»)

 

Kindness

Пользователь

Сообщений: 201
Регистрация: 01.01.1970

Спасибо!  

  Возник еще один вопрос…  

  Можно ли сделать левый колонтитул в две строки, то есть чтобы значение ячейки А1 располагалось над значением ячейки В1 в колонтитуле?

 

Kindness

Пользователь

Сообщений: 201
Регистрация: 01.01.1970

Может даже можно вставить в колонтитул целую таблицу?

 

слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

.LeftHeader = «a1» & Chr(10) & «b1»

 

Kindness

Пользователь

Сообщений: 201
Регистрация: 01.01.1970

Спасибо, СЛЭН!  

  Большое спасибо!

 

Diana

Пользователь

Сообщений: 982
Регистрация: 28.12.2012

{quote}{login=слэн}{date=03.09.2009 03:12}{thema=}{post}[a8] = Join(Array([a7], [b7], [c7]), «oo»){/post}{/quote}

  Здрасьте еще раз…  
а вот если много ячеек нужно сцепить подряд, например:  
A1, B1, C1, D1 и т.д. до AA1. Возможно ли как-то через цикл применить такую вещь?  

  Спасибки всем заранее :)

 

Можно и без цикла :)  

  join(application.transpose(application.transpose([A1:AA1])))

  Еще тема  

http://www.planetaexcel.ru/forum.php/?thread_id=17920

 

Diana

Пользователь

Сообщений: 982
Регистрация: 28.12.2012

Казанский! Чмок тебя в щечку! :) спасибки снова!!! :)

 

слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

#11

10.11.2010 11:15:20

циклом:  

  for each x in range(..)  
s=s & x  
next  

  или    

  r=range(..)  
for each x in r  
..  

  это и побыстрее чем join будет

Живи и дай жить..

Home / VBA / VBA Concatenate

To concatenate two strings using a VBA code, you need to use the ampersand. You can use an ampersand in between two strings to combine them and then assign that new value to a cell, variable, or message box. In the same way, you can concatenate more than two values as well.

Further, we will see a simple example to understand it.

Steps to use VBA to Concatenate

  1. First, enter the first string using double quotation marks.
  2. After that, type an ampersand.
  3. Next, enter the second text using double quotation marks.
  4. In the end, assign that value to a cell, or variable, or use a message box to see it.
string using double quotation
Sub vba_concatenate()
Range("A1") = "Puneet " & "Gogia"
End Sub

You can also use a delimiter within two strings by simply adding a third ampersand. Consider the following code.

Range("A1") = "Puneet " & "-" & "Gogia"

In the above code, you have used a delimiter within two strings and joined them by simply using ampersands. So basically, whenever you need to join anything you have to use an ampersand within.

Concatenate using Variables

You can also store values in variables and then concatenate values from those two variables. Consider the following code.

concatenate using variables

In the above code, you have variables that are declared as variables and then you have assigned values to those variables. And in the end, we used an ampersand to combine all three variables and then assigned the result to cell A1.

Concatenate a Range using VBA

You can also concatenate values from a range of cells using a VBA. Consider the following macro.

Sub vba_concatenate()

Dim rng As Range
Dim i As String
Dim SourceRange As Range

Set SourceRange = Range("A1:A10")

For Each rng In SourceRange
i = i & rng & " "
Next rng
Range("B1").Value = Trim(i)

End Sub

In the above code, you have used the FOR NEXT (For Loops) to loop through the range that you want to concatenate.

So it goes to each cell of the range (A1:A10) stores that value in the I variable, and uses an ampersand to concatenate a value with each iteration. In the end, set the combined string to range B1.

And the following code concatenates the values from the selected range. All you need to do is to select a range and then run the code.

Dim rng As Range
Dim i As String

For Each rng In Selection
i = i & rng & " "
Next rng

Range("B1").Value = Trim(i)

Concatenate Entire Column or a Row

If you want to concatenate an entire column or a row, in that case, it’s better not to use the loop method. You can use the worksheet function “TextJoin” which can join an entire row or a column (consider the following code).

'join values from column A.
Dim myRange As Range
Dim myString As String
Range("B1") = WorksheetFunction.TextJoin(" ", True, Range("A:A"))

'join values from row 1.
Dim myRange As Range
Dim myString As String
Range("B1") = WorksheetFunction.TextJoin(" ", True, Range("1:1"))

VBA in Excel stands for Visual Basic for Applications which is Microsoft’s programming language. To optimize the performance and reduce the time in Excel we need Macros and VBA is the tool used in the backend. Concatenation means to join two or more data into a single data. There are various ways we can perform concatenation in Excel using built-in functions, operators, etc.

Some helpful links to get more insights about concatenate and using VBA in Excel :

  1. Record Macros in Excel
  2. CONCATENATE in Excel
  3. How to Create a Macro in Excel?

In this article, we are going to see about concatenate operators and how to use VBA to concatenate strings as well as numbers.

Implementation :

In the Microsoft Excel tabs, select the Developer Tab. Initially, the Developer Tab may not be available. 

The Developer Tab can be enabled easily by a two-step process :

  • Right-click on any of the existing tabs at the top of the Excel window.
  • Now select Customize the Ribbon from the pop-down menu.

  • In the Excel Options Box, check the box Developer to enable it and click on OK.

  • Now, the Developer Tab is visible.

Now, we need to open the Visual Basic Editor. There are two ways :

  • Go to Developer and directly click on the Visual Basic tab.
  • Go to the Insert tab and then click on the Command button. Drag and insert the command button in any cell of the Excel sheet.

Now, double-click on this command button. This will open the Visual Basic Application Editor tab, and we can write the code. The benefit of this command button is that just by clicking on the button we can see the result of concatenation, and also we don’t need to make any extra Macro in Excel to write the code.

Another way is by right-clicking on the command button and then select View Code as shown below :

CONCATENATE Operators:

To concatenate operator mostly used in Excel is “&” for numbers as well as strings. But for strings, we can also use “+” operator to concatenate two or more strings.

The syntax to concatenate using formula is :

cell_number1 & cell_number2 ; without space in between

cell_number1 & " " & cell_number2;  with space in between

cell_number1 & "Any_Symbol" & cell_number2 ; with any symbol in between

cell_number(s) & "string text" ; concatenate cell values and strings

"string_text" & cell_number(s) ; concatenate cell values and strings

CONCATENATE  Two Numbers:

Example 1: Take any two numbers as input and concatenate into a single number.

The code to concatenate two numbers in Excel is :

Private Sub CommandButton1_Click()
'Inserting the number num1 and num2 
Dim num1 As Integer: num1 = 10
Dim num2 As Integer: num2 = 50
'Declare a variable c to concatenate num1 and num2
Dim c As Integer
'Concatenate the numbers
c = num1 & num2
MsgBox ("The result after concatenating two numbers are: " & c)
End Sub

Run the above code in VBA and the output will be shown in the message box.

Output :

The result after concatenating two numbers are: 1050

You can also click on the command button and the same message will be displayed. 

Example 2: Say, now we take two numbers from the cells of the Excel Sheet and store the result back in the Excel sheet. This time we are not going to use the command button.

Step 1: Open the VB editor from the Developer Tab.

Developer  -> Visual Basic -> Tools -> Macros

Step 2: The editor is now ready where we can write the code and syntax for concatenation.

Now write the following code and run it.

Sub Concatenate_Numbers()
'Taking two variables to fetch the two numbers and to store
Dim num1 As Integer
Dim num2 As Integer
'Fetching the numbers from Excel cells num1 from A2 and num2 from B2
num1 = Range("A2").Value
num2 = Range("B2").Value
'Find the concatenate and store in cell number C2
Range("C2").Value = num1 & num2
End Sub

CONCATENATED

Concatenate Two Or more strings:

We can use either “+” operator or “&” operator.

Example 1: Let’s concatenate the strings “Geeks”, “for”, “Geeks”.

Repeat Step 1 as discussed in the previous section to create a new VBA module of name “Concatenate_Strings”

Now write either of the following codes and run it to concatenate two or more strings.

Sub Concatenate_Strings()
'Taking three variables to fetch three strings and to store
Dim str1 As String
Dim str2 As String
Dim str3 As String
'Fetching the strings from Excel cells
str1 = Range("A2").Value
str2 = Range("B2").Value
str3 = Range("C2").Value
'Find the concatenate and store in cell number D2
Range("D2").Value = str1 + str2 + str3
End Sub
Sub Concatenate_Strings()
'Taking three variables to fetch three strings and to store
Dim str1 As String
Dim str2 As String
Dim str3 As String
'Fetching the strings from Excel cells
str1 = Range("A2").Value
str2 = Range("B2").Value
str3 = Range("C2").Value
'Find the concatenate and store in cell number D2
Range("D2").Value = str1 & str2 & str3
End Sub

CONCATENATED

Example 2: Let’s concatenate three strings and add in different lines and display them in a message box this time.

Create a new module and write the code. The keyword used for adding the string in the next line is vbNewLine

The code is :

Sub Concatenate_DifferentLines()
'Taking three variables to store
Dim str1 As String
Dim str2 As String
Dim str3 As String
'Initialize the strings
str1 = "The best platform to learn any programming is"
str2 = "none other than GeeksforGeeks"
str3 = "Join today for best contents"
'Display the concatenated result in a message box
MsgBox (str1 & vbNewLine & str2 & vbNewLine & str3)
End Sub

Example 3: Let’s concatenate two strings with space in between by taking an example of the full name of a person which contains First Name and Last Name.

Create a new module Concatenate_Strings_Space and write the following code :

Sub Concatenate_Strings_Space()
'Taking two variables to fetch two strings and to store
Dim fname As String
Dim lname As String
'Fetching the strings from Excel cells
fname = Range("A2").Value
lname = Range("B2").Value
'Find the concatenate and store in cell number C2
Range("C2").Value = fname & " " & lname
End Sub

Хитрости »

5 Август 2013              151253 просмотров


Сцепить много ячеек с указанным разделителем

Часто бывает ситуация, когда необходимо из трех разных столбцов сцепить данные в одну строку с разделителем. Допустим в А1 Фамилия, в В1Имя, в С1Отчество, а надо получить все вместе Фамилия Имя Отчество. Как обычно в Excel объединяют значения нескольких ячеек в одну? Правильно, при помощи функции СЦЕПИТЬ или при помощи амперсанда:
=СЦЕПИТЬ(A1;» «;B1;» «;C1;» «)
=A1&» «&B1&» «&C1&» «
Это достаточно эффективно, если необходимо сцепить значения из трех-пяти ячеек. А если ячеек 50? Или того больше? Не очень удобно объединять их все описанными выше способами. А других встроенных функций в Excel для подобных операций не существует. С момента написания статьи Microsoft порадовал нас новыми функциями и теперь в составе функций есть функция ОБЪЕДИНИТЬ(TEXTJOIN), которая способна решить задачу без лишних телодвижений.
=ОБЪЕДИНИТЬ(«, «;ИСТИНА;A2:A100)
=TEXTJOIN(«, «,TRUE,A2:A100)

    Разделитель(«, «) — разделитель, с которым объединять текст из указанных ячеек
    Пропускать пустые(ИСТИНА) — указывает пропускать ли пустые ячейки. Т.е. если указано ИСТИНА или 1(а так же если аргумент вовсе не указан) — пустые ячейки будут пропускаться и не попадут в общую строку сцепки. Если указано ЛОЖЬ — сцепляться будут все ячейки, независимо от их содержимого. Например, если указать три ячейки A1:A3 в которых А2 пустая, то при указании ИСТИНА результат будет таким: «один, два». Если указать ЛОЖЬ, то пустая ячейка тоже попадет в сцепку: «один, , два».
    Так же этот аргумент удобен, если неизвестен заранее размер диапазона сцепления. Можно указать ячейки чуть с запасом(A1:A300) и тогда сцепляться будут только ячейки заполненного диапазона.
    Текст(A2:A100) — указывается непосредственно диапазон либо текст для сцепления. Этот аргумент расширяемый — т.е. можно указать не один диапазон, а несколько или просто текст: =ОБЪЕДИНИТЬ(«, «;ИСТИНА;A2:A100;B2:B70;»текст»)

Правда и здесь не все так радужно: эта функция доступна только пользователям версий 2019 и выше, а так же офиса 365.


Поэтому я написал функцию пользователя, которая сцепляет данные из указанных ячеек в одну строку и использовать её можно в любой версии офиса. Чем отличается от стандартной функции СЦЕПИТЬ()? Тем, что в качестве ячеек для сцепки указывается не каждая из ячеек по очереди, а сразу весь диапазон с возможностью указания разделителя между значениями каждой ячейки. Так же, в функции сразу заложен алгоритм пропуска пустых ячеек и возможность сцеплять исключительно уникальные значения — т.е. в результате будут сцепляться только те ячейки, значения которых ранее еще не были добавлены в сцепку.

Option Explicit
'---------------------------------------------------------------------------------------
' Procedure : СцепитьМного
'             http://www.excel-vba.ru
' Purpose   : Функция сцепляет все указанные ячейки в одну с указанным разделителем.
' Аргументы функции:
' Диапазон    — диапазон ячеек, значения которых необходимо объединить в строку.
' Разделитель — необязательный аргумент.
'               Один или несколько символов, которые будут вставлены между каждым словом.
'               По умолчанию пробел.
' БезПовторов — необязательный аргумент.
'               Если указан как ИСТИНА или 1 — в результирующей строке будут значения без дубликатов.
'               Для английской локализации данный параметр указывается как TRUE и FALSE соответственно.
'---------------------------------------------------------------------------------------
Function СцепитьМного(Диапазон As Range, Optional Разделитель As String = " ", Optional БезПовторов As Boolean = False)
    Dim avData, lr As Long, lc As Long, sRes As String
    Dim oDict As Object, sTmpStr
    Set oDict = CreateObject("Scripting.Dictionary")
    oDict.comparemode = 1
 
    avData = Диапазон.Value
    If Not IsArray(avData) Then
        СцепитьМного = avData
        Exit Function
    End If
 
    For lc = 1 To UBound(avData, 2)
        For lr = 1 To UBound(avData, 1)
            If Len(avData(lr, lc)) Then
                sRes = sRes & Разделитель & avData(lr, lc)
                If БезПовторов Then
                    If Not oDict.exists(avData(lr, lc)) Then
                        oDict.Add avData(lr, lc), 0&
                    End If
                End If
            End If
        Next lr
    Next lc
    If Len(sRes) Then
        sRes = Mid(sRes, Len(Разделитель) + 1)
    End If
 
    If БезПовторов Then
        sRes = ""
        sTmpStr = oDict.keys
        For lr = LBound(sTmpStr) To UBound(sTmpStr)
            sRes = sRes & IIf(sRes <> "", Разделитель, "") & sTmpStr(lr)
        Next lr
    End If
    СцепитьМного = sRes
End Function

Чтобы правильно использовать приведенный код, необходимо сначала ознакомиться со статьей Что такое функция пользователя(UDF)?. Вкратце: скопировать текст кода выше, перейти в редактор VBA(Alt+F11) -создать стандартный модуль(InsertModule) и в него вставить скопированный текст. После чего функцию можно будет вызвать из Диспетчера функций(Shift+F3), отыскав её в категории Определенные пользователем (User Defined Functions).

Синтаксис функции:
=СцепитьМного(A2:A100;», «;ИСТИНА)

Диапазон — диапазон ячеек, значения которых необходимо объединить в строку.
Разделитель — необязательный аргумент. Один или несколько символов, которые будут вставлены между каждым словом. По умолчанию пробел.
БезПовторов — необязательный аргумент. Если указан как ИСТИНА или 1 — в результирующей строке будут значения без дубликатов. Например, из значений Сидоров, Петров, Сидоров, Иванов в результат попадут только Сидоров, Петров, Иванов. Если ЛОЖЬ или 0 — будут выведены все значения. Для английской локализации данный параметр указывается как TRUE и FALSE соответственно.

Скачать пример

  СцепитьМного.xls (52,5 KiB, 11 996 скачиваний)


Если необходимо объединять значения ячеек из «рваных»(несмежных) диапазонов(выделенных через Ctrl), то код нужно немного изменить:

Option Explicit
'---------------------------------------------------------------------------------------
' Procedure : СцепитьМного
'             http://www.excel-vba.ru
' Purpose   : Функция сцепляет все указанные ячейки в одну с указанным разделителем. Допускается указание несмежных диапазонов
' Аргументы функции:
' Диапазон    — диапазон ячеек, значения которых необходимо объединить в строку.
' Разделитель — необязательный аргумент.
'               Один или несколько символов, которые будут вставлены между каждым словом.
'               По умолчанию пробел.
' БезПовторов — необязательный аргумент.
'               Если указан как ИСТИНА или 1 — в результирующей строке будут значения без дубликатов.
'               Для английской локализации данный параметр указывается как TRUE и FALSE соответственно.
'---------------------------------------------------------------------------------------
Function СцепитьМного(диапазон As Range, Optional разделитель As String = " ", Optional БезПовторов As Boolean = False)
    Dim avData, lr As Long, lc As Long, sRes As String
    Dim ra As Range
 
    For Each ra In диапазон.Areas
      avData = ra.Value
      If Not IsArray(avData) Then
          ReDim avData(1 To 1, 1 To 1)
          avData(1, 1) = ra.Value
      End If
 
      For lc = 1 To UBound(avData, 2)
          For lr = 1 To UBound(avData, 1)
              If Len(avData(lr, lc)) Then
                  sRes = sRes & разделитель & avData(lr, lc)
              End If
          Next lr
      Next lc
    Next
    If Len(sRes) Then
        sRes = Mid(sRes, Len(разделитель) + 1)
    End If
 
    If БезПовторов Then
        Dim oDict As Object, sTmpStr
        Set oDict = CreateObject("Scripting.Dictionary")
        sTmpStr = Split(sRes, разделитель)
        On Error Resume Next
        For lr = LBound(sTmpStr) To UBound(sTmpStr)
            oDict.Add sTmpStr(lr), sTmpStr(lr)
        Next lr
        sRes = ""
        sTmpStr = oDict.Keys
        For lr = LBound(sTmpStr) To UBound(sTmpStr)
            sRes = sRes & IIf(sRes <> "", разделитель, "") & sTmpStr(lr)
        Next lr
    End If
    СцепитьМного = sRes
End Function

Однако в таком случае слегка изменится и синтаксис — такие диапазоны обязательно надо будет записывать в скобках:
Синтаксис функции:
=СцепитьМного((A2:A100;F4:F60;Y2:Z43);», «;ИСТИНА)
Иначе функция просто не сработает и выдаст ошибку #ЗНАЧ!(#VALUE!)


И еще одна реализация — в ней допускается указывать не только отдельные диапазоны, но и вообще все что угодно(ячейки, отдельный текст, числа и т.п.). Единственная проблема — в этой функции иначе организован порядок аргументов: сначала указывается разделитель, а уже потом значения для сцепления. Более подробно эта функция рассмотрена в статье Что такое функция пользователя(UDF)?. Так же эта функция не убирает дубли, что впрочем, не так сложно добавить, ориентируясь на функции выше.

Function ОбъединитьВсеСРазделителем(Разделитель As String, ParamArray Значения()) As String
    Dim result As String, arg, x, rc As Range
    For Each arg In Значения
        Select Case TypeName(arg)
        Case "Range"                     'это диапазон
            'цикл по всем ячейкам
            For Each rc In arg.Cells
                If result = "" Then
                    result = rc.Value
                Else
                    result = result & Разделитель & rc.Value
                End If
            Next
        Case "Variant()"                 'это произвольный массив({"а";"б";"в"})
            'цикл по всем ячейкам
            For Each x In arg
                If result = "" Then
                    result = x
                Else
                    result = result & Разделитель & x
                End If
            Next
        Case Else 'это любой другой тип
            'суммируем
            If result = "" Then
                result = arg
            Else
                result = result & Разделитель & arg
            End If
        End Select
    Next
    ОбъединитьВсеСРазделителем = result
End Function

Также см.:
Сцепить_МН
Как сцепить несколько значений в одну ячейку по критерию? СцепитьЕсли
Что такое функция пользователя(UDF)?


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

This question comes from a comment under Range.Formula= in VBA throws a strange error.

I wrote that program by trial-and-error so I naturally tried + to concatenate strings.

But is & more correct than + for concatenating strings?

Teamothy's user avatar

Teamothy

1,9903 gold badges15 silver badges24 bronze badges

asked Nov 13, 2009 at 7:31

ilya n.'s user avatar

& is always evaluated in a string context, while + may not concatenate if one of the operands is no string:

"1" + "2" => "12"
"1" + 2   => 3
1 + "2"   => 3
"a" + 2   => type mismatch

This is simply a subtle source of potential bugs and therefore should be avoided. & always means «string concatenation», even if its arguments are non-strings:

"1" & "2" => "12"
"1" &  2  => "12"
 1  & "2" => "12"
 1  &  2  => "12"
"a" &  2  => "a2"

answered Nov 13, 2009 at 7:34

Joey's user avatar

JoeyJoey

341k85 gold badges687 silver badges681 bronze badges

2

The main (very interesting) difference for me is that:
"string" & Null -> "string"
while
"string" + Null -> Null

But that’s probably more useful in database apps like Access.

answered Jun 5, 2018 at 15:48

iDevlop's user avatar

iDevlopiDevlop

24.6k11 gold badges89 silver badges147 bronze badges

There is the concatenate function. For example

=CONCATENATE(E2,"-",F2)

But the & operator always concatenates strings. + often will work, but if there is a number in one of the cells, it won’t work as expected.

Community's user avatar

answered Nov 13, 2009 at 7:38

wallyk's user avatar

wallykwallyk

56.6k16 gold badges85 silver badges147 bronze badges

  • Excel VBA Concatenate

Excel VBA Concatenate

Конкатенация может быть определена как объединение или добавление двух строк или элементов данных, чтобы получить одну строку или элемент данных, называется конкатенацией. Проще говоря, если у нас есть список имен в одном столбце и фамилия в другом столбце с помощью операции конкатенации, мы можем объединить оба и поместить в одну ячейку за доли секунды. В Excel для достижения этой конкатенации у нас есть функция рабочего листа под названием Concat (). Но такого рода функция недоступна в VBA. Мы не можем использовать concatenate () в кодировании VBA, так как он не будет работать. Таким образом, в VBA нет функций, и они не могут получить доступ к функциям рабочего листа, тогда как мы будем объединять две или более строк в VBA.

Сначала мы увидим, как мы будем работать с функцией листа, затем мы увидим то же самое в VBA. Рассмотрим две строки в Excel, как показано на скриншоте ниже.

Теперь используйте функцию объединения, чтобы объединить обе строки.

Соблюдайте формулу, D4 и E4 — это адрес ячеек, которые мы хотим объединить. Как и выше, мы можем объединить несколько строк из разных ячеек.

Как использовать функцию конкатенации Excel VBA?

Мы научимся использовать VBA Concatenate с несколькими примерами в Excel.

Вы можете скачать этот шаблон Excel для конкатенации VBA здесь — Шаблон Excel для конкатенации VBA

Конкатенация VBA — Пример № 1

Поскольку у нас нет никаких встроенных функций в VBA, объединение в VBA может быть достигнуто с помощью оператора амперсанда (&).

Мы возьмем тот же пример, который мы уже использовали для функции рабочего листа. У нас есть «Я люблю» в ячейке D4 и «Индия» в ячейке E4. Теперь мы объединим эти две строки в VBA. Перейдите на вкладку редактора VBA.

Шаг 1: Перейдите на вкладку «Разработчик» и затем выберите вкладку «Visual Basic» с левой стороны. Затем он перейдет на экран ниже.

Шаг 2: Во-первых, нам нужно создать подпроцесс с любым именем, например, конкатенацией . Для запуска подпроцесса используйте ключевое слово Sub и имя процесса «concatenation».

Код:

 Sub Concatenate () End Sub 

Шаг 3: В подпроцессе нам нужно определить строки, такие как string1, string2 и full_string, используя ключевое слово dim.

Код:

 Sub Concatenate () Dim String1 как строка Dim String2 как строка Dim full_string как конец строки 

Шаг 4: Теперь нам нужно присвоить строку «I love» для string1 и «India» для string2, используя оператор присваивания «=», как показано ниже.

Код:

 Sub Concatenate () Dim String1 в виде строки Dim String2 в виде строки Dim full_string в виде строки String1 = "I Love" String2 = "India" End Sub 

Шаг 5: Теперь скомбинируйте string1 и string2 с помощью оператора амперсанда и присвойте эту комбинацию full_string, как показано ниже. Оставьте пробел между строковыми переменными и оператором амперсанда, чтобы избежать сообщения об ошибке.

Код:

 Sub Concatenate () Dim String1 As String Dim String2 As String Dim full_string As String String1 = "Я люблю" String2 = "Индия" full_string = String1 & String2 End Sub 

Шаг 6: Теперь объединение как string1, так и string2 сохраняется в full_string. Отобразите эту строку, используя окно сообщения, как показано ниже.

Код:

 Sub Concatenate () Dim String1 As String Dim String2 As String Dim full_string As String String1 = "Я люблю" String2 = "Индия" full_string = String1 & String2 MsgBox (full_string) End Sub 

Шаг 7: Теперь пришло время выполнить процесс. Нажмите на кнопку воспроизведения, которая отмечена красным цветом. Результат появится в окне сообщения, как показано ниже.

Шаг 8: В приведенном выше примере мы взяли две строки непосредственно в программе, и между первой строкой и второй строкой нет пробела. Как добавить пространство тогда? Очень просто при объединении, объединить пространство также.

Код:

 Sub Concatenate () Dim String1 как строка Dim String2 как строка Dim full_string как строка String1 = "Я люблю" String2 = "Индия" full_string = String1 & "" & String2 MsgBox (full_string) End Sub 

Шаг 9: Посмотрите на изображение выше, мы добавили пробел между строкой1 и строкой2 с помощью двойных кавычек. В случае, если мы хотим добавить ‘-‘, мы можем сделать это также.

Код:

 Sub Concatenate () Dim String1 как строка Dim String2 как строка Dim full_string как строка String1 = "Я люблю" String2 = "Индия" full_string = String1 & "-" & String2 MsgBox (full_string) End Sub 

Шаг 10: Результат будет таким, как показано ниже.

Конкатенация VBA — Пример №2

Шаг 1: Теперь мы возьмем данные из таблицы Excel и объединим, а затем отобразим результаты. Для этого присвойте данные в ячейках string1 и string2, как показано ниже.

Код:

 Sub Concatenate2 () Dim String1 As String Dim String2 As String Dim full_string As String String1 = Ячейки (4, 4). Значение String2 = Ячейки (4, 5). Значение MsgBox (full_string) End Sub 

Шаг 2: Посмотрите на изображение выше, мы присвоили значение в ячейках (4, 4) stirng1 и ячейках (4, 5) в string2. Как обычно, объедините обе строки с помощью оператора амперсанда.

Код:

 Sub Concatenate2 () Dim String1 As String Dim String2 As String Dim full_string As String String1 = Ячейки (4, 4) .Value String2 = Ячейки (4, 5). Значение full_string = String1 & "" & String2 MsgBox (full_string) End Sub 

Шаг 3: Из-за этого все данные в ячейках (4, 4) и ячейках (4, 5) будут объединены и сохранены в full_string. Теперь выполните процесс, нажав на символ воспроизведения.

Шаг 4: Данные взяты из Excel, показанного ниже.

Шаг 5: Если мы изменим данные в Excel и перезапустим, результаты программы изменятся согласно данным Excel. Вместо Индии я перешел на сладости, теперь мы побежим и проверим.

Шаг 6: Теперь результат появляется в окне сообщения. Вместо окна сообщения, если мы хотим в самом Excel, мы можем сделать это.

Код:

 Sub Concatenate2 () Dim String1 As String Dim String2 As String Dim full_string As String String1 = Ячейки (4, 4) .Value String2 = Ячейки (4, 5). Значения Ячейки (4, 7) .Value = String1 & String2 MsgBox ( full_string) End Sub 

Шаг 7: Назначьте объединение в ячейке адреса ячейки (4, 7) и удалите msgbox, так как нам больше не нужно окно сообщения. Нажмите кнопку воспроизведения и перейдите к своему превосходному результату и проверьте, получите ли результат в ячейке (4, 7) (строка 4 и столбец 7).

Шаг 8: Поскольку мы добавляем две строки, мы можем использовать символ «+» также, как показано ниже.

Код:

 Sub Concatenate2 () Dim String1 As String Dim String2 As String Dim full_string As String String1 = Ячейки (4, 4). Значение String2 = Ячейки (4, 5). Значения Ячейки (4, 7). Значение = Строка1 + Строка2 Конец Sub 

Шаг 9: Результат будет таким, как показано ниже. Там не будет никакой разницы.

Шаг 10: Но если мы будем использовать числа вместо строк для конкатенации с использованием символа «+», он будет выполнять конкатенацию только без сложения, поскольку мы взяли тип данных как строку, а не целое число.

Шаг 11: Результат будет таким, как показано ниже.

В случае, если мы принимаем тип данных как целое число, мы должны использовать оператор амперсанда только для конкатенации. Если мы используем «+», принимая целочисленный тип данных, он не будет объединяться, а будет выполнять сложение.

Конкатенация VBA — Пример № 3

Шаг 1: Если мы хотим объединить строку и число, мы также можем применить ту же технику. Для этого сохраните числовое значение в одной ячейке и строковое значение в другой ячейке и нажмите на опцию запуска.

Шаг 2: Результат не окажет влияния, это будет тот же строковый результат, что и ранее, с единственным изменением — число вместо строки.

То, что нужно запомнить

  • Объединение состоит в объединении строк из двух или более нескольких строк из разных ячеек. Чтобы выполнить это в Excel, у нас есть встроенная функция листа, которая является CONCAT.
  • Функция concat рабочей таблицы недоступна в VBA для объединения.
  • Конкатенация будет достигнута с помощью оператора амперсанд (&) и плюс (+). Если вы используете целочисленный тип данных, то символ «+» будет выполнять операцию сложения вместо конкатенации, поэтому убедитесь в этом.
  • Используйте пробел до и после символов & и +, иначе будет выдано сообщение об ошибке.
  • При определении строковых переменных не оставляйте пробелов в имени переменной. Если в имени строковой переменной есть пробел, он не будет допущен, поскольку выдаст сообщение об ошибке, как показано ниже

Рекомендуемые статьи

Это руководство по VBA Concatenate. Здесь мы обсудим, как использовать функцию конкатенации Excel VBA вместе с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи —

  1. VBA InStr объяснил с помощью примеров
  2. Целочисленный тип данных VBA
  3. Как выбрать ячейку, используя код VBA?
  4. Транспонировать диапазон в VBA

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Как сцепить числовые ячейки в excel
  • Как сфотографировать текст в word
  • Как сцепить числа число excel
  • Как сфотографировать таблицу в excel
  • Как сцепить числа в excel формула

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии