اسکات تعجب می کند که چگونه می تواند اکسل را به طور خودکار یک خط تیره بین هر حرف در یک سلول خاص اضافه کند. به عنوان مثال، اگر سلول A1 حاوی "خانه" باشد، اسکات مایل است آن را به "خانه" تبدیل کند.
این را می توان با یک فرمول انجام داد، اما به سرعت غیرقابل تحمل می شود. به عنوان مثال، از فرمول زیر می توان برای قرار دادن خط تیره بین حروف هر چیزی که در سلول A1 تایپ می کنید استفاده کرد:
=CHOOSE(LEN(A1),A1,LEFT(A1,1) & "-" & RIGHT(A1,1),
LEFT(A1,1) & "-" & MID(A1,2,1) & "-" & RIGHT(A1,1),
LEFT(A1,1) & "-" & MID(A1,2,1) & "-" & MID(A1,3,1) & "-"
& RIGHT(A1,1),LEFT(A1,1) & "-" & MID(A1,2,1) & "-"
& MID(A1,3,1) & "-" & MID(A1,4,1) & "-" & RIGHT(A1,1),
LEFT(A1,1) & "-" & MID(A1,2,1) & "-" & MID(A1,3,1)
& "-" & MID(A1,4,1) & "-" & MID(A1,5,1) & "-" & RIGHT(A1,1))
این مثال خاص از یک فرمول فقط روی متنی با طول حداکثر شش کاراکتر کار می کند. بنابراین، برای "خانه" به درستی کار می کند، اما برای "خانوار" نه. این فرمول می تواند طولانی شود، اما، دوباره، به سرعت بسیار طولانی می شود.
یک رویکرد بهتر استفاده از ماکرو برای انجام تبدیل است. اگر می خواهید خط تیره ها را مستقیماً در سلول وارد کنید، می توانید از یک ماکرو مانند زیر استفاده کنید:
Sub AddDashes1()
Dim Cell As Range
Dim sTemp As String
Dim C As Integer
For Each Cell In Selection
sTemp = ""
For C = 1 To Len(Cell)
sTemp = sTemp & Mid(Cell, C, 1) & "-"
Next
Cell.Value = Left(sTemp, Len(sTemp) - 1)
Next
End Sub
این ماکرو برای استفاده در محدوده انتخابی از سلول ها طراحی شده است. فقط سلول هایی را که می خواهید تبدیل کنید انتخاب کنید و سپس ماکرو را اجرا کنید. خط تیره ها بین هر حرف در سلول ها اضافه می شوند.
اگر ترجیح می دهید مقادیر سلول اصلی را تغییر ندهید، می توانید یک تابع تعریف شده توسط کاربر ایجاد کنید که این کار را انجام دهد:
Function AddDashes2(Src As String) As String
Dim sTemp As String
Dim C As Integer
Application.Volatile
sTemp = ""
For C = 1 To Len(Src)
sTemp = sTemp & Mid(Src, C, 1) & "-"
Next
AddDashes2 = Left(sTemp, Len(sTemp) - 1)
End Function
برای استفاده از این تابع، از موارد زیر در کاربرگ خود استفاده کنید:
=AddDashes2(A1)
اگر میخواهید مطمئن شوید که عملکرد کمی قویتر است، میتوانید آن را طوری تغییر دهید که چندین کلمه را مدیریت کند. در چنین مثالی نمیخواهید که یک فاصله را بهعنوان یک «حرف قابل خطشکن» در نظر بگیرد. به عنوان مثال، شما می خواهید روتین به "یک دو" خط تیره اضافه کند تا به جای "یک - دو" به صورت "یک دو" ظاهر شود. تغییر زیر در تابع این کار را انجام می دهد:
Function AddDashes3(Src As String) As String
Dim sTemp As String
Dim C As Integer
Application.Volatile
sTemp = ""
For C = 1 To Len(Src)
sTemp = sTemp & Mid(Src, C, 1)
If Mid(Src, C, 1) <> " " And
Mid(Src, C + 1, 1) <> " " And
C < Len(Src) Then
sTemp = sTemp & "-"
End If
Next
AddDashes3 = sTemp
End Function