データの取り込みと集計 (手作業での操作例と、それをVBAで。)

■ Excel豆知識53





53-9 何らかの抽出を行って取り込むデータを一度にまとめて取り込む(VBA)
53-4で、「①と②について、AとBの両方のタイミングでの取込みをVBAで考えてみることにします。」と
やり始めて、やっと②のデータをBのタイミングで取り込む所まで来ました。(③は後から追加しました。)

コードの内容は今までの3種類のパターンで利用したものの組合せです。コードにコメントを入れてみま
した。

最後にシートにボタンを配置して、このマクロを登録したいと思います。
Option Explicit
'はじめてこのコードを実行する、という設定です。他の配慮はしていません。
'1回だけの処理の想定なので、ピボットテーブルはデータ取込後に手作業で作るつもりです。

'***抽出必要なデータをまとめて1回で***
Sub データ取込()
    Dim FName As String
    Dim DataBk As Workbook
    Dim LastRow As Long
    Dim i As Long
    Dim myCriteria As Range, myCopyTo As Range

    '抽出条件範囲を変数に入れる
    Set myCriteria = Worksheets("条件").Range("A1:A2")
    '抽出先の項目範囲を変数に入れる
    Set myCopyTo = Worksheets("取込用").Range("A1:E1")

  'ファイル名を変数に取得
    FName = Dir(ThisWorkbook.Path & "\CSV保存用\*.CSV")
  'ファイル名書込行の初期値
    i = 2
  
  '画面の更新を止める
    Application.ScreenUpdating = False

  '取得したファイル名がある間作業を繰り返す
    Do While FName <> ""
    'CSVファイルを開く
        Workbooks.Open ThisWorkbook.Path & "\CSV保存用\" & FName
    '開いたブックを変数に入れる
        Set DataBk = ActiveWorkbook

    'フィルタオプションで抽出
        DataBk.Worksheets(1).Range("A1").CurrentRegion.AdvancedFilter _
             Action:=xlFilterCopy, CriteriaRange:=myCriteria, CopyToRange:=myCopyTo, Unique:=False

        'CSVファイルを閉じる
        DataBk.Close SaveChanges:=False

        '(CSVファイルを閉じたので、ボタンのあるマクロブックがアクティブになるので、
        ' シートにブックの指定はしていない。)
        With Worksheets("Data")
      '「Data」シートの最終行を取得
            LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
            '「Data」シートに、「取込用」シートの項目行を除いたデータを追加
            Worksheets("取込用").Range("A1").CurrentRegion.Offset(1).Copy _
                                                Destination:=.Cells(LastRow + 1, 1)
        End With

        '「取込用」シートのデータをクリア
        Worksheets("取込用").Range("A1").CurrentRegion.Offset(1).Clear

    '取り込んだファイル名をセルに入力
        Worksheets("取込ファイル名").Cells(i, 1).Value = FName
    '書込行のカウントアップ
        i = i + 1

    '次のファイル名を取得
        FName = Dir()
    Loop

    '画面の更新を戻す
    Application.ScreenUpdating = True
    MsgBox "取込が終わりました。"
End Sub


豆知識34-5では、ActiveX コントロールのボタンにマクロを登録する方法でやってみましたが、今回は
フォーム コントロールのボタンに登録してみようと思います。

なお、フォーム コントロール、および ActiveX コントロールの違いなどに関してはMicrosoftのこちら
の記事「ワークシート内のフォーム、フォーム コントロール、および ActiveX コントロールの概要」が参考になり
ます。(この記事で久々に「データ フォーム」を目にしました。この記事はExcel2010対象なので、どこにボタンが
あるのかなあと思ったら、リボンの中にはなくて、クイックアクセスツールバーに自分で追加しなくてはならないよう
です。でも、Excel2013のこれに関する記事もありましたので、これからも使えそうです。)


では、フォーム コントロールのボタンにマクロを登録する方法を。

「開発」タブの「挿入」ボタンをクリックすると、フォームコントロールとActiveXコントロールの各コ
ントロールのボタンが表示されます。

フォームコントロールの「ボタン」をクリックして、

マウスで適当な大きさの四角を作って、

マウスをはなすと、下図の「マクロの登録」ダイアログボックスが出ます。下の方の「マクロの保存先」
が、たぶん最初は「開いているすべてのブック」になっていると思います。そうすると、登録したいマ
クロの他にも、個人用マクロブックやその他のブックにあるマクロも全部上のボックスに表示されて、
選ぶのが大変です。なので、ここでは「作業中のブック」を選択しました。なので、このブックにある
「データ取込」だけが表示されています。

登録したい「データ取込」を選択して、「OK」とします。

ボタンの表示が「ボタン1」のままでは何を登録しているのかわかりませんので、ボタンのところで右ク
リックして、「テキストの編集」をクリックします。

ボタンの文字を適当に変更して、ボタン以外のセルなどを選択すると下図のようになります。

ボタンにカーソルを当てると、下図のようなマウスポインタになりますので、クリックしてみます。

登録したマクロが実行され、メッセージが表示されました。もちろんデータもちゃんと取り込まれています。

フォームコントロールのボタンは色を変えたり出来ませんので、面白みに欠けますが、シートとの相性は
ActiveXコントロールのボタンより良いと言われていますので、今回はこちらのボタンを使用しました。


次は、CSVファイルをExcelで開くのではなく、「外部データの取込み」を利用してデータを取得するやり
方をしてみます。
ページTOPへ