気ままに趣味旅行

面白いコト「拡がる/拡げる」

エクセルVBA 集計ファイルの作り方⑤

どうもhiroakiです。

先日、下記の記事を書きました。

コードの中身が分からない人のために、解説していきたいと思います。

hiroakies.hatenablog.com

hiroakies.hatenablog.com

hiroakies.hatenablog.com

hiroakies.hatenablog.com

 

 

~の場合 If~

では中核部分に入っていきます。

Ifステートメントについてです。

以下のように使います。

  1. If 条件式 Then
  2.  条件式が成立する場合の処理
  3. Else
  4.  それ以外の処理
  5. End If

では、具体的にみていきましょう。長いので、まずは、Elseまで。

  1. If WorksheetFunction.CountBlank(Worksheets(name_worksheet).Range(hanni)) = Worksheets(name_worksheet).Range(hanni).Count Then
  2. Workbooks("集計ファイル.xlsm").Worksheets("出力").Range("B" & Rows.Count).End(xlUp).Offset(1, 0) = "空白です"
  3. Workbooks("集計ファイル.xlsm").Worksheets("作業").Activate
  4. Worksheets("出力").Range("B" & Rows.Count).End(xlUp).Offset(0, -1) = name.Value
  5. wb.Close

1行目には条件式が書いてあります。

簡単にいうと、if A=B Thenの形になっています。

A=Bの部分は、『シート2班のC16:H25までの空白の数 = シート2班のC16:H25までのセルの数』となっています。

要するに、ここではコピー先が空白かどうか調べています。

WorksheetFunctionはワークシート関数というものです。これはエクセルの関数のこと。

WorksheetFunction.ワークシート関数名

とすればワークシート関数が使えるんです。便利ですね。

CountBlankは空白を数える関数。カッコ内にどこの空白を数えるか入れてあげてください。

2行目には、出力シートB2に、空白ですという文字を入れています。

3行目ではいったん、作業シートをアクティブにします。

4行目では、出力シートの空白です、と書いた隣にname変数の値を代入します。

5行目では、ワークブックを閉じます。

 

End、Offsetプロパティについて

まず、Endプロパティについてです。

オブジェクト.End(方向)で、基準となるオブジェクトの上端(xlUp)下端(xlDown)左端(xlToLeft)右端(xlToRight)を指定します。オブジェクトがアクティブセル領域にあるかないかで判断するのがポイントです。

  1. Workbooks("集計ファイル.xlsm").Worksheets("出力").Range("B" & Rows.Count).End(xlUp).Offset(1, 0) = "空白です" 
  2. Worksheets("出力").Range("B" & Rows.Count).End(xlUp).Offset(0, -1) = name.Value

ここでは基準となるオブジェクトを集計ファイル出力シートのBセルとしています。Rows.Countでは行コレクションの数を数えています。つまり、B列の最終行のセルを基準にしているということになります。その位置から、上端を指定しています。

つぎに、Offsetプロパティについてです。

オブジェクト.Offset(行,列)として、オブジェクトから、ずらした位置を指定します。

この場合は、1行下のセル、つまりB2を指定しています。そこに空白ですと書き込みます。

2行目では、先ほど、空白ですと書いたセルの隣に、ブック名を書き込みます。

 

 

今回はここまで~

今回はここまでにします。

もっと詳しく知りたい場合は、コメントなどくだされば解説したいと思います。

次回からも続きを解説していきます。

 

では。