اکسل یک تابع کتاب کار و یک عملگر را ارائه می دهد که هر دو هدف یکسانی دارند - ترکیب رشته ها در یک رشته طولانی تر. تابع CONCATENATE و عملگر علامت (&) اساساً هدف یکسانی دارند.
بسیاری از مردم از عملگر آمپرسند در ترجیح تابع CONCATENATE استفاده می کنند زیرا به تایپ کمتری نیاز دارد، اما CONCATENATE اگر بتواند طیف وسیعی از سلول ها را مدیریت کند بسیار ارزشمندتر می شود. متأسفانه اینطور نیست، اما شما می توانید تابع تعریف شده توسط کاربر خود را ایجاد کنید که هر سلول را در یک محدوده بسیار زیبا به هم متصل می کند. ماکرو زیر را در نظر بگیرید:
Function Concat1(myRange As Range, Optional myDelimiter As String)
Dim r As Range
For Each r In myRange
Concat1 = Concat1 & r & myDelimiter
Next r
If Len(myDelimiter) > 0 Then
Concat1 = Left(Concat1, Len(Concat1) - Len(myDelimiter))
End If
End Function
این تابع به یک محدوده نیاز دارد و یک جداکننده اختیاری را فراهم می کند. آخرین عبارت "If" جداکننده انتهایی نهایی را از رشته پیوسته حذف می کند. با عملکرد CONCAT1، سلولها را میتوان در محدوده اضافه و حذف کرد، بدون نیاز به تعمیر و نگهداری که توسط فرمولهای CONCATENATE یا آمپرساند نیاز است. تنها کاری که باید انجام دهید این است که تابع را به یکی از روش های زیر فراخوانی کنید:
=CONCAT1(C8:E10)
=CONCAT1(C8:E10,"|")
روش دوم فراخوانی تابع از جداکننده اختیاری استفاده می کند که بین هر یک از مقادیر پیوسته از محدوده C8:E10 درج می شود. با این حال، یک مشکل در این مورد وجود دارد: اگر یک سلول در آن محدوده خالی باشد، می توانید با دو جداکننده متوالی مواجه شوید. اگر ترجیح می دهید تنها یک جداکننده داشته باشید، باید یک تغییر کوچک در تابع ایجاد کنید:
Function Concat2(myRange As Range, Optional myDelimiter As String)
Dim r As Range
For Each r In myRange
If Len(r.Text) > 0 Then
Concat2 = Concat2 & r & myDelimiter
End If
Next r
If Len(myDelimiter) > 0 Then
Concat2 = Left(Concat2, Len(Concat2) - Len(myDelimiter))
End If
End Function