返回列表 上一主題 發帖

VBA如何把字串中的英文字前插入空格?

VBA如何把字串中的英文字前插入空格?

請問VBA要如何在同一儲存格中,在英文字的前面插入空格?
如下圖左邊處理前,右邊處理後。

擷取.JPG

回復 1# s13030029


    請前輩試試看

Option Explicit
Sub test()
Dim Arr, i, x, T, j$, c
Arr = Range([A1], [A65536].End(3))
For i = 1 To UBound(Arr)
   j = Trim(Arr(i, 1))
   c = Len(j)
   For x = c To 2 Step -1
      If UCase(Mid(j, x, 1)) Like "[A-Z]" Then
         j = Trim(Mid(j, 1, x - 1)) & " " & Mid(j, x, c * 2)
      End If
   Next
   Arr(i, 1) = j
Next
[B1].Resize(UBound(Arr), 1) = Arr
End Sub

TOP

回復 1# s13030029

請測試看看,謝謝

Sub test()
Dim Arr, i, x, T, j$, c
Arr = Range([A1], [A65536].End(3))
For i = 1 To UBound(Arr)
    j = Trim(Arr(i, 1))
    c = Len(j)
    For x = c To 2 Step -1
        T = UCase(Mid(j, x, 1))
        If Asc(T) > 64 And Asc(T) < 123 Then
            Arr(i, 1) = Replace(Arr(i, 1), T, " " & T)
        End If
   Next
Next
[B1].Resize(UBound(Arr), 1) = Arr
End Sub

TOP

本帖最後由 s13030029 於 2022-8-25 08:41 編輯

回復 2# Andy2483
因為我這個是要處理同一儲存格中的字串,而且還有換行,所以在Arr的地方會有出錯。
擷取.JPG

TOP

本帖最後由 s13030029 於 2022-8-25 08:41 編輯

回復 3# samwang
因為我這個是要處理同一儲存格中的字串,而且還有換行,所以在Arr的地方會有出錯。
擷取.JPG

TOP

本帖最後由 samwang 於 2022-8-25 09:38 編輯
回復  samwang
因為我這個是要處理同一儲存格中的字串,而且還有換行,所以在Arr的地方會有出錯。
s13030029 發表於 2022-8-25 08:38


Arr = Range([A1], [A65536].End(3)) 改成 Arr = [a1],for 循環移除,還有...,可以試著改看看,有問題再提出,謝謝

TOP

google"EXCEL迷"  blog  或google網址:https://hcm19522.blogspot.com/

TOP

回復 6# samwang
請問Arr要怎樣才能抓跨行的資料呢?
因為在這行就出錯了

TOP

回復 8# s13030029


    謝謝前輩發表此主題,請前輩再試試看
謝謝 samwang 前輩 指導
後學認識了 Asc與Chr 的關係,
後學對字典觀念薄弱 藉此習得把字元倒入字典中
請前輩再指導!

Option Explicit
Sub test4() '單列或多列都可以用
Dim Arr, i, x, j$, c, d, xD, T
Arr = Range([A1], [A65536].End(3).Offset(1, 0))
Set xD = CreateObject("Scripting.Dictionary")
For d = 65 To 122 '65~90是大寫 97~122是小寫
   xD(d) = Chr(d)
   If d = 90 Then d = 96
Next
T = Join(xD.items, "//")
For i = 1 To UBound(Arr) - 1
   j = Arr(i, 1)
   j = Replace(Replace(j, " ", ""), " ", "") '去除空白字元
   c = Len(j)
   For x = c To 2 Step -1
      If InStr(T, Mid(j, x, 1)) And Mid(j, x - 1, 1) <> vbLf Then
         j = Mid(j, 1, x - 1) & " " & Mid(j, x, c * 2)
      End If
   Next
   Arr(i, 1) = j
Next
[B1].Resize(UBound(Arr) - 1, 1) = Arr
Set Arr = Nothing
End Sub

TOP

回復 9# Andy2483
非常感謝~使用起來沒有問題!!!

TOP

        靜思自在 : 道德是提昇自我的明燈,不該是呵斥別人的鞭子。
返回列表 上一主題