• ベストアンサー

エクセル 全角と半角混在で特定の文字以外削除

こんにちは。 エクセルのマクロで質問があります。 色々と調べてはいるのですが、 該当するものがないので、質問させて頂きます。 【実行したいこと】 1.全角と半角混在しているのですが、全角英数と半角英数が入っているもの以外を行削除 2.F列の0以下を行削除 3.C列の特定の文字がある時にセルを塗りつぶす 添付させて頂いた画像がサンプル画像です。 相談する人も周りにおらず、困っております。 ご教授頂けたらと思います。 宜しくお願い致します。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1734/2604)
回答No.3

> 必ず先頭の文字は > 「C05」や「m04」、「a16」など、英頭文字+数字となるので、 > それ以外を削除したいです。 CheckStr = StrConv(Cells(i, "G").Value, vbNarrow) For j = 1 To Len(CheckStr) If Mid(CheckStr, j, 1) Like "[A-z]" = True Or _ Mid(CheckStr, j, 1) Like "[0-9]" = True Then Flag = False End If Next j の部分を以下のように変更してください。 CheckStr = StrConv(Cells(i, "G").Value, vbNarrow) If Len(CheckStr) >= 3 Then If Mid(CheckStr, 1, 1) Like "[A-z]" = True And _ IsNumeric(Mid(CheckStr, 2, 2)) = True And _ Mid(CheckStr, 4, 1) Like "[0-9]" = False Then Flag = False End If End If 「A01AAA・・」や「A01A12・・」は残しますが、「A1A123・・」や「AA1234・・」や「A012・・・」(4文字目以降も数値が並ぶ)及び3文字未満は削除します。「A012・・・」(4文字目以降も数値が並ぶ)を残したい場合は(ただし「A1A123・・」や「AA1234・・」及び3文字未満は削除します) CheckStr = StrConv(Cells(i, "G").Value, vbNarrow) If Len(CheckStr) >= 3 Then If Mid(CheckStr, 1, 1) Like "[A-z]" = True And _ IsNumeric(Mid(CheckStr, 2, 2)) = True Then Flag = False End If End If End If また、動作が遅い場合 最初の方 Dim Flag As Boolean Application.ScreenUpdating = False'←これを入れる Sheets("Sheet1").Activate '実際のシート名に変更してください。 最後に Application.ScreenUpdating = True'←これを入れる End Sub としてください。

eco2012
質問者

お礼

できました!本当にありがとうございます。助かりました。 一旦これをベストアンサーにさせて頂きますが、 もうひとつありまして、同じ「G列」に何も書かれていない空白もありまして、その行は削除したくないのですが、どのようにやればいいでしょうか。 お手数おかけして本当に申し訳ないです。分かればでいいので、 教えて頂けると助かります。この度は、本当に有難うございました。

その他の回答 (2)

  • kkkkkm
  • ベストアンサー率66% (1734/2604)
回答No.2

> 1.全角と半角混在しているのですが、全角英数と半角英数が入っているもの以外を行削除 G列のような気もするのでG列を対象にしています。 ColorIndexは以下のページを参考に http://www.relief.jp/itnote/archives/000482.php Sub Example() Dim i As Long, j As Integer Dim CheckStr As String Dim Flag As Boolean Sheets("Sheet1").Activate '実際のシート名に変更してください。 For i = Cells(Rows.Count, "G").End(xlUp).Row To 2 Step -1 Flag = True If Cells(i, "F") <= 0 Then Flag = True Else CheckStr = StrConv(Cells(i, "G").Value, vbNarrow) For j = 1 To Len(CheckStr) If Mid(CheckStr, j, 1) Like "[A-z]" = True Or _ Mid(CheckStr, j, 1) Like "[0-9]" = True Then Flag = False End If Next j End If If Flag = True Then Cells(i, "H") = "del" 'テスト時に削除行を確認するためですので 'H列のdelが実際に削除される行と一致した場合に下のDeleteを有効にして上を削除してください 'Rows(i).Delete ElseIf Cells(i, "C").Value = "特定の文字" Then Cells(i, "C").Interior.ColorIndex = 4 End If Next End Sub

eco2012
質問者

お礼

ありがとうございます。できました!欲を言いますと、必ず先頭の文字は 「C05」や「m04」、「a16」など、英頭文字+数字となるので、 それ以外を削除したいです。お分かりになりましたら、教えて頂けると幸いです。

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんばんは 全角と半角混在って、どこの列ですか? 画像では、 型番は全角英数と半角英数だけみたいですし、 配送番号は全てに全角ひらがなが入っているみたいですし、 名前は全て全角ひらがながですし。 C列の特定の文字をどう指定したいのかも分からないですし。 F列の0以下を行削除はオートフィルタで絞り込んで削除をマクロに記録してみれば すぐ出来そうですし。

eco2012
質問者

お礼

ご回答頂きましてありがとうございます。

eco2012
質問者

補足

ご回答ありがとうございます。全角と半角混在はG列です。C列の特定文字は、「あいうえお」となっていたら黄色で塗りつぶす、「かきくけこ」となっていたら赤色で塗りつぶすというようにしたいです。F列の行削除は、おっしゃるとおりですが、毎回、行数が変わるので、フィルタを掛けずに、 F列の「0以下」を削除したかったのです。 分かりにくい文章で申し訳ございませんでした。

関連するQ&A

専門家に質問してみよう