在翻譯當(dāng)中經(jīng)常要整理句庫,這就涉及到如何分離中英文。在搜索完本論壇解決方案后,還是沒有發(fā)現(xiàn)好的VBA解決方案。請高手幫忙解決。
示例:A1=1. Good to the last drop. 滴滴香濃,意猶未盡。(麥斯威爾咖啡) 分離結(jié)果:B1=Good to the last drop. C1=滴滴香濃,意猶未盡。(麥斯威爾咖啡)
具體內(nèi)容參考附件。
首先謝謝大家!如果你有好的解決方案不妨直接與我聯(lián)系,我的聯(lián)系方式是: QQ=1310088 vfdat@126.com
謝謝大家,尤其alzeng,收藏了。但我基礎(chǔ)較差,不明白如何實現(xiàn)的,只好慢慢琢磨。
照我的看法,是按" ",就是原文和翻譯之間的空格分離,但只要改變這個空格大小,就失效了。不對之處,請大家指教。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim rng As Range, str$, i%
For Each rng In Range("A1", [A65536].End(3)) str = Split(rng, " ")(0) i = 0 Do While IsNumeric(Left(str, i + 1)) i = i + 1 Loop
rng.Offset(, 1) = LTrim(Right(str, Len(str) - i)) rng.Offset(, 2) = LTrim(Split(rng, " ")(1)) Next
End Sub
再次謝謝alzeng,他在后面提供的下面這段代碼好極了,很完美地實現(xiàn)了我的要求,供大家參考。
Sub splt() Dim rng As Range, stg$, str$, i%, j%
For Each rng In Range("A1", [A65536].End(3)) stg = rng i = 1 Do Until Mid(stg, i, 1) Like "*[一-龥]*" i = i + 1 Loop str = Left(stg, i - 1) j = 0 Do While IsNumeric(Left(str, j + 1)) j = j + 1 Loop
rng.Offset(, 1) = Trim(Right(str, Len(str) - j)) rng.Offset(, 2) = Trim(Right(stg, Len(stg) - i)) Next End Sub
根據(jù)最新的增補(bǔ)和修改,一個比較通用的代碼如下,根據(jù)alzeng提供的代碼,我斗膽做了注釋,不對之處,還請alzeng指正。再次謝謝alzeng和其他付出勞動的高手。 代碼如下: Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rng As Range, stg$, str$, i%, j%, k%
For Each rng In Range("A1", [A65536].End(3)) stg = rng
k = 1 Do Until Mid(stg, k + 1, 1) Like "*[a-z,A-Z]*" k = k + 1 Loop '找英文的位置K i = 1 Do Until Mid(stg, i + 1, 1) Like "*[一-龥]*" i = i + 1 Loop '找中文的位置I If i < k Then i = k '如果中文在前,兩者的位置一樣 str = VBA.Left(stg, i) '中英文分離位置前一位字符(i - 1),修改為直接取I,發(fā)現(xiàn)中文在前會少取最后一個中文。 j = 0 Do While IsNumeric(Left(str, j + 1)) j = j + 1 Loop '找數(shù)字所占位數(shù)J rng.Offset(, 2) = Trim(Right(stg, Len(stg) - i)) rng.Offset(, 1) = Trim(Right(str, Len(str) - j)) Next
End Sub
結(jié)果請參考分離完整版.rar 2009.07.24
[ 本帖最后由 vfd 于 2009-7-24 08:58 編輯 ] |
|