[[20071211214004]] 『文字の置換えをVBAで行う』(sinmaipapa) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『文字の置換えをVBAで行う』(sinmaipapa)
 VBA初心者です。

 ある列に入っている何種類かの文字を、決まった文字に置き換えるVBAの書き方がわかりません。

 例)りんご、バナナ、イチゴ → 果物
   サル、ゴリラ、タヌキ → 動物
  桜、机(その他のもの) → 桜、机(そのまま)

 このようなことはできますでしょうか?

 Ifを使うのか、Replacementを使うのかも分からないレベルです。

 マクロの記録で作成してみました。            (6UP)

 Sub Macro2()
    With Selection
    .Replace What:="りんご", Replacement:="果物", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
    .Replace What:="バナナ", Replacement:="果物", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
    .Replace What:="イチゴ", Replacement:="果物", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
    .Replace What:="サル", Replacement:="動物", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
    .Replace What:="ゴリラ", Replacement:="動物", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
    .Replace What:="タヌキ", Replacement:="動物", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
    End With
 End Sub

 大きく分けて2つの方法があると思います。
 1) Replace method で置換する。
 2) Loop して、該当文字を Replace関数等で置換する。

 どちらにしても、検索文字/置換文字のリストがあった方がよいでしょうね...
 下記コードはSheet1のA列に対象データがあり、Sheet2のA/B列に検索文字/置換文字が

 	  A	              B
1   りんご、バナナ、イチゴ	    果物
2   サル、ゴリラ、タヌキ	    動物

 のように配置されていると想定して、

 1) Replace Method

 Sub myReplace()
 Dim r As Range, rng As Range, e
 With Sheets("sheet2")
     Set rng = .Range("a1", .Range("a" & Rows.Count).End(xlUp))
 End With
 For Each r In rng
     If InStr(r.Value,"、") > 0 Then
         For Each e In Split(r.Value,"、")
             Sheets("sheet1").Columns("a").Replace what:= e, replacemane:= r.Offset(,1).Value, lookat:=xlPart
         Next
     Else
         Sheets("sheet1").Columns("a").Replace what:= r.Value, replacemane:= r.Offset(,1).Value, lookat:=xlPart
     End If
 Next
 Set rng = Nopthing
 End Sub

 2) Loop - 1
 Sub myLoop()
 Dim r As Range, c As Range, rng1 As Range, rng2 As Range, e
 With Sheets("sheet2")
     Set rng1 = .Range("a1", .Range("a" & Rows.Count).End(xlUp))
 End With
 With Sheets("sheet1")
     Set rng2 = .Range("a1", .Range("a" & Rows.Count).End(xlUp))
 End With
 For Each r In rng1
     If InStr(r.Value,"、") > 0 Then
         For Each e In Split(r.Value,"、")
             For Each c In rng2
                 c.Value = Replace(c.Value, e, r.Offset(,1).Value)
             Next
         Next
     Else
         c.Value = Replace(c.Value, r.Value, r.Offset(,1).Value)
     End If
 Next
 Set rng1 = Nothing : Set rng2 = Nothing
 End Sub
 (seiya)

 6upさん、seiyaさんありがとうございます。
 seiyaさん、検索文字/置換文字のリストが別のbookなどでもできるのでしょうか?
 例えば、決めた場所に読みに行くとか・・・。

 > seiyaさん、検索文字/置換文字のリストが別のbookなどでもできるのでしょうか?
 例えば、決めた場所に読みに行くとか・・・。

 上記コードの
 1)
 Sheets("sheet2") <- 表のあるシート
 を
 Workbooks("Book2.xls").Sheets("sheet2")  '<- Book2.xls の Sheet2

 2)
 Sheets("sheet1") <- 置換するデータのあるシート
 を
 Thisworkbook.Sheets("sheet1") '<- コードが書かれているブックの Sheet1

 に変更すればよいです。
 (seiya)


 seiyaさん、ありがとうございます!
 あまりの回答の早さ、的確な回答に感動です。助かりました!

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.