Top

hiroyuki.tank.support.site

簡単!マクロ講座

第41回〜あてな-チェックを探せ!〜


 シート「データ」のチェック欄に「レ」がある人のみを印刷するためにはまず「レ」が付いている行を探さなければなりません。
 人が探すときはどうするでしょうか?普通は上から順にひとつづつチェック欄を見ていってあったらその行を書き写すという具合にやると思います。
 プログラムも同じ考え方で動きます。今回はちょっと手強いかもしれませんからゆっくり見ていってください。まず手順を考えてみましょう。

【手順】
1.シート「データ」のA列の2行目を見る
2.もし「レ」があったら
3.その行をコピーして入力シートの2行目に貼り付ける
4.もし「レ」がなかったら
5.次の行を見る
6.2から繰り返し(ループ)

 人が考えることとちっとも違いません。でもこれをコンピュータにわかる言葉にするのにちょっとこつがいります。今回はマクロの自動記録ではできませんので一つ一つコードを書いていきましょう。
 エクセルファイル「あてな.xls」を開いてVBEを起動してください。ここらでファイルがなくなっている人もいるかもしれませんので第40回までのコードを記述しておきます。ご利用下さい。

  Sub Macro1()
   Sheets("データ").Select
   no = Sheets("メイン").Range("c7") 'ここは第37回で追加しました
   Range(Cells(no + 1, 2), Cells(no + 10, 6)).Select 'ここは第38回で変更しました
   Selection.Copy
   Sheets("入力").Select
   Range("A2").Select
   ActiveSheet.Paste
   Application.CutCopyMode = False
   Sheets("様式").Select
   ActiveWindow.SelectedSheets.PrintPreview
  End Sub

 それではこの後ろに新しいプログラムを書いていきましょう。プログラム名を「Macro2」とします。
  Sub Macro1() の End Sub
の後に「Sub Macro2()」と入力し「Enter」キーを押してください。自動で「End Sub」が入ります。

【手順1】シート「データ」のA列の2行目を見る
  Sheets("データ").Select
  Range("A2").Select

となります。Sub Macro2()の次の行に書いてください。
 でもこれでは3行目以降は使えません。第38回のRangeとCellsを思い出してください。いろいろなセルを見たいときはRangeではなくCellsを使います。
  Sheets("データ").Select
  Cells(datagyo, 1).Select

とすると変数「datagyo」を変えれば2行目から何万行目でも対応できます。でも最初は2行目ですから,
  datagyo=2
  Sheets("データ").Select
  Cells(datagyo, 1).Select

としておかないと最初に2行目を見てくれません。
 datagyoとは私が勝手につけました。データの行だからdatagyoです。

【手順2】もし「レ」があったら
  datagyo=2
  Sheets("データ").Select
  Cells(datagyo, 1).Select
  If Cells(datagyo, 1) = "レ" Then
  End If

となります。もし○○だったらのIF構文です。第12回で出てきました。

【手順3】その行をコピーして入力シートの2行目に貼り付ける
 もし○○だったらの条件が成就している場合の処理です。これはMacro1のコードを利用しましょう。
 Macro1の次の部分
  Range(Cells(no + 1, 2), Cells(no + 10, 6)).Select
  Selection.Copy
  Sheets("入力").Select
  Range("A2").Select
  ActiveSheet.Paste
  Application.CutCopyMode = False

をMacro2の「If Cells(datagyo, 1) = "レ" Then」の次の行にコピー貼り付けします。

 もしチェックがあったらという条件が成就した行を範囲指定するためには
  Range(Cells(no + 1, 2), Cells(no + 10, 6)).Select
を次のように修正します。
  Range(Cells(datagyo, 2), Cells(datagyo, 6)).Select

【手順4】もし「レ」がなかったら
 これは「End If」以下になりますからとくになにもしなくてもいいです。

 手順5と6が問題です。次の行を見ようと思ったら変数datagyoを変えなければなりませんし,繰り返しとかあります。だんだん難しくなってきました。

| hiroyuki.tank.support.site.Top | このページのTop | マクロ講座目次 | 前回 | 次回 |