2017-01-11 16 views
2

日本の会社に勤めています。そのため、私に送られた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のプロトコルが存在しなければならないような気がします。私はちょうどこのような事になると悲惨な経験をしています(私は人生を楽にするマクロを巧みにするメカニカルエンジニアです。このような技術プログラミングの知識は残念です)

+0

これを行うにはMS Internet Explorerを起動する必要はありません。あなたは "VBA HTTPリクエスト"のためのGoogle、VBAで直接HTTPリクエストを行うことができます、あなたは多くの例を取得する必要があります。 –

+0

[this SO thread/answer](http://stackoverflow.com/a/16798887/4650297)はこのトリックを行いますか?ひらがな、カタカナ、漢字がすべて非ラテン文字であれば可能です。 – BruceWayne

+0

私はすでに、このコードをよりスムーズに実行しています。IsAlphaは同じことをしますが、IsLatin関数のようにオーバーフローエラーは生成しません。しかし、この問題は、いくつかのセルにlatinとnon latinの文字が混在していることがあります。「ジャガイモは10g/m2」のセルに入っている可能性があり、スキップされます。私は、文字列の各部分を見て、それが日本語かどうかを調べる機能を望んでいるはずです。 – awsmagala

答えて

0

このサブは、文字列にラテン文字が含まれているかどうかを判断するには、私がリンクしている答えから、

Sub t() 
Dim k  As Long 
Dim myString As String 
myString = Range("Z1").Value 'Edit this as needed 
Dim latinChars As Long 

latinChars = 0 
For k = 1 To Len(myString) 
    If IsLatin(Mid(myString, k, 1)) Then 
     ' Has latin characters 
     latinChars = latinChars + 1 
    End If 
Next k 

If latinChars = 0 Then 
    ' Doesn't have latin characters 
    Debug.Print "Doesn't have latin characters" 
Else 
    ' Has latin characters 
    Debug.Print "Has latin characters" 
End If 

End Sub 

Function IsLatin(Str As String) As Boolean 
IsLatin = True 
For i = 1 To Len(Str) 
IsLatin = IsLatin And Abs(AscW(Mid(Str, i, 1)) - 64) < 64 
Next i 
End Function 
+0

これは翻訳ミスが発生するのを避けるのに役立ちますが、完全ではありません。すべての可能なひらがな、カタカナ、および漢字の辞書を設定することができます(この辞書は2500要素のようになります)。その文字列の一部がその辞書に含まれているかどうかを確認できますか?私はこれらのことを救うつもりはありません。 – awsmagala

+0

は、内部にすべての機能を備えたExcelシートを設定して、Find機能などを使用していますか? – awsmagala

+0

セルのサンプルを投稿することはできますか?関数をキャッチしていないのは何ですか?ラテン語として読み込まれているひらがな、カタカナ、漢字ですか? ...そして、もしあなたが文字のリストを持っていれば、そのリストをループして、 'myString'の文字がその配列の文字と一致するかどうかを調べることができます。 – BruceWayne

関連する問題