気ままに趣味旅行

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

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

どうもhiroakiです。

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

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

hiroakies.hatenablog.com

hiroakies.hatenablog.com

hiroakies.hatenablog.com

hiroakies.hatenablog.com

hiroakies.hatenablog.com

 

 

If~  Else以降について

Else以降は、シート2班のC16:H25までのセル内が空白でない場合の処理です。

  1. Else
  2. Worksheets(name_worksheet).Range(hanni).Copy
  3. Workbooks("集計ファイル.xlsm").Worksheets("出力").Range("B" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial
  4. Workbooks("集計ファイル.xlsm").Worksheets("出力").Range("B" & Rows.Count).End(xlUp).Offset(0, -1) = name.Value
  5. n = -1
  6. Do Until n = 1
  7. If Workbooks("集計ファイル.xlsm").Worksheets("出力").Range("B" & Rows.Count).End(xlUp).Offset(n, -1) = "" Then
  8. Workbooks("集計ファイル.xlsm").Worksheets("出力").Range("B" & Rows.Count).End(xlUp).Offset(n, -1) = name.Value
  9. n = n - 1
  10. Else
  11. n = 1
  12. End If
  13. Loop
  14. wb.Close
  15. End If
  16. Next
  17. End Sub

2行目からは、シート2班のC16:H25までのセルをコピーして、出力シートに貼り付けています。PasteSpecialメソッドは、形式を指定して貼り付けるという意味です。これがないと、結合セルなどをコピペできません。

4行目では、貼り付けた隣にファイル名をかき込みます。

ちょっと飛ばして、16行目からワークブックを閉じ、End ifでifの処理を終え、NextでForNextステートメントの処理を終え、End Subでマクロの処理を終えます。

では、飛ばした6~14行について説明していきます。

 

繰り返し処理 Do Until 

6~14行の処理がないと下の画像のような処理となります。

f:id:hiroakies4463:20200307222133j:plain

このA列の空いてるセルにファイル名を入れていきたいと思います。

まず、どう考えるかというと、ファイル名を入れたセルの上のセルが空白だったら、そこにも同様のファイル名を入れる、と考えます。

この時、繰り返し処理を行う必要があります。

今回はDo Untilステートメントを使います。

  1. Do Until 条件式
  2.  条件式が成立するまで繰り返す処理
  3. Loop

では、みていきます。

ここではOffsetプロパティの行を指定する位置に変数nを入れておきます。そして、この変数nをスイッチのような役割として用います。

はじめはn=-1としておいて、中に囲ったif条件式が成立しなくなったらn=1として処理を終了させるというものです。

  1. n = -1
  2. Do Until n = 1
  3. If Workbooks("集計ファイル.xlsm").Worksheets("出力").Range("B" & Rows.Count).End(xlUp).Offset(n, -1) = "" Then
  4. Workbooks("集計ファイル.xlsm").Worksheets("出力").Range("B" & Rows.Count).End(xlUp).Offset(n, -1) = name.Value
  5. n = n - 1
  6. Else
  7. n = 1
  8. End If
  9. Loop

nはA列の位置を表します。n=-1から始まり、-2、-3と処理が続く限り、上部に空白がないか調べていきます。

空白がなくなると、n=1として処理を止めます。

 

最後に注意点~

・フォルダのアルファベットは大文字でも小文字でも同様に取得できます。今回の例でいうと、a社でもA社でも可です。ただ、作業シートA2欄にいれた名前で出力シートに表示されます。

一方、半角全角ではフォルダ名は取得できませんので注意です。

コピーする範囲(今回はC16:H25でした)も半角全角どちらでも同じように検索してくれます。

・シート名(今回は2班でした)は半角、全角が違うと検索できません。検索できるようにするには、新たなコードを加える必要があります。

シート名はこちらで指定して回収するなどの工夫が必要でしょう。

・注意点ですが、結合セルのコピー貼り付けの際、空白箇所をコピーして貼り付ける、と処理が途中で進まなくなる場合があります。その場合はEscキーで処理を止める必要があります。

 

以上~

以上になります。

お疲れ様でした。途中解説が分かりにくい部分もあったかもしれませんが、今回はここまでにしたいと思います。変更点などがあれば随時内容を入れ換えますのでチェックしておいてください。

他にも有用なものができたら、作り方含めて公表しますので、読んでいただければと思います。質問等はお気軽にツイッターへどうぞ。

 

では。