返回列表 上一主題 發帖

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

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

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

擷取.JPG
2022-8-24 09:03

回復 2# Andy2483


    修正自己的認知
j = Trim(Mid(j, 1, x - 1)) & " " & Mid(j, x, c * 2) 改為
j = Trim(Mid(j, 1, x - 1)) & " " & Mid(j, x)即可
當初學習時還在考慮 length 要用多少??  

https://learn.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/mid-function
Mid(string, start, [ length ])
string        必要。 字串運算式的功能是會從中傳回字元。 如果 字串 包含 Null,則傳回 Null。
start        必要;Long。 string 中要擷取做為開始部分的字元位置。 如果 start 中的字元數大於 string,則 Mid 會傳回零長度字串 ("")。
length        選用;Variant (Long)。 要傳回的字元數。 如果省略此參數,或是字元數少於文字中的 length 字元 (包含 start 所在的字元),就會傳回從 start 位置開始一直到字串結尾的所有字元。
看得懂是應該的,懂得應用才像學生,臉皮厚點學會更謹慎積極

TOP

回復 12# 准提部林
    謝謝 前輩指導

TOP

回復 2# Andy2483


If Mid(j, x, 1) Like "[A-z]" Then  大小通吃~~

TOP

回復  samwang
請問Arr要怎樣才能抓跨行的資料呢?
因為在這行就出錯了
s13030029 發表於 2022-8-25 10:29


請再測試看看,謝謝
Sub test()
Dim Arr, a, T, i&, x, j%
Arr = Range([A1], [A65536].End(3).Offset(1, 0))
For i = 1 To UBound(Arr) - 1
    a = Split(Trim(Arr(i, 1)), Chr(10))
    For x = 0 To UBound(a)
        For j = 2 To Len(a(x))
            T = UCase(Mid(a(x), j))
            If Asc(T) > 64 And Asc(T) < 123 Then
                If Cells(i, 2) = "" Then
                    Cells(i, 2) = Replace(a(x), T, " " & T)
                Else
                    Cells(i, 2) = Cells(i, 2) & Chr(10) & Replace(a(x), T, " " & T)
                End If
            End If
        Next
    Next
Next
End Sub

TOP

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

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

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

TOP

隨意窩 "EXCEL迷"  blog  或https://blog.xuite.net/hcm19522/twblog
已收集8500篇 EXCEL函數

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

        靜思自在 : 待人退一步,愛人寬一寸,就會活得很快樂。
返回列表 上一主題