こんにちは~。「デザインもできるシステムエンジニア」のあつもり(@atumori17)です。今日も業務効率化のアイデアを発信していきますっ!
前回は「複数の文字列・単語をまとめて連続置換する方法」を紹介しました。今回はこのプログラムをより使いやすいものにしていきたいと思います。
連続して文字列を置換したときに、置換する前の文字列と比較したいと思ったことはありませんか?プログラムがきちんと動いているかの確認にもなるし、置換表の定義が間違っていて正常に置換されていなかった、なんていうときも原因を探す手がかりになりますよね。
そこで今回は「連続置換時に置換前と後の文字列を比較する方法」を紹介します。
イメージはこんな感じです。
目次
連続置換プログラムを修正する
チェックボックスを加える
前回作成した「連続置換.xls」を開きUserForm1を開きます。新たにチェックボックスとラベルを配置します。ラベルの文言は「置換前と比較する」としましょう。
サンプルコードを貼り付ける
「連続置換」ボタンをダブルクリックしてコードウィンドウを開きます。「CommandButto1_Click()」の下に以下のコードを貼り付けます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
'連続置換 Private Sub CommandButton1_Click() Dim tmp Dim Col As Long Dim Row_Start As Long Dim Row_End As Long Dim strCelldata As String Dim y As Long Dim strRep As String '置換表のワークシート Dim WS_RepList As Worksheet Set WS_RepList = ThisWorkbook.Sheets("置換表") Dim beforeConv As String Dim afterConv As String Dim y_RepList As Long '処理対象シートの処理開始行 Row_Start = 2 '最終行を取得 With ActiveSheet.UsedRange Row_End = .Rows(.Rows.Count).Row End With 'キャンセルが押された場合は処理を終了する On Error GoTo myError tmp = Application.InputBox("列を選択して下さい", "列の選択", Type:=8).Address Range(tmp).Select '選択した列番号 Col = Selection.Column If CheckBox1.Value = True Then '選択した列をコピー Selection.Copy 'コピーした列を挿入 Selection.Insert Shift:=xlToRight End If '処理対象シートのループ For y = Row_Start To Row_End strCelldata = Cells(y, Col).Value '置換表シートの処理開始行 y_RepList = 2 '置換表の置換項目がなくなるまでループする Do Until WS_RepList.Cells(y_RepList, 1).Value = "" '置換前文字列 beforeConv = WS_RepList.Cells(y_RepList, 1).Value '置換後文字列 afterConv = WS_RepList.Cells(y_RepList, 2).Value '文字列の置換え strCelldata = Replace(strCelldata, beforeConv, afterConv) '行番号を1つ増やす y_RepList = y_RepList + 1 Loop Cells(y, Col).Value = strCelldata If CheckBox1.Value = True Then '置換前の文字列と違うセルだけ色をつける With Cells(y, Col) If .Value <> .Offset(0, 1).Value Then .Interior.Color = RGB(0, 255, 0) End If End With End If Next y myError: End Sub |
プログラムコードの解説
それではプログラムコードの解説をしていきます。重要なポイントに絞って説明していきます。全体の流れは過去に掲載した記事と同じですので、参考にしてみてください。
プログラムの流れは以下のようになります。
- 処理対象列を選択する
- 処理対象列をコピーして挿入する
- 処理対象ワークシートのデータを1行ずつ取り出す
- 処理対象列のデータと挿入した列のデータを比較して違っていたらセルに色をつける
- 置換表ワークシートの数だけ置換を繰り返す
Selection.Copyメソッドで列をコピーして挿入する
Selection.Copyメソッドを使うことで選択状態の列をコピーすることができます。Selectionは選択された列や行などのオブジェクトを差します。
続いてSelection.Insertメソッドでコピーした列を挿入します。
Selectionは選択された列や行などのオブジェクトを差します。これはSelection.Copyメソッドと同じです。移動方向は列や行を挿入したときにどちらの方向に移動するかを指定します。列の場合は必ず右方向、行の場合は必ず下方向に移動します。
今回のプログラムを見てみましょう。上記のプログラムコードの28~39行目です。
まずInputBoxを出して列を選択させます。そして選択状態の列をコピーし挿入しています。
1 2 3 4 5 6 7 8 9 10 11 12 |
tmp = Application.InputBox("列を選択して下さい", "列の選択", Type:=8).Address Range(tmp).Select '選択した列番号 Col = Selection.Column If CheckBox1.Value = True Then '選択した列をコピー Selection.Copy 'コピーした列を挿入 Selection.Insert Shift:=xlToRight End If |
上記コードの65~68行目で出てくる、withステートメントとoffsetプロパティについては下記の記事で詳しく解説しています。
プログラムコードの解説は以上です。
置換前と後の文字列を比較するプログラムの動作確認
それでは実際に出来上がったプログラムを動かしてみましょう。
ワークシートの起動ボタンを押します。
フォームが表示されたら「置換前と比較する」チェックボックスにチェックを入れ、「連続置換」ボタンを押します。InputBoxが表示されたら置換対象列を選択し、OKボタンを押します。
新たにB列が挿入されました。B列には置換後のデータが入っており、置換されたセルに色がつきました。置換表のルールにない文字列のセルには色がついていません。
まとめ
いかがでしたか?今回の内容をまとめます。
- 選択した列をコピーするにはSelection.Copyメソッドを使う
- 選択した列を挿入するにはSelection.Insertメソッドを使う
それではまた~。