|
在翻译当中经常要整理句库,这就涉及到如何分离中英文。在搜索完本论坛解决方案后,还是没有发现好的VBA解决方案。请高手帮忙解决。
示例:A1=1. Good to the last drop. 滴滴香浓,意犹未尽。(麦斯威尔咖啡)
分离结果:B1=Good to the last drop. C1=滴滴香浓,意犹未尽。(麦斯威尔咖啡)
具体内容参考附件。
首先谢谢大家!如果你有好的解决方案不妨直接与我联系,我的联系方式是:
QQ=1310088
vfdat@126.com
谢谢大家,尤其alzeng,收藏了。但我基础较差,不明白如何实现的,只好慢慢琢磨。
照我的看法,是按" ",就是原文和翻译之间的空格分离,但只要改变这个空格大小,就失效了。不对之处,请大家指教。
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,他在后面提供的下面这段代码好极了,很完美地实现了我的要求,供大家参考。
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
根据最新的增补和修改,一个比较通用的代码如下,根据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,发现中文在前会少取最后一个中文。
j = 0
Do While IsNumeric(Left(str, j + 1))
j = j + 1
Loop
'找数字所占位数J
rng.Offset(, 2) = Trim(Right(stg, Len(stg) - i))
rng.Offset(, 1) = Trim(Right(str, Len(str) - j))
Next
End Sub
结果请参考分离完整版.rar
2009.07.24
[ 本帖最后由 vfd 于 2009-7-24 08:58 编辑 ] |
-
错误图片
-
-
分离.rar
2.71 KB, 下载次数: 59
如何用VBA分离如下中英文
-
-
分离完整版.rar
12.18 KB, 下载次数: 49
分离完整版.rar
|