ぼくらの研究

ぼくらのための研究をしていきます。

【VBA】シート1の文字列をシート2のリストに合わせて置換する

      2017/02/26

VBA

 

概要

エクセルのシートで、Sheet1のセルにある文字列を、Sheet2にある置換リストに合わせて一括置換するマクロです。

コード内容

Option Explicit
Sub 文字列リストに基づき連続して置換する()
Dim i As Long, x1 As String, x2 As String
Application.ScreenUpdating = False '描画停止
i = 2
Do
 x1 = Sheets("Sheet2").Cells(i, 1)
 x2 = Sheets("Sheet2").Cells(i, 2)
 Sheets("Sheet1").Cells.Replace _
 What:=x1, Replacement:=x2, LookAt:=xlPart, _
 SearchOrder:=xlByColumns, MatchCase:=True
 i = i + 1
Loop Until Sheets("Sheet2").Cells(i, 1) = ""

Application.ScreenUpdating = True '描画停止解除

MsgBox "置換完了"
 
End Sub

 

コードの説明

かなり簡単というかシンプルなコードです。

まず最初に高速化のために

Application.ScreenUpdating = False '描画停止

を入れています。まぁデータ量が多くなるとここらへんもバカにできないくらいの差になってきますしね。

で、Sheet1のデータの形式は特に問わないんですが、Sheet2の置換リストは

検索文字列 置換文字列
0 りんご
1 みかん
2 バナナ
3 ぶどう
4 いちご

という形になっている必要があります。

ここで

Sheets("Sheet1").Cells.Replace _
What:=x1, Replacement:=x2, LookAt:=xlPart, _
SearchOrder:=xlByColumns, MatchCase:=True

というコードを使ってSheet2にある置換リストの内容(検索文字列、置換文字列)を上から順に部分一致で実行していくような感じです。

用途も多くてけっこう便利だと思うのでぜひご活用いただければ幸い。

VBAのIE操作を覚えるのに一番良いと思う本(ぼくはこれで覚えました)