[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『文字の置換えを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.