全シートの 0 のみを一括で消す方法 − GoGoマクロ!のWebサイト

HOME > レッスン > 全シート操作



今回の課題は、シートの中の「指定したあるデータだけを削除する方法」 です。これを前々回からやっている「全シート操作」シリーズの関連課題 として、今回もやってみたいと思います。

で、これも色々と方法はあるかと思いますが例の如く初心者向けの当講座 では最も簡単な方法にてご紹介します。


1)
それでは、早速いつものようにマクロの記録を使って
その土台となるプログラムから作っていきます。
────────────────────────────+
1.エクセルを起動させます。(空のエクセルを立ち上げてください)

2.まず、マクロの記録を開始する前に、テスト用のデータを
 作っておきますので、以下のテキスト6行をコピーして、
 そのまま[Sheet1]のセルA1 の位置に貼り付けてください。


0
1
2
0
1
2


3.それでは、マクロの記録を開始します。
 [開発]タブの[コード]で [マクロの記録]をクリック →
「マクロの記録」画面が出るので、そのまま[OK]をクリック。

4.まず、シート全体を選択状態にしますので、シートの一番
 左上の灰色の部分(列名Aの左、且つ 行番号1の上の部分)
 をクリックしてください。

5.そうしたら、[ホーム]タブの[編集]の中にある「検索と選択」
 を押して、表示メニューの上から2番目「置換(R)...」を
 クリックします。(慣れた方はシュートカット等使って操作
 しても全然構いません。)

6.次に、表示画面で以下の操作にてテータの置換をします。

 「検索と置換」画面の「置換」タブで、「検索する文字列(N)」
 の入力欄に数字の 0 を、その下の「置換後の文字列(E)」欄に
  a をそれぞれ入力する→下の「すべて置換(A)」ボタンを
 クリック→確認画面の「OK」→「閉じる」をクリック。

7.最後に、マクロの記録を終了させます。
 [開発]タブの[コード]で [■記録終了] をクリック。
────────────────────────────+


2)
では、いま作ったプログラムの中身をのぞいてみます。
────────────────────────────+
1.まず、いつもの様にプログラムの画面を表示させます。
 [開発]タブの[コード]で [Visual Basic]をクリック。

2.この画面の左上半分の[+標準モジュール]という所の+の部分
 をクリックすると、そのすぐ下に[Module1]と表示されるので、
 その[Module1]をダブルクリックします。
────────────────────────────+


++++++++++++++++++++++++++++─
Sub Macro1()
'
  Cells.Select
  Selection.Replace What:="0", Replacement:="a", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
End Sub
++++++++++++++++++++++++++++─


ちょっと長い構文にはなっていますが、これだけ見ても、

 この中の "0" の部分が置換前の文字列で、
 その後の "a" の部分が置換後の文字列である

という事は誰でも容易に想像がつくだろうと思います。(その他の難しい 部分を気にする必要は(ネットで調べる必要も理解する必要も)まったく ありません!)

いま自動記録した上記のプログラムは、エクセルで通常にデータ置換をする 場合の操作だけのものですから、これだけならわざわざマクロにする必要も ないわけですが、例の如くこれを使って例題のマクロを作っていきます。


3)
それでは、このプログラムに手を加えていきます。
────────────────────────────+
1.まず、先ほどわかりやすくするために "a" を入れておいた
 部分を今回の仕様通りに直しておきますので、

  Selection.Replace What:="0", Replacement:="a", LookAt:=xlPart, _

 この1行を以下に修正します。

  Selection.Replace What:="0", Replacement:="", LookAt:=xlPart, _

 ( "a" の a の1文字を削除するだけです。)

2.次に、いつものループ処理の基本形

  For i = 1 To 10
    「処理」
  Next i

 を使って、この置換操作を繰り返す為の処理に修正します。

  For i = 1 To 10
    Cells.Select
    Selection.Replace What:="0", Replacement:="", LookAt:=xlPart, _
      SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
      ReplaceFormat:=False
  Next i

 (ループの中身となる4行はいつものようにTABキーを
  押して 見やすく字下げを行っておいてください。)

3.次に、そのループのFor文

    For i = 1 To 10

 を、以下に修正します。

    For i = 1 To Sheets.Count

4.最後に、そのFor文のすぐ下に下記の1行を追加します。

    Sheets(i).Select

────────────────────────────+

修正した後のプログラム(Macro1)は下記の様になります。

++++++++++++++++++++++++++++─
Sub Macro1()
'
  For i = 1 To Sheets.Count
    Sheets(i).Select
    Cells.Select
    Selection.Replace What:="0", Replacement:="", LookAt:=xlPart, _
      SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
      ReplaceFormat:=False
  Next i
End Sub
++++++++++++++++++++++++++++─


まず、1.での修正は置換前後の文字列の指定の仕方の練習です。
"a" → "" で 「aをブランクにする」という事ですから、置換前後の文字 の指定の仕方はこんな具合です。(至って簡単ですね。)

あと、2.以降の修正は、このところほぼ毎回同じ事をやっているだけなので
特に説明は割愛しますが、ここのポイントは シートの操作方法 の
Sheets.Count と Sheets(i).Select
この2つです。


4)
それでは、さっそく実行してみましょう。
────────────────────────────+
1.エクセルの画面に戻って、シート[Sheet1]を開いてください。

2.まず、マクロを実行する前に、テスト用のデータとして
 以下のテキスト6行をコピーして、沢山の位置にベタベタと
 適当に何度も貼り付けていってみてください。


0
1
2
0
1
2


3.では、実行します。
 [ツール(T)] → [マクロ(M)] → [マクロ(M)...] → マクロ画面が
 出るので、そのまま[実行]をクリック。

4.シート[Sheet1]を開いて、数字の0のセルがなくなっていることを
 確認してください。

5.では、ついでにもう一度実行してみたいと思いますが、
 今度は、すべてのシートにベタベタと(現在シートが1つしかない
 場合は、適当に複数のシートを新規作成してー)貼り付けていって
 ください。

6.では、再び実行します。
 [ツール(T)] → [マクロ(M)] → [マクロ(M)...] → マクロ画面が
 出るので、そのまま[実行]をクリック。
────────────────────────────+

実行した結果、
すべてのシートを見て 0 が無くなっている事が確認できればOKです。

これで、今回の作成課題である「シートにある 0 のみを全部のシートで一括 して消したい。」とのマクロが完成したということになります。


あと、これだけではちょっと物足りない気もしますので、この応用例を少々 続けてやってみいたいと思います。


5)
では、またプログラムに少々手を加えます。
────────────────────────────+
1.再びプログラムの画面を表示させください。

2.置換する前後の文字列を指定する部分の

  Selection.Replace What:="0", Replacement:="", LookAt:=xlPart, _

 を、下記に修正します。

  Selection.Replace What:="", Replacement:="0", LookAt:=xlPart, _

 ("0" と "" を入れ替えただけです。)
────────────────────────────+

修正した後のプログラムは下記の様になります。

++++++++++++++++++++++++++++─
Sub Macro1()
'
  For i = 1 To Sheets.Count
    Sheets(i).Select
    Cells.Select
    Selection.Replace What:="", Replacement:="0", LookAt:=xlPart, _
      SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
      ReplaceFormat:=False
  Next i
End Sub
++++++++++++++++++++++++++++─


6)
それでは、再び実行してみましょう。
────────────────────────────+
1.エクセルの画面に戻って、

2.今度の場合はテストデータは何でもいいですので、先ほど
 実行した時のそのままで、

3.では、実行します。
 [ツール(T)] → [マクロ(M)] → [マクロ(M)...] → マクロ画面が
 出るので、そのまま[実行]をクリック。
────────────────────────────+

実行した結果、今度はすべてのシートのデータのある範囲で空欄だった すべてのセルが、数字の 0 で埋め尽くされていればOKということに なります。(データのある範囲とは、縦横で見た四角い範囲です。)

これで、「データを一括で消す」や「空欄を一括で埋める」や、はたまた 「あるデータを別のデータで一括で置換する」といったことが、ブックに ある全てのシートに対して一括でできるようになったかと思います。

非常に簡単な修正でしたが、これならシート数が数十や数百件ある場合 でも もう一発ですね。色々応用もできるかと思います。


なお、今回用いたエクセルの置換機能というのは、直前の選択範囲が対象 となりますから、置換の範囲を限定したい場合であれば上記プログラムの  Cells.Select の行を、例えば、

 Range("C5:E15").Select 'C5からE15のセル範囲
 Columns("A:F").Select 'A列からF列までの範囲
 Rows("2:10").Select '2行目から10行目までの範囲

などなどに変えればよいだけですし、

また、置換機能には色々なオプションの設定もできますから、それらを使 って記録したマクロと元のマクロとの違いを(違う部分だけを)ちょっと 比べてみるのもよいかと思います。

更に、置換前の文字列指定にはワイルドカード(*)も使えますから、色々 な条件も付けられるかと思いますので、腕に自信のある方は色々応用範囲 広げてチャレンジしてみてください。


今回はこれで終了です。



NEXT >>
CSVファイルからの連続取り込み
VBA高速化ランキング【CSVデータ取込】



 

▼一から自分で作れるマクロ講座の登録はこちら((無料))  まぐまぐ
Go!Go! エクセルマクロをはじめよう! (マガジンID:0000135169)   
メルマガ登録
  メールアドレス: