日本の会社に勤めています。そのため、私に送られたExcelテーブルの大部分は、ほとんどが日本語です。だから私は翻訳したい細胞の範囲を選択するようにユーザーに促すExcelマクロを作成しました。マクロは、セルの値を取得してGoogle翻訳テキストボックスにコピーし、翻訳を待ってから翻訳をコピーし、セルの値を翻訳に設定します。文字列(またはセル)に漢字が含まれているかどうかを確認するにはどうすればいいですか?
これですべてが機能しており、私はそれを投げる範囲をすべて翻訳できます。私が抱えている問題は、ドキュメントを翻訳するのにかかる時間です。私はgoogleへの接続をスピードアップすることができるすべてをやりました。次にマクロが減速するのは、セルに日本語(ひらがな、カタカナ、漢字)が含まれているかどうかを判断する簡単な方法が見つからないということです。だから私は基本的にこれを行う機能を探しています:
Function isJapanese(cell as Range)
If cell.Value is Japanese Then
isJapanese = True
Else
isJapanese = False
End If
End Function
文字列がラテン文字か(それはいくつかのセルをスキップ作っている)、特定の記号、および他の文字または文字列が含まれている場合、私はすでにチェックしています私はそれが英語の細胞だけにユニークであると考えることができます。
以下することは、これまで私が持っているコードです(私は翻訳機能のための変数を取得するために、ユーザーフォームを使用しています)
Function Translate_Range(rng As String, in_exp As String, out_exp As String) As Boolean
Dim japCheck As Boolean, japCount As Integer, cellAddress As String, transText As String, langDesired As String, wkb As String, sht As String, searchRange As Range, doneCheck As Boolean
doneCheck = False
wkb = ActiveWorkbook.Name
sht = ActiveSheet.Name
Workbooks(wkb).Worksheets(sht).Activate
japCount = 0
japCheck = True
Set searchRange = Range(rng)
For Each cell In searchRange
If cell.Value <> "" And InStr(cell.Text, "mm") = 0 And InStr(cell.Text, "±") = 0 Then
japCheck = IsAlpha(cell.Text)
If japCheck = True Then
GoTo NextIteration
Else
transText = translate_string(cell.Address, in_exp, out_exp)
ActiveSheet.Range(cell.Address).Value = transText
End If
End If
NextIteration:
Next
doneCheck = True
Translate_Range = doneCheck
End Function
Private Function translate_string(cell As String, input_exp As String, output_exp As String)
Dim str As String
str = ActiveSheet.Range(cell).Value
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = False
IE.navigate "http://translate.google.com/#" & input_exp & "/" & output_exp & "/" & str
Do Until IE.readyState = 4
DoEvents
Loop
Do Until result_data <> ""
CLEAN_DATA = Split(Application.WorksheetFunction.Substitute(IE.Document.getElementById("result_box").innerHTML, "</SPAN>", ""), "<")
For i = LBound(CLEAN_DATA) To UBound(CLEAN_DATA)
result_data = result_data & Right(CLEAN_DATA(i), Len(CLEAN_DATA(i)) - InStr(CLEAN_DATA(i), ">"))
Next
Loop
IE.Quit
translate_string = result_data
End Function
Private Function IsAlpha(strValue As String) As Boolean
IsAlpha = strValue Like WorksheetFunction.Rept("[a-zA-Z]", Len(strValue))
End Function
漢字のUnicodeのプロトコルが存在しなければならないような気がします。私はちょうどこのような事になると悲惨な経験をしています(私は人生を楽にするマクロを巧みにするメカニカルエンジニアです。このような技術プログラミングの知識は残念です)
これを行うにはMS Internet Explorerを起動する必要はありません。あなたは "VBA HTTPリクエスト"のためのGoogle、VBAで直接HTTPリクエストを行うことができます、あなたは多くの例を取得する必要があります。 –
[this SO thread/answer](http://stackoverflow.com/a/16798887/4650297)はこのトリックを行いますか?ひらがな、カタカナ、漢字がすべて非ラテン文字であれば可能です。 – BruceWayne
私はすでに、このコードをよりスムーズに実行しています。IsAlphaは同じことをしますが、IsLatin関数のようにオーバーフローエラーは生成しません。しかし、この問題は、いくつかのセルにlatinとnon latinの文字が混在していることがあります。「ジャガイモは10g/m2」のセルに入っている可能性があり、スキップされます。私は、文字列の各部分を見て、それが日本語かどうかを調べる機能を望んでいるはずです。 – awsmagala