あるブックのC列に、
会社名(全角の漢字・英字・カタカナ)が入力されているシートが、100シートあります。
(各シートの行数は違います。)
文字化けをしている字を探して、『★』(全角)にする(変換)作業をするのですが、
件数があまりにも膨大なため、一行づつ見ていくと、見落としや時間もかかります。
沢山のシートのデータから、
一瞬で文字化けの字を見分けて、その文字だけ『★』に変換する事は無理だと思いますので、
例えば、C列には、必ず日本語以外の文字は入らないとして、
日本語以外の、ハングルや記号や半角文字が入っているセルに色をつける・・・とか、
日本語以外の、ハングルや記号や半角文字が入っている行を別シートに抽出する・・・などが出来たら間違いも非常に少なくなるのに・・・・と考えています。
出来ましたら、複数シートを一度に・・・・・が願いです。
わがままで すみません。
何か いい方法はないものでしょうか・・・・・
どうぞ よろしくお願いします!
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」に置換してください。
DOUGLAS_さま、再度、回答を考えていただき
ありがとうございます!
コードを Personal.xls に貼り付けてしまい
すみません m(;_;)m
コードの意味ばかりたずね歩き、
貼り付ける場所のことを考えてなくて、反省しました。
これから、ThisWorkbook.Sheets.Count が変わってしまうこと等を頭に入れて勉強していきます。
教えていただいたように貼りつけ、一行挿入して実行しましたら、
できました (^^)!
このようなことが出来るとは、全く思ってもみませんでした。
項目も、シート名ばかりか、わかりやすく会社名までいれてくださり、文字化けヶ所の指定までも・・・・
『置換されては困る文字は、随時
strPattern = "[^0-9A-Za-zぁ-ヶ一二三五七九〇万亜-黑]"
の「一」の前当たりに羅列してください。』
使うたびに、パワーアップしていくような、
ずっと受け継いでいけるマクロにしていただいて、本当に、感謝しております。
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
DOUGLAS_さま、回答、ありがとうございます!
『C列に、会社名(全角の漢字・英字・カタカナ)が入力されているシートが、100シートあるブックの、
文字化けをしている字を探して その文字だけ『★』に変換する
日本語以外の、ハングルや記号や半角文字が入っている行を別シートに抽出する
でよろしいでしょうか?』
はい、その通りです。
>・全角英数字
>・ひらがな
>・全角カタカナ
>・漢字全部(第1・2水準のみ)
>以外の文字を「★」に置き換え、
る・・・えっ、そのようなことが出来るのですね (・ー・)人
シートが6つあるブックで実行しました。
個人用マクロにコードを貼りつけて実行したところ、最後から4行上の、
Range("A2").Resize(UBound(myArr) + 1) = Application.Transpose(myArr)
のところで、『実行時エラー'13' 型が一致しません』
とでて、それ以上 進まなかったので、
コードを一度消して シートの内容を少し変えて、操作を最初に戻し、貼りつけて実行したところ、
シートの最初に『文字化け検査結果』が追加されて、文字化け検査結果が出ました!
しかし、最初のシートのデータだけで、
なぜか、2番目からのシートからあとのシートには、反映されてないのです。
何回か、おなじ事を繰り返して実行してみたのですが、やはり、最初のシートの検索結果しか出ないのです。
原因は、私のデータの内容がおかしいのだと思われます。
せっかく作ってくださったのに、スミマセン。今からまた、いろいろ試しデータを作って、挑戦してみます。
それか、マクロを実行する時に、シートの名前で、入れたらいけない文字などが あるのでしょうか?
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とにらめっこしないでね!
寝不足は○○に良くないみたいですよ!(@^^)/~~~
こんばんは、tom04さん♪(!▽!)
達人コードで練習しましたら、沢山のシートの半角文字が、一瞬で、星になりました★
何度 教えて頂いても、そのたびに、更に感動します。
こんなに短いコードの中で、何を宣言して、何が行われて、
達人は、どんな所を簡単にしとってんかな・・・なにが違うのかな・・・・と、
研究したくならない人が いるのでしょうか。
いつも、回答と一緒に、やる気をいただき、ありがとうございます p(^ー^ )q
※ 追伸
ご心配、ありがとうございます! (^ワ^)
PCとにらめっこは〇〇に良くない・・・・(笑) うん、確かに!
『一日4時間睡眠で生活できる方法』という分厚い本を見つけ、福屋で真剣に立ち読み(正確には、しゃがみ読み)しましたが、
途中で突然眠くなり、内容は、あんまりおぼえてないのです( ̄0 ̄q ガーン
寝てる間の時間がもったいなくて・・・でも、おっしゃる通り、〇〇が最優先ですよね。
ゆっくり勉強、研究します。
優しい お心遣いに、感謝の気持ちでいっぱいです。
No.1
- 回答日時:
エンコードにより違いますので、文字化けしているかどうかの判定自体が大切です。
会社名でピボットテーブルを作り、正しい会社名リストをエクセルのEXACT関数を使って、一致していないものを見つけてはいかがでしょうか。
また、正しい会社名リストが無いようでしたら、不完全ですが半角文字が含まれるセルのみを抽出するために、LEN関数とLENB関数の値を比較して一致しないセルを見つける方法で少しは見つけられるでしょう。
=IF(LEN(A1)*2-LENB(A1)<>0,"半角文字を含むセルです","全角文字のみのセルです")
aokiiさま、回答、ありがとうございます。
>また、正しい会社名リストが無いようでしたら、
そんなんです・・・ないのです。
正しいものがあれば、
一行づつ見ていくことをしなくても、検索や比較などで何とか見つけることもできると思うのですけど、
アドバイスを参考にさせていただきます!
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Visual Basic(VBA) VBA 「,」・空白・カタカナ等の複数条件のマクロ 2 2023/08/23 11:57
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Word(ワード) Windows11キーボードの調子が悪いので治し方を教えてください。 【症状】 1つ目 キーボードの 5 2022/07/03 14:51
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- Excel(エクセル) EXCELでの文字・数字入力の基本について教えてください。 2 2023/05/29 23:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの文字入力
-
ノートンの『ccApp.exeが応答し...
-
データ本体(exe、jpeg、iso)に...
-
Windows98英語版を日本語版に(...
-
メールの添付文が意味不明
-
gooの検索バーにある入力欄にお...
-
受信者に開封確認を要求してい...
-
outlook2007で署名に無駄な空の...
-
返信時の署名位置について
-
Outlook Expressで開封確認を[...
-
アウトルック2016 受信メールが...
-
サクラチェッカーってあるじゃ...
-
メール送信時に表示されるメッ...
-
Thunderbirdのメールでクリック...
-
【急ぎです】 EMSの署名等教え...
-
ビジネスメールで
-
「ぬきすと」というサイトで詐...
-
outlookで返信すると元のメール...
-
距離を置きたい友達から「誕生日...
-
長いURLをメールで送った際に途...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【powershell】cdできないディ...
-
JISコードについて
-
データ本体(exe、jpeg、iso)に...
-
SDに保存したメールがパソコン...
-
アンダーバーではなく上につい...
-
文字化けしたメモ帳(暗号勝負...
-
エクセルの文字入力
-
JavaMail特殊文字付本文が文字...
-
メールの添付文が意味不明
-
揵
-
エクセルのふりがな機能で。
-
eメールでの半角カナ
-
Hotmailの件名の文字化け
-
アンダーバーの入力
-
%BE%A4%8Bみたいな記号
-
JIS X 0201の7ビットと8ビット...
-
受信者に開封確認を要求してい...
-
メール送信時に表示されるメッ...
-
outlook2007で署名に無駄な空の...
-
返信時の署名位置について
おすすめ情報