文字の変換について教えて下さい

このQ&Aのポイント
  • 複数シートに入力されている会社名の文字化けを一瞬で見分けて変換する方法を教えてください。
  • シート内の日本語以外の文字や記号、ハングルや半角文字のセルを色付けするか、別シートに抽出することで見落としや間違いをなくす方法を教えてください。
  • 大量のシートから一度に会社名の文字化けを修正する方法を教えてください。
回答を見る
  • ベストアンサー

文字の変換について教えて下さい。

あるブックのC列に、 会社名(全角の漢字・英字・カタカナ)が入力されているシートが、100シートあります。 (各シートの行数は違います。) 文字化けをしている字を探して、『★』(全角)にする(変換)作業をするのですが、 件数があまりにも膨大なため、一行づつ見ていくと、見落としや時間もかかります。 沢山のシートのデータから、 一瞬で文字化けの字を見分けて、その文字だけ『★』に変換する事は無理だと思いますので、 例えば、C列には、必ず日本語以外の文字は入らないとして、 日本語以外の、ハングルや記号や半角文字が入っているセルに色をつける・・・とか、 日本語以外の、ハングルや記号や半角文字が入っている行を別シートに抽出する・・・などが出来たら間違いも非常に少なくなるのに・・・・と考えています。 出来ましたら、複数シートを一度に・・・・・が願いです。 わがままで すみません。 何か いい方法はないものでしょうか・・・・・ どうぞ よろしくお願いします!

  • p1_1q
  • お礼率95% (39/41)

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

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.4

 先ず、 >シートの名前で、入れたらいけない文字 はありません。「入れたらいけない文字」は シート に名前を付ける段階で排除されていますので、マクロ の進行上、問題は全然ないと存じます。 >個人用マクロにコードを貼りつけて実行した  Personal.xls のことですか?  こういう コード は、回答者から特に指定がない場合は、当該ブック の 標準モジュール に貼り付けてお試しいただかないと不具合の元です。  先ず、「ThisWorkbook.Sheets.Count」が明らかに変わってしまいます。 >最初のシートのデータだけで、 >あとのシートには、反映されてないのです。 は、これが原因だと存じますが、私の コード にも ミス が判明いたしましたので、とりあえず、下記1点をご訂正ください。 。 For mySh = 1 To ThisWorkbook.Sheets.Count と For myRow = 1 To Cells(Rows.Count, "C").End(xlUp).Row との間に Sheets(mySh).Select を入れてください。 >Range("A2").Resize(UBound(myArr) + 1) = Application.Transpose(myArr) >のところで、『実行時エラー'13' は、「文字化け」が1つも無かったということになるのですが、上記の訂正で、このエラーは出なくなると存じます。 #本当は、「文字化け」が1つも無かったときの エラートラップ をしなければならないのでしょうが。。。 #それと、「Sheets」という表現は「グラフシート」とかがある場合は、全部「Worksheets」に置換してください。

p1_1q
質問者

お礼

DOUGLAS_さま、再度、回答を考えていただき ありがとうございます! コードを Personal.xls に貼り付けてしまい すみません m(;_;)m コードの意味ばかりたずね歩き、 貼り付ける場所のことを考えてなくて、反省しました。  これから、ThisWorkbook.Sheets.Count が変わってしまうこと等を頭に入れて勉強していきます。 教えていただいたように貼りつけ、一行挿入して実行しましたら、       できました (^^)! このようなことが出来るとは、全く思ってもみませんでした。 項目も、シート名ばかりか、わかりやすく会社名までいれてくださり、文字化けヶ所の指定までも・・・・ 『置換されては困る文字は、随時  strPattern = "[^0-9A-Za-zぁ-ヶ一二三五七九〇万亜-黑]"  の「一」の前当たりに羅列してください。』 使うたびに、パワーアップしていくような、 ずっと受け継いでいけるマクロにしていただいて、本当に、感謝しております。

その他の回答 (3)

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.3

>C列に、会社名(全角の漢字・英字・カタカナ)が >入力されているシートが、100シートあるブックの >文字化けをしている字を探して、 >その文字だけ『★』に変換する >日本語以外の、ハングルや記号や半角文字が >入っている行を別シートに抽出する でよろしいでしょうか? ・全角英数字 ・ひらがな ・全角カタカナ ・漢字全部(第1・2水準のみ) 以外の文字を「★」に置き換え、当該シート上では、 「0011AAaaあアアㅧ㈗㉦亜黑」が 「★0★1★A★aあ★ア★★★亜黑」というように置換され、最後に「文字化け検査結果」シートに シート名 行番号 会社名 文字化けヶ所 Sheet1 5行目 0011AAaaあアアㅧ㈗㉦亜黑 1文字目「0」 3文字目「1」 5文字目「A」 ・・・ と羅列して表示されます。 置換されては困る文字は、随時 strPattern = "[^0-9A-Za-zぁ-ヶ一二三五七九〇万亜-黑]" の「一」の前当たりに羅列してください。 Sub 文字化け検査()  Dim RE As Object  Dim strPattern As String  Dim mySh As Long  Dim myRow As Long  Dim myRng As Range  Dim Matches As Object  Dim Match As Object  Dim myArr As Variant  Set RE = CreateObject("VBScript.RegExp")  strPattern = "[^0-9A-Za-zぁ-ヶ一二三五七九〇万亜-黑]"  With RE   .Pattern = strPattern   .Global = True   For mySh = 1 To ThisWorkbook.Sheets.Count    For myRow = 1 To Cells(Rows.Count, "C").End(xlUp).Row     Set myRng = Sheets(mySh).Cells(myRow, "C")     If .Test(myRng.Text) Then      myArr = myArr & Sheets(mySh).Name & vbTab & _        myRow & "行目" & vbTab & myRng.Text & vbTab      Set Matches = .Execute(myRng.Text)      For Each Match In Matches       myRng.Value = Replace(myRng.Text, Match.Value, "★")       myArr = myArr & Match.FirstIndex + 1 & "文字目「" & Match.Value & "」" & vbTab      Next      myArr = myArr & vbNewLine     End If    Next myRow   Next mySh  End With  Set RE = Nothing  myArr = Split(myArr, vbNewLine)  Sheets.Add before:=Sheets(1)  ActiveSheet.Name = "文字化け検査結果"  Range("A1:D1") = Array("シート名", "行番号", "会社名", "文字化けヶ所")  Range("A2").Resize(UBound(myArr) + 1) = Application.Transpose(myArr)  Range("A2").Resize(UBound(myArr) + 1).TextToColumns Tab:=True  Rows("2:" & Range("A2").End(xlDown).Row).Columns.AutoFit End Sub

p1_1q
質問者

お礼

DOUGLAS_さま、回答、ありがとうございます! 『C列に、会社名(全角の漢字・英字・カタカナ)が入力されているシートが、100シートあるブックの、  文字化けをしている字を探して その文字だけ『★』に変換する  日本語以外の、ハングルや記号や半角文字が入っている行を別シートに抽出する  でよろしいでしょうか?』 はい、その通りです。 >・全角英数字 >・ひらがな >・全角カタカナ >・漢字全部(第1・2水準のみ) >以外の文字を「★」に置き換え、 る・・・えっ、そのようなことが出来るのですね (・ー・)人 シートが6つあるブックで実行しました。 個人用マクロにコードを貼りつけて実行したところ、最後から4行上の、 Range("A2").Resize(UBound(myArr) + 1) = Application.Transpose(myArr) のところで、『実行時エラー'13'  型が一致しません』  とでて、それ以上 進まなかったので、 コードを一度消して シートの内容を少し変えて、操作を最初に戻し、貼りつけて実行したところ、 シートの最初に『文字化け検査結果』が追加されて、文字化け検査結果が出ました! しかし、最初のシートのデータだけで、 なぜか、2番目からのシートからあとのシートには、反映されてないのです。 何回か、おなじ事を繰り返して実行してみたのですが、やはり、最初のシートの検索結果しか出ないのです。 原因は、私のデータの内容がおかしいのだと思われます。 せっかく作ってくださったのに、スミマセン。今からまた、いろいろ試しデータを作って、挑戦してみます。 それか、マクロを実行する時に、シートの名前で、入れたらいけない文字などが あるのでしょうか?

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんにちは! 文字化けしている文字に対応できるかどうか判りませんが・・・ とりあえず各SheetのC1セルから一文字ずつ舐めるように検索し、半角の場合のみ「★」に変えてみました。 一例です。 ↓のコードを標準モジュールにコピー&ペーストしてマクロを試してみてください。 Sub test() Dim i, j, k As Long Dim str As String For i = 1 To Worksheets.Count For j = 1 To Worksheets(i).Cells(Rows.Count, 3).End(xlUp).Row For k = 1 To Len(Worksheets(i).Cells(j, 3)) str = Mid(Worksheets(i).Cells(j, 3), k, 1) If LenB(StrConv(str, vbFromUnicode)) = 1 Then Worksheets(i).Cells(j, 3) = Replace(Worksheets(i).Cells(j, 3), str, "★") End If Next k Next j Next i End Sub 尚、1行目がタイトル行になっているのであれば >For j = 1 To Worksheets(i).Cells(Rows.Count, 3).End(xlUp).Row の「1」の部分を適宜変更してみてください。 それから最初に書いたようにすべてのSheetのC列を一文字ずつ舐めるように検索してますので かなり時間がかかるかもしれません。 一旦マクロを実行すると元に戻せませんので、別Bookにデータをコピーしてマクロを試してみてくださいね。 希望通りにならなかったらごめんなさいね。m(_ _)m ※ 追伸 あまり夜遅くまで根を詰めてPCとにらめっこしないでね! 寝不足は○○に良くないみたいですよ!(@^^)/~~~

p1_1q
質問者

お礼

こんばんは、tom04さん♪(!▽!) 達人コードで練習しましたら、沢山のシートの半角文字が、一瞬で、星になりました★ 何度 教えて頂いても、そのたびに、更に感動します。 こんなに短いコードの中で、何を宣言して、何が行われて、 達人は、どんな所を簡単にしとってんかな・・・なにが違うのかな・・・・と、 研究したくならない人が いるのでしょうか。 いつも、回答と一緒に、やる気をいただき、ありがとうございます p(^ー^ )q ※ 追伸 ご心配、ありがとうございます! (^ワ^)  PCとにらめっこは〇〇に良くない・・・・(笑) うん、確かに! 『一日4時間睡眠で生活できる方法』という分厚い本を見つけ、福屋で真剣に立ち読み(正確には、しゃがみ読み)しましたが、 途中で突然眠くなり、内容は、あんまりおぼえてないのです( ̄0 ̄q ガーン 寝てる間の時間がもったいなくて・・・でも、おっしゃる通り、〇〇が最優先ですよね。 ゆっくり勉強、研究します。 優しい お心遣いに、感謝の気持ちでいっぱいです。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

エンコードにより違いますので、文字化けしているかどうかの判定自体が大切です。 会社名でピボットテーブルを作り、正しい会社名リストをエクセルのEXACT関数を使って、一致していないものを見つけてはいかがでしょうか。 また、正しい会社名リストが無いようでしたら、不完全ですが半角文字が含まれるセルのみを抽出するために、LEN関数とLENB関数の値を比較して一致しないセルを見つける方法で少しは見つけられるでしょう。 =IF(LEN(A1)*2-LENB(A1)<>0,"半角文字を含むセルです","全角文字のみのセルです")

p1_1q
質問者

お礼

aokiiさま、回答、ありがとうございます。 >また、正しい会社名リストが無いようでしたら、 そんなんです・・・ないのです。 正しいものがあれば、 一行づつ見ていくことをしなくても、検索や比較などで何とか見つけることもできると思うのですけど、 アドバイスを参考にさせていただきます! ありがとうございました。

関連するQ&A

  • ローマ字文字列の半角←→全角変換

    半角で入力してあるローマ字文字列(大小文字、記号を含む)を全角に簡単に変換する方法を教えて下さい。もちろん、大文字は大文字で。大文字・小文字を「全て置換」で50数回やればと思いましたが、もっと簡単な方法があるのではと思いましたので。88歳。

  • メモ帳の文字変換が英語のみ

    メモ帳の文字変換がローマ字日本語入力になりません。 「半角/全角」を押しても英語入力のままです。 IE,FireFox,エクセルなどはちゃんと日本語変換になります。 再起動しても直りません。 どうしたら直るのかおしえてください、よろしくお願いいたします。

  • 文字変換

    半角から全角に切り替えて、入力しようとすると 全角では{全角アルファベットにアンダーライン(点線)}がついた状態になります。以前はすぐにローマ字入力から日本語変換出来たのですが。 今は一度CapsLockを押してから日本語が使えるようになります。元に戻す方法を教えてください。

  • キーボード入力の設定

    キーボード入力の設定が変わってしまい困っています。 原因はウィルスに感染したのかどうか定かではありませんが、変なプログラムも同時期に立ち上がってきたのでウィルスかと思います。 で、どのように設定が変わってしまったのかと言うと、 入力文字を「半角英語」→「ローマ字打ち日本語」に変換するのに、 普通は左上の「半角/全角」を押せばよかったのですが、 それを押すと`や‘の記号が出るだけです。 従来のように「半角英語」→「ローマ字打ち日本語」に変換するには Altキー+「半角/全角」を押さなければいけません。 また日本語入力変換後のキーボードの文字配列も微妙に変わっているようで、 「」、()、“”などの記号は1列ずれ、@マークはどこを探しても見つからず。 我慢すればどうにかならないこともないのですが、とても使いにくいので設定を戻したいです。 どなたか詳しい方、教えて下さい。よろしくお願いします。

  • MS-IMEで変換候補を制限したい

    ローマ字の半角小文字の列を、MS-IMEに登録すると、変換したときに、全角、大文字など使わない文字も変換候補として出てきます。 これを、必要な半角小文字列のみにしぼって、それ以外は削除したいのですが、どうしたらよいでしょうか、教えて下さい。よろしくお願いします。

  • パソコンでの文字の変換に関する質問です。

    パソコンでの文字の変換に関する質問です。 今までは、英語⇔日本語の変換は、 半角/全角のキーボードを押すだけでできたのですが、 急に、半角/全角を押すと 「`」が出るようになってしまいました。 なぜでしょうか?

  • VBA(Excel)で文字列内の"~"記号だけ半角変換したくない

    VBA(Excel)で、StrConvを用いて、文字列内に存在する記号を全角→半角に変換して、再び文字列内に格納するようにしています。   strValue = StrConv(strValue, vbNarrow) しかし、"~"も"~"に変換されてしまいます。 "~"は半角変換しないようにしたいのですが、何か良い手法はありますでしょうか? どなたかご教授下さいませ。 よろしくお願い致します。

  • 文字変換でなかなかひらがなにならないときがある。

    文字変換でローマ字の半角全角変換になって、なかなかひらがな変換にならないときどうすればよいですか?

  • ワード2007で記号や特殊文字を全角変換したい

     ワード2007を使用していますが、記号や特殊文字を「その他の記号」から挿入するのですが半角で入力されます。  全角に変換しなおしたいのですがどうすればいいでしょうか!  たとえば前行の!ですが簡単に全角に変換できないでしょうか?  逆に全角から半角に変換できないでしょうか? マイクロソフトオフィス2007の問題なのでしょうか?  

  • 全角から半角に変換する

    Javaで、文字列の中に全角があれば単純に半角に変換するような処理をしたいです。具体的には、次のような文字列があった場合、以下のように変換したいです。 <変更前> あ亜アアaaAA11%% <変更後> ア亜アアaaAA11%% つまり、以下のようにしたいです ・全角ひらがな→半角カタカナ ・漢字:何もしない ・全角カタカナ→半角カタカナ ・半角カタカナ:何もしない ・半角アルファベット→何もしない ・全角アルファベット→半角アルファベット ・半角数字→何もしない ・全角数字→半角数字 ・半角記号→何もしない ・全角記号→半角記号 上記のように書くと複雑に見えますが、要は基本的に半角に相当する文字がある場合には半角にしたいだけです。Googleで探してみましたが、Javaで標準で上記のような処理を出来るようなメソッドを見つけることができませんでした。このようなメソッドは標準で存在しますでしょうか? 自作する場合、いくつかアプローチがあると考えられますが、最もパフォーマンスを速くしたい場合にはどのような作り方にした方がよいでしょうか。お手数ですが、宜しくお願いします。 <追伸> プレビューで見たら、半角の文字が全角に自動的に変換されてしまいました。。 例文からはわかりにくいかも知れませんが、宜しくお願いします。。

    • ベストアンサー
    • Java