VBAで他のエクセルファイルのデータを入力済み最終行の下に取込追記
エクセルを使っているとひとつのファイルにデータを集めて集計しますが、他のエクセルファイルのデータをセルの範囲をコピーして貼り付けるの面倒なので、何か簡単な方法がないか?と探していますよね。
西船ボウルの大会や会員データで追記してデータ入力するのですが、セルのコピーをして入力済み最終データの次を探して貼り付け作業を、エクセルVBAを使って自動化しています。
- セルの値取込「GetOpenFilename」
- 最終行取得「Rows.Count」、「End(xlUp)」
- 繰り返し処理「Do Until~Loop」
ボタンを配置してVBAコードを登録するだけで、コマンドボタンを1クリックで一瞬でハイゲームを見つけ出してくれるので、あっという間にスタンディングが終わりますよ。
最終行から自動取込追記
上の図のように1回分のボウリング成績表がありますが、2回目の成績を1回目の成績の続きで付け足していきます。
そして第3回・・・と実施した分だけ、次々と付け足していき、全部合わせて順位を並べ替えていくフリータイム形式で行うボウリング大会の成績表をエクセルVBAコードをコマンドボタンに登録します。
データの付け足し
フリータイム形式で使う総合成績表のエクセルファイルに、1回だけの成績ファイルに入っているデータをコピペするのではなく、必要なデータだけ自動的に取り込みます。
当然付け足すので、1回目の入力済み最終行の直下に付け足すようにします。
次のようにエクセルVBAコードを書くと、自動的にダイヤログが開いて取り込みたいエクセルファイルを選べるようになります。
選んだら、自動的に日付・登録番号・名前・スコアーを指定したセルに追記してくれます。
Sub 取り込み追記()
Dim opfile As Variant
opfile = Application.GetOpenFilename(“Microsoft Excelブック,*.csv?”)
If opfile <> False Then
Workbooks.Open opfile
ActiveWindow.WindowState = xlMinimized
e = Cells(Rows.Count, “A”).End(xlUp).Row
Dim i As Long
i = 1
Do Until Workbooks(2).Sheets(1).Cells(i, 1).Value = “”
Cells(i + e, 1).Value = Workbooks(2).Sheets(1).Cells(i + 1, 3).Value
Cells(i + e, 2).Value = Workbooks(2).Sheets(1).Cells(i + 1, 12).Value
Cells(i + e, 3).Value = Workbooks(2).Sheets(1).Cells(i + 1, 14).Value
Cells(i + e, 4).Value = Workbooks(2).Sheets(1).Cells(i + 1, 22).Value
i = i + 1
Loop
Workbooks(2).Close
End If
End Sub
では1行目から解説じゃ
- 「取り込み追記」というタイトルでマクロ宣言
- 変数「opfile」という名前で宣言し、変数は文字でも数字でも入る型とする
- 変数「opfile」で、ダイアログボックスを開きCSVファイルを選択させる
- もしダイアログボックスを開いてもファイル選択しなかったらキャンセル
- CSVファイルを選んだら選択したファイルを画面サイズを最小化する
- 格納値を「e」として、セルA列の入力済み最終行の次のセルとする
- 変数「i」という名前で宣言し、変数は整数型とする
- 変数「i」は整数「1」とする
- 選んだファイルの1番目のシートのセル「i行目のA列」が空欄だったら
- 「i行目の入力済み最終行の次のA列」に開いたファイルの1つ目のシートのセル「i行目+1のC列」の値を追記する
- 「i行目の入力済み最終行の次のB列」←i行目+1のL列」の値
- 「i行目の入力済み最終行の次のC列」←i行目+1のN列」の値
- 「i行目の入力済み最終行の次のD列」←i行目+1のV列」の値
- 変数「i」は「i」+1にして
- 空欄になるまで繰り返す
- 開いたファイルを閉じる
- IFステートメント終了
- マクロ記録終了
ポイントは、入力済み最終行を探す
を書くこと。
書き写すセルの場所に「変数i」に「変数e」を付け加えることで、
取り込んだデータが次々と書き足されていくということです。
2つのエクセルファイルを開いた状態で、コピーしてファイルを切り換えて、貼り付けて・・・
こんな面倒な作業が、1クリックで終了じゃ~!
ボウリング成績表で必須のVBAコード
エクセルのボタンの配置方法やリボンツールバーの「開発」設定がまだの場合、この機能使えないので設定から始めましょう~
西船ボウルで使用しているエクセルで作っているリーグ成績表(スタンディング)で、必ず使っているVBAコードです。
実際にはワークシート上にコマンドボタンを配置せず、専用の入力フォームも(ユーザーフォーム)作成してフォーム上にボタンなどを配置しています。
成績表作成でよく使う便利機能
エクセルファイル操作の便利機能