• ベストアンサー

海外向けに日本語フォントを除去したエクセルファイルの作成方法

海外向けに作成したエクセルファイルを送信する機会があるのですが、ファイル中に日本語フォントが含まれていると、相手先では読めないとのことです。 そこで、ファイル中に日本語フォントが含まれていない事を確認したいのです。 どこかに1箇所でも全角スペース等でも入っていると読めないとのことですので、作成にはとても神経を使っています。 今は、AdobeReaderの英語版をインストールしたPCで、ファイルをフォントを埋め込まない形でPDF化した後、英語版で開きます。 もしも、含まれていると、「日本語フォントはサポートしない…」というようなメッセージが出ることで確認しています。 他に方法はないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 遅くなりました。どうやら、元のコードは見落としがあったようです。 時間が経ちすぎて、細かい部分の雰囲気が分かれてしまっているようですが、ともかく、コードは通るようにしました。(なお、これは、コントロールツールの中は、チェックはされておりません) '標準モジュール 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)
回答No.5

文章訂正: # 時間が経ちすぎて、細かい部分の雰囲気が分かれてしまっているようですが、 ○時間が経ちすぎて、細かい部分の雰囲気が分からなくなってしまっているようですが、 (私は、本格的にどうするつもりだったのか、思い出せません。すみません。)付け足したい部分があったら、いくつかリクエストをしていただけませんか?後、もしものことを考えて、Office のアドインで、「隠しデータ削除」を使うと、思わぬところに入っている文字を削除できます。それ自体は、2バイト文字は関係がありません。 なお、時間経過が経ちましたので、細かい内容は、補足でもよいのですが、「お礼」側に通信文を入れていただければ、こちらにはメールとして送信されます。よろしくお願いします。

O-tankun
質問者

お礼

Wendy02さん 先日より早速使わせていただいております。 おかげで業務効率が飛躍的に向上致しました。 (今まで1ファイル10分くらい掛かっていたのが1秒で済みます) 先日のバージョンでもエラーが出るものの使用することが出来ていたのですが、今回修正していたバージョンではテキストボックス内の文字も検索が掛かっていました。 本当に感謝しております。どうもありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

#2 です。 こんにちは。 >テキストボックスがあるとエラーになってしまうようですので 「本格的なものが必要な場合は、もう少し時間が必要です。」 と書いたけれども、そちらが必要なのですね。少し、時間が経ちましたが、以前、私が同様のものを作っておりますから、お待ちください。 ただ、かなり長いコードになってしまいます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 >ファイル中に日本語フォントが含まれていると、相手先では読めないとのことです。 文字化けを嫌っているということではないでしょうか? 文字化けはしても、読めないというレベルの問題ではないと思います。 一応、言語設定で、英語版(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

O-tankun
質問者

お礼

返事が大変遅くなり申し訳ございません。 私にはマクロの設定自体が敷居が高かったため遅くなってしまったことをお詫びいたします。 使ってみましたが、無事に1バイト文字を確認することが出来ました。 ありがとうございました。 テキストボックスがあるとエラーになってしまうようですので、そちらも検出出来るようになると嬉しいです。

noname#204879
noname#204879
回答No.1

シート全体(全セル)をアクティブにして、[データ]→[入力規則]→[日本語入力]で“無効”に設定したら如何かと。

O-tankun
質問者

お礼

回答ありがとうございます。 ファイルの作成の仕方として、 ・別のデーターからコピーして貼り付ける。 ・テキストBOX内に文字を入れる ・グラフを貼り付ける 等もしますので、mike_gさんの方法だと難しいのです。 ファイル作成時というよりは、やはり完成した後で確認する方法を知りたいのです。

関連するQ&A