Board logo

標題: 只取出字串中的中文字元 [打印本頁]

作者: mhl9mhl9    時間: 2013-8-4 04:13     標題: 只取出字串中的中文字元

字串中可能包含 中文 英文 標點 空格,能不能只取出其中的中文,如"3D. 偉大(中文版)">>>>>"偉大中文版"
請教各位前輩.
作者: ML089    時間: 2013-8-6 21:59

A1="3D. 偉大(中文版)"
B1=IF(LENB(MID($A1,COLUMN()-1,1))=2,MID($A1,COLUMN()-1,1),"")&C1
B1公式右拉複製(右拉格數為字串最大長度)
作者: mhl9mhl9    時間: 2013-8-7 12:03

多謝指教,右拉取得結果,以前沒試過,我用vb右拉20格,這20格是隱藏的,所以B欄取得我要的結果,十分感激你
作者: ML089    時間: 2013-8-7 12:31

處理文字沒有陣列組合函數,所以利用右拉多格公式來合併處理
若你用VBA就不用那麼辛苦
作者: mhl9mhl9    時間: 2013-8-7 13:27

再請教vb里lenb如何用?
vb里 lenb(3)出錯,lenb("3")=2,何解?
作者: mhl9mhl9    時間: 2013-8-7 13:38

問題解決了
Function ZW(A)
For i = 1 To Len(A)
If LenB(StrConv(Mid(A, i, 1), &H80)) = 2 Then
    zw2 = zw2 & Mid(A, i, 1)
End If
Next i
ZW = zw2
End Function
還是要謝謝你
作者: ML089    時間: 2013-8-9 10:37

Function ZW(A)
For i = 1 To Len(A)
If LenB(StrConv(Mid(A, i, 1), &H80)) = 2 Then
    zw2 = zw2 & Mid(A, i, 1)
End If
Next i
ZW = zw2
End Function

拿掉 StrConv 函數如下,執行就不對,WHY?

Function ZW1(A)
ZW = ""
For i = 1 To Len(A)
If LenB(Mid(A, i, 1)) = 2 Then
    ZW = ZW & Mid(A, i, 1)
End If
Next i
End Function
作者: mhl9mhl9    時間: 2013-8-10 00:49

本帖最後由 mhl9mhl9 於 2013-8-10 00:50 編輯

我是看到以下兩段知道vba里lenb和excel的lenb不同
VBA中:LenB 返回的是用于代表字符串的字节数,而不是返回字符串中字符的数量。
而在工作表,结果似乎表明汉字当双字节而字母和数字当单字节处理的。

Function LenMbcs(ByVal str As String)
    LenMbcs = LenB(StrConv(str, vbFromUnicode))
End Function
Sub yyy()
a = LenMbcs("劉abc")
End Sub
a=5------(2+3)
作者: ML089    時間: 2013-8-10 19:30

可參考 http://forum.twbts.com/viewthrea ... a=pageD2&page=1
作者: sunnyso    時間: 2013-8-11 20:50

用 “正規表示式”

Function CountDblChr(ByVal sCh As String) As Integer

    Set re = CreateObject("vbscript.regexp")

    're.Pattern = "[\u4e00-\u9fa5]" '判斷中文字(包括特殊字,但不包括符號。和數字如1)

    re.Pattern = "[^\x00-\xff]" '判斷所有的全形字

    re.Global = True

    re.IgnoreCase = True

    Set matches = re.Execute(sCh)

    CountDblChr = matches.Count

    Set re = Nothing

End Function
作者: mhl9mhl9    時間: 2013-8-16 14:37

回復 10# sunnyso


    雖然看了不十分明,但用還是很好用,謝謝




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)