- ベストアンサー
海外向けに日本語フォントを除去したエクセルファイルの作成方法
海外向けに作成したエクセルファイルを送信する機会があるのですが、ファイル中に日本語フォントが含まれていると、相手先では読めないとのことです。 そこで、ファイル中に日本語フォントが含まれていない事を確認したいのです。 どこかに1箇所でも全角スペース等でも入っていると読めないとのことですので、作成にはとても神経を使っています。 今は、AdobeReaderの英語版をインストールしたPCで、ファイルをフォントを埋め込まない形でPDF化した後、英語版で開きます。 もしも、含まれていると、「日本語フォントはサポートしない…」というようなメッセージが出ることで確認しています。 他に方法はないのでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 遅くなりました。どうやら、元のコードは見落としがあったようです。 時間が経ちすぎて、細かい部分の雰囲気が分かれてしまっているようですが、ともかく、コードは通るようにしました。(なお、これは、コントロールツールの中は、チェックはされておりません) '標準モジュール Sub TestFind2ByteR() '修正版07.07.07 ver.1 Dim Re As Object Dim ws As Object Dim c As Range Dim shp As Object Dim i As Long Dim objShp As Object Set Re = CreateObject("VBScript.RegExp") Re.Pattern = ".*[^" & Chr(9) & "-~].*" Re.Global = True Re.IgnoreCase = False If MsgBox("Check 2byte Characters in " & vbCrLf & _ ActiveWorkbook.Name & vbCrLf & _ "OK(Left)/Execute : Right_Button/Cancel ", _ vbOKCancel, _ "2Byte Characters Checking") = vbCancel Then Exit Sub End If With ActiveWorkbook For Each ws In .Worksheets For Each c In ws.UsedRange.Cells If Re.Test(c.Value) Then c.Interior.ColorIndex = 3 End If If Re.Test(c.Formula) Then c.Interior.ColorIndex = 3 i = i + 1 End If Next c For Each shp In ws.Shapes If shp.Type = msoTextBox Then If Re.Test(shp.DrawingObject.Text) Then shp.DrawingObject.Font.ColorIndex = 3 i = i + 1 End If ElseIf shp.Type = msoChart Then With shp.DrawingObject.Chart If Re.Test(.ChartTitle.Caption) Then .ChartTitle.Font.ColorIndex = 3 i = i + 1 End If End With Else On Error Resume Next If Re.Test(shp.DrawingObject.Text) Then If Err.Number = 0 Then shp.DrawingObject.Characters.Font.ColorIndex = 3 i = i + 1 End If End If On Error GoTo 0 End If Next shp Next ws End With MsgBox CStr(i) & " word(s)/itme(s) of Two Byte Character was/were found in ActiveBook """ Set Re = Nothing End Sub
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
文章訂正: # 時間が経ちすぎて、細かい部分の雰囲気が分かれてしまっているようですが、 ○時間が経ちすぎて、細かい部分の雰囲気が分からなくなってしまっているようですが、 (私は、本格的にどうするつもりだったのか、思い出せません。すみません。)付け足したい部分があったら、いくつかリクエストをしていただけませんか?後、もしものことを考えて、Office のアドインで、「隠しデータ削除」を使うと、思わぬところに入っている文字を削除できます。それ自体は、2バイト文字は関係がありません。 なお、時間経過が経ちましたので、細かい内容は、補足でもよいのですが、「お礼」側に通信文を入れていただければ、こちらにはメールとして送信されます。よろしくお願いします。
- Wendy02
- ベストアンサー率57% (3570/6232)
#2 です。 こんにちは。 >テキストボックスがあるとエラーになってしまうようですので 「本格的なものが必要な場合は、もう少し時間が必要です。」 と書いたけれども、そちらが必要なのですね。少し、時間が経ちましたが、以前、私が同様のものを作っておりますから、お待ちください。 ただ、かなり長いコードになってしまいます。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >ファイル中に日本語フォントが含まれていると、相手先では読めないとのことです。 文字化けを嫌っているということではないでしょうか? 文字化けはしても、読めないというレベルの問題ではないと思います。 一応、言語設定で、英語版(ANSIモード)には換えられますが、中身までは不可能だと思います。日本語版仕様は、日本語(JIS-2バイト文字)が入り込んでしまうと思います。もともと、Excelのワークシート自体は、Unicode 仕様ではないので、2バイト文字が特殊になってしまいます。 言語設定で変更するか、会社でしたら、Language Pack で、英語(ANSI用)に切り替えてみたらいかがですか? 以前、似たような経験があるのですが、以下はその簡易版です。 2バイト文字(厳密に言うと、制御コード[タブコード以上]を含む、ANSI以外の文字だから、半角カタカナ等も含まれます)を赤くするマクロを作ってみました。赤くなったものは、必ず制御コードを含むANSI以外の文字が入っています。今は、あまり集中力がありませんので、本格的なものを作っていません。グラフは埋め込み型のみにしか対応していません。 数式の中まで調べていますので、仮に表面的には出てこなくても、赤く変更されます。 これで、しばらく試してみていただけないでしょうか? なお、日本語のファイルに実行すると、真っ赤に塗りつぶされますから、ご注意ください。実行前に、確認を求めるようにしました。(違うファイルで、失敗したからです(^^;)..一応つたない英語にしました。 本格的なものが必要な場合は、もう少し時間が必要です。 '標準モジュール Sub TestFind2Byte() Dim Re As Object Dim ws As Object Dim c As Range Dim shp As Object Dim i As Long Dim objShp As Object Set Re = CreateObject("VBScript.RegExp") Re.Pattern = ".*[^" & Chr(9) & "-~].*" Re.Global = True Re.IgnoreCase = False If MsgBox("Check 2byte Characters in " & vbCrLf & _ ActiveWorkbook.Name & vbCrLf & _ "OK(Left)/Execute : Right_Button/Cancel ", _ vbOKCancel, _ "2Byte Characters Checking") = vbCancel Then Exit Sub End If With ActiveWorkbook For Each ws In .Worksheets For Each c In ws.UsedRange.Cells If Re.Test(c.Value) Then c.Interior.ColorIndex = 3 i = i + 1 End If If Re.Test(c.Formula) Then c.Interior.ColorIndex = 3 i = i + 1 End If Next c For Each shp In ws.Shapes If shp.Type = msoTextBox Then If Re.Test(shp.DrawingObject.Text) Then shp.DrawingObject.Font.ColorIndex = 3 i = i + 1 End If ElseIf shp.Type = msoChart Then With shp.DrawingObject.Chart If Re.Test(.ChartTitle.Caption) Then .ChartTitle.Font.ColorIndex = 3 i = i + 1 End If End With Else If Re.Test(shp.DrawingObject.Text) Then shp.DrawingObject.Characters.Font.ColorIndex = 3 i = i + 1 End If End If Next shp Next ws End With MsgBox CStr(i) & " word(s)/itme(s) of Two Byte Character was/were found in ActiveBook" Set Re = Nothing End Sub
お礼
返事が大変遅くなり申し訳ございません。 私にはマクロの設定自体が敷居が高かったため遅くなってしまったことをお詫びいたします。 使ってみましたが、無事に1バイト文字を確認することが出来ました。 ありがとうございました。 テキストボックスがあるとエラーになってしまうようですので、そちらも検出出来るようになると嬉しいです。
シート全体(全セル)をアクティブにして、[データ]→[入力規則]→[日本語入力]で“無効”に設定したら如何かと。
お礼
回答ありがとうございます。 ファイルの作成の仕方として、 ・別のデーターからコピーして貼り付ける。 ・テキストBOX内に文字を入れる ・グラフを貼り付ける 等もしますので、mike_gさんの方法だと難しいのです。 ファイル作成時というよりは、やはり完成した後で確認する方法を知りたいのです。
お礼
Wendy02さん 先日より早速使わせていただいております。 おかげで業務効率が飛躍的に向上致しました。 (今まで1ファイル10分くらい掛かっていたのが1秒で済みます) 先日のバージョンでもエラーが出るものの使用することが出来ていたのですが、今回修正していたバージョンではテキストボックス内の文字も検索が掛かっていました。 本当に感謝しております。どうもありがとうございました。