Board logo

標題: 請教:VBA 如何判斷中英文? [打印本頁]

作者: storylai    時間: 2014-1-8 18:23     標題: 請教:VBA 如何判斷中英文?

本帖最後由 storylai 於 2014-1-8 18:25 編輯

我的情況:
1- 新接手的工作是整理來自不同系統不同來源的報表,
   各報表的「姓名」部份有中有英,
   但中文名字往往出現「張+空格+三豐」,
   如「張 三豐」出現了,要手動改!
   若看漏了進了 database 則更麻煩。

2- 問題是,我的報表中英文名都在同一欄中,
    英文名必須保留空格,
    中文名有半形一個、兩個或全形一個空格。
    情況如下例:
        Taylor Swift  
        張 惠妹
        Nicki Minaj   
      蔡依林‎
        蘇   芮
        Flo Rida
        曹 格
        周 杰倫‎
3- 這種情況還出現在其它如數字,如 12,345,洋系統就偏要出 12 345
   而中英文地址的空格則屬於輸入錯誤!

現時每天的新資料,我是用手動排序手動修改,
但過往的資料太多了,
因此,想請教大家,能否用 VBA 判斷中英文,然後再刪除空格。



謝謝大家。
作者: ML089    時間: 2014-1-8 22:14

如果用公式
=IF(LEFT(A1)<="z",A1,SUBSTITUTE(SUBSTITUTE(A1," ",)," ",))
下拉
作者: GBKEE    時間: 2014-1-9 08:59

回復 1# storylai
附檔說明看看
作者: storylai    時間: 2014-1-10 15:24

回復  storylai
附檔說明看看
GBKEE 發表於 2014-1-9 08:59


昨晚至今仍上傳不了。

昨晚做了小小程式,給大家一笑。
它基本能達到我的要求,下一步想用 Trim 先刪去名字的兩邊空格,
接著是刪字串中的「半形及全形空格」了。

由於工作內容涉及隱私,故自己弄了個相類的附件。

內容:   (空行、中文、英文、數字、其它 等欄是判別後做記錄,方便核對)

A            B        C        D          E        F
客名             空行        中文    英文    數字        其它


W                        *
x                        *
Y                        *
z                        *
丁守中                *       
田秋堇                *
呂玉玲                *
李鴻鈞                *
林國正                *
洪秀柱                *
陳怡潔                *
陳節如                *
張嘉郡                *
費鴻泰                *
楊瓊瓔                *
蔡煌瑯                *
        *
  1. Sub TestChinese()
  2.         LastRows = Range("A65536").End(xlUp).Row
  3.         For i = 2 To LastRows
  4.    
  5.             aString = Cells(i, 1)
  6.             
  7.             If aString = "" Then
  8.                Cells(i, 2) = "*"
  9.             Else
  10.                         aChar = Left(aString, 1)
  11.                                     If Asc(aChar) < 0 Then
  12.                                         Cells(i, 3) = "*"
  13.                                     ElseIf aChar Like "[A-Za-z]" Then
  14.                                         Cells(i, 4) = "*"
  15.                                     ElseIf aChar = 48 Or aChar <= 57 Then
  16.                                             Cells(i, 5) = "*"
  17.                                     Else
  18.                                               Cells(i, 6) = "*"
  19.                                     End If
  20.             End If
  21.         
  22.         Next i

  23. End Sub
複製代碼

作者: Hsieh    時間: 2014-1-10 16:33

回復 1# storylai
  1. Sub ex()
  2. Dim A As Range
  3. With 工作表1
  4. For Each A In .Range(.[A1], .[A1].End(xlDown))
  5. n = Asc(A)
  6.    If Asc(A) > 255 Or Asc(A) < 1 Then A = Replace(A, " ", ""): A = Replace(A, " ", "")
  7. Next
  8. End With
  9. End Sub
複製代碼





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