エクセル実践塾 > エクセル実践塾2016

置換リストを使って、 複数の置換をまとめて行いたい

 

10行程度のマクロで、 置換リストを使った一斉処理が可能です

置換のための対応表のセル範囲には、 「置換リスト」という名前をつけておきます。

その対応表にしたがい、 選択中のセル範囲を対象とした一斉置換を、 次のようなマクロで実行できます。


Dim cell As Range

Dim replacementsRange As Range

Dim replacement As Variant

 

Set replacementsRange = Range("置換リスト")

 

Set rng = Selection

 

For Each cell In rng

 For Each replacement In replacementsRange.Columns(1).Cells

  cell.EntireRow.Replace What:=replacement.Value, replacement:=replacement.Offset(0, 1).Value, LookAt:=xlWhole, _

                 MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

 Next replacement

Next cell

 

@置換対応表のセル範囲に、「置換リスト」という名前をつけておきます

 

A個人用マクロブックに、適当な名前のマクロを用意します

「マクロの記録」を使うと、個人用マクロブックにマクロを用意できます。

 

B何も行わず、すぐに「記録終了」します

Visual Basicを開くと、PERSONAL.XLSB(個人用マクロブック)の末尾Moduleにそのマクロが空で作られています。

C左図のようなマクロを記述します

このコードは、選択範囲内の各セルに対して、指定された置換リストを使用して検索と置換を行います。

コードの要素は以下の通りです。

変数の宣言

Dim cell As Range
Dim replacementsRange As Range
Dim replacement As Variant

cell と replacementsRange は Range オブジェクト型の変数で、replacement は Variant 型の変数です。
Variant 型は任意のデータ型を受け入れることができるため、さまざまな型のデータを扱えます。

置換リストの範囲を取得

Set replacementsRange = Range("置換リスト")

置換リストの範囲を "置換リスト" という名前で定義された範囲から取得しています。
この範囲には検索対象となる文字列と、それに対応する置換文字列が格納されていると仮定します。

選択範囲の取得

Set rng = Selection

Selection オブジェクトは、ユーザーが現在アクティブにしている範囲(セル、セル範囲)を表します。
この範囲を rng 変数に設定しています。

検索と置換のループ

For Each cell In rng
 For Each replacement In replacementsRange.Columns(1).Cells
  cell.EntireRow.Replace What:=replacement.Value, replacement:=replacement.Offset(0, 1).Value, LookAt:=xlWhole, _
               MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
 Next replacement
Next cell

上記のコードは2重の For Each ループで構成されています。
外側のループは選択範囲内の各セル (cell) を順番に処理し、内側のループは置換リストの各要素 (replacement) を順番に処理します。

cell.EntireRow.Replace メソッドは、セルが含まれる行全体に対して置換を行います。
具体的な置換の条件は次の通りです。

What: 置換対象となる文字列は replacement.Value で取得されます。

replacement: 置換文字列は replacement.Offset(0, 1).Value で取得されます。Offset(0, 1) は同じ行の次のセルを指定しています。

LookAt: 完全一致で検索 (xlWhole) します。

MatchCase: 大文字と小文字を区別しない (False) で検索します。

SearchFormat および ReplaceFormat: フォーマットを考慮せずに検索と置換を行います。

D置換対象のセル範囲を選択してから、マクロを実行します

矩形のセル範囲も、置換対象にできます。

E表示形式などは、あとから整えます

F置換リストの範囲は、「数式」タブの「名前の管理」で変更できます

   
   
   
   
   
   
   
   
   
   
   
 

 

●10行程度のマクロを使って、 用意した置換リストにしたがい、 複数の置換をまとめて行えるようにします

Dyson(ダイソン)オンラインストア

関連する他のページ

ドロップダウンリストで、 データを入力したい
「データ」タブの「データの入力規則」を使います

勤怠情報を、 ドロップダウンリストで入力したい
「データの入力規則」を使うと、 ドロップダウンリストを設定できます

コース名をドロップダウンリストから入力したい
「データの入力規則」を使います

ドロップダウンリストでプランを選びたい
「データの入力規則」で任意のドロップダウンリストを設定できます

都道府県名をドロップダウンリストで入力したい
都道府県が入力されているセル範囲を、 「データの入力規則」のリストとして設定すれば、ドロップダウンリストで選べるようになります

あとから見てもわかりやすいVLOOKUP関数式にしたい
「範囲」として指定するセル範囲に、 あらかじめ適当な名前を付けておけば、VLOOKUP関数式でもそれを使えるのでわかりやすくなります

一意の項目に該当する、 同一行内のデータを取り出したい
INDEXとMATCHの関数を組み合わせると、 検索列の左側であっても、 該当するデータを取り出すことができます

日別のシフト表から、 個人の勤怠データを抜き出して表示したい
日別勤怠表のシート名を数式で作りながら、 VLOOKUP関数で参照する方法があります

隔列のセル値を参照したい
値を参照する列の指定を、 数式で行う方法があります

日別の勤務表から、 個人別の勤務表を作りたい
シートタブ名が日にちしてあれば、 それを使ったVLOOKUP参照が可能です

成績一覧から上位10名を選び出して表示したい
同順が含まれる場合に備えて、 順位を表す数値に固有の小数を付加し、 それを使って順位から表引きを行います

住所から都道府県を取り出したい
あらかじめ都道府県の頭3文字を抜き出したリストを用意して、 それを使ってVLOOKUP関数による表引きを行います

アンケートをピボットテーブルで集計したい
数値で入力されている選択肢の情報を、 文字列に直してから集計します

顧客番号から顧客名を表引きしたい
VLOOKUP関数を使います

納品書の明細もVLOOKUP関数で転記したい
納品番号に行番号を追加すれば、 それを使って 各明細行の表引きが可能です

納品書の日付と顧客名を自動転記したい
元表がテーブル化されていれば、 そのテーブル名と項目列名を指定して、 納品番号から表引きできます

顧客名の顧客コードを表引きしたい
検索する「顧客名」を左端に移動して、 VLOOKUP関数で表引きします

テーブル化した商品リストから、 商品コードで商品情報を表引きしたい
表引きする側とされる側の両方をテーブル化すれば、 項目列名で表引きすることができます

住所から都道府県名を取り出したい
都道府県名の一覧を用意すれば、 VLOOKUP関数で住所から都道府県名を取り出せます

出退の時刻を簡単に記録したい
簡単なマクロを作れば、 「出社」や「退社」をクリック(タップ)するだけで現在日時を入力できる タイムカードを用意できます

『名前』に右隣セルの『ふりがな』を登録したい
簡単なマクロを作って、ふりがな登録する方法があります

セル範囲を対象とするユーザー定義関数を作りたい
For Each...Next ステートメントを使って、選択範囲に含まれるセルを順番に処理します

オリジナルの関数(ユーザー定義関数)を作りたい
Functionプロシージャとして、Visual Basicで作成できます

マクロを作りたい
「開発」タブを表示しておけば、そこから「Visual Basic」を実行してマクロを作ることができます

ブックを開いたときの新規シート自動挿入を、1日1枚に制限したい
新規シートの名前に日付を加え、マクロ実行時にその存在の有無を確認するようにします

ブックを開いたときに、新規シートを先頭へ挿入したい
ThisWorkbookのOpenプロシージャに該当コードを記述します

マイナス値をゼロに置換したいC
If...ThenステートメントによるVBAマクロを使えば、マイナス値をまとめてゼロに置換できます

“縮小して表全体を表示する”のマクロを、 クイックアクセスツールバーから実行したい
クイックアクセスツールバーにマクロを登録すれば、マウスからでも、キーボードからでも、簡単に実行できるようになります

“縮小して表全体を表示する”のマクロを使って、表の選択から一気に処理したい
Range.CurrentRegion プロパティを使えば、 アクティブセル領域となっている表全体をマクロで選択できます

“縮小して表全体を表示する”を、 ショートカットキーですばやく実行したい
実行手順をマクロとして記録すれば、 ショートカットキーでその一連の手順をすばやく実行できるようになります

“セキュリティの警告”が表示されるんだけど・・・
マクロを含むブックを開くときには、注意を促すべく、「セキュリティの警告」が表示されます

マクロ有効ファイルって何?
マクロを含むブックは、 マクロ有効ファイル(マクロ有効ブック)として保存しなければ、マクロが失われてしまいます

100行程度の表で、5行おきに、新しい行を挿入したい
あまり大きくない表でのパターン化された処理なら、一定の手順をマクロ記録すると便利です

オートシェイプをクリックするたびに、枠線の表示と非表示を切り替えたい
枠線の表示と非表示の切り替えマクロを、 オートシェイプに登録すれば、 オートシェイプをクリックするだけでそのマクロが実行されるようになります

オートシェイプの枠線の表示と非表示を、一つのマクロで切り替えたい
If〜Then〜Elseの構文を使えば、 オートシェイプの状態に応じて、表示と非表示を一つのマクロで切り替えられます

オートシェイプの枠線の表示の有無を、マクロで切り替えたい
Shape.LineのVisibleプロパティの設定を変えることで、 枠線を表示したり非表示にしたりすることができます

マクロを右クリックで実行したい
Worksheet_BeforeRightClickイベントのプロシージャにマクロを記述すると、 指定シートを右クリックしたときにそのマクロが実行されます

ブックを閉じるときに、マクロを自動的に実行したい
そのブックのWorkbook.BeforeClose イベントに、マクロを実行するコードを記述します

2つのフォルダへの保存マクロを、汎用的なものにしたい
ファイル名の部分を、 編集中のブックの名前を表すActiveWorkbook.Nameにすると、 編集中のブックならどれでもマルチ保存が可能になります

マクロ実行時に表示されるダイアログボックスを無視したい
Application.DisplayAlerts プロパティをFalseにすると、 マクロの実行中に警告やメッセージが表示されなくなります

編集中のブックを、現在のフォルダとは別のフォルダにも、すばやく保存したい
手間のかかる操作は、マクロ化すれば、簡単に処理できるようになります

ブックにたくさんのシートがあり、 それぞれのB2セルに入力してあるデータを、それぞれのシートの名前にしたい
For Each...Next ステートメントを使えば、 編集中のブックに含まれるすべてのシートを対象にして、同じ処理を実行することができます

マクロのコードを、見た目にわかりやすく、簡潔に記述したい
With ステートメントを使えば、作業の対象となるオブジェクトの記述が1回で済みます

B2セルに入力してあるデータを、そのシートの名前にしたい
シートの名前は、Worksheet.Name プロパティで変えることができます

リスト内の各データを、順番に個別で表示したい
専用のユーザーフォームにスクロールバーを追加すれば、リスト内のデータを順番に表示できます

リスト内の各データを、必要に応じて個別で表示したい
マクロを使えば、ダブルクリックしたデータを、専用のユーザーフォームで表示することができます

指定したページだけを、とびとびで印刷したい
マクロを使えば、指定したページだけを連続して印刷することは可能です

どのブックからでも利用できるマクロを作りたい
「個人用マクロブック」に登録すれば、どのブックからでもそのマクロを実行できるようになります

 

 

 

 

 

出前館

アウトドア&フィッシング ナチュラム