業務効率化の道具箱(10)VBAでさらに高機能な自動集計アプリを作ってみよう:山浦恒央の“くみこみ”な話(163)(4/4 ページ)
ソフトウェア開発にとどまらない、PCを使う全ての人が対象となるシリーズ「業務効率化の道具箱」。第10回は、第9回で紹介したVBAによる自動集計アプリのバージョンアップ版を作ってみる。
3.4 プログラムの作成
最後に、プログラムを入れます(リスト1)。今回は、以下の動作をするものです。
- ファイルダイアログを開き、CSVファイルを開く
- CSVファイルを選択すると、データシートに選択したデータのA列からD列までのデータをコピペする(D列より大きい列のデータは考慮していない)
- E1セルに「国語の平均点」、E2セルに「国語の平均点未満の生徒数」という文字列を表示する
- F1セルに国語の平均点、F2セルに国語の平均点未満の生徒数の数を算出し、結果を表示する
'自動集計を実行するプログラム Option Explicit '集計ボタンを押したときに動作する Sub ボタン1_Click() Dim dataSheet As Worksheet 'ベースのデータシート Dim copyWb As Workbook '外部データのワークブック Dim copySheet As Worksheet '自動集計アプリのワークシート Dim rowMax As Long '最大行数 Dim File As Variant Set dataSheet = Sheets("データシート") 'CSVファイルを開く File = Application.GetOpenFilename( _ FileFilter:="CSVファイル,*.csv,全てのファイル,*.*", _ FilterIndex:=1) 'キャンセルを押した場合はプログラム終了 If File = False Then ' MsgBox "プログラムを終了します" Exit Sub End If '外部データのファイルを開く Set copyWb = Workbooks.Open(Filename:=File) '外部データのシートを設定 Set copySheet = copyWb.Worksheets(1) '外部データの最大列数を取得 rowMax = copySheet.Cells(Rows.count, 1).End(xlUp).Row 'A1からD列の最大行数分のデータをコピーする copySheet.Range("A1:D" & rowMax).Copy '自動集計アプリにデータを貼り付ける dataSheet.Cells(1, 1).PasteSpecial xlPasteValues ' 開いた外部データをクローズする dataSheet.Range("E1").Value = "国語の平均点" dataSheet.Range("E2").Value = "国語の平均点未満の生徒数" Dim avg As Double Dim score As Range Dim scoreRange As Range '点数データの範囲を設定 Set scoreRange = Range("B2:B" & rowMax) '平均点を算出する avg = Application.WorksheetFunction.Average(scoreRange) '平均点をF2セルに表示する dataSheet.Range("F1").Value = avg '平均点未満の人数をカウントする Dim count As Long count = 0 For Each score In scoreRange If score.Value < avg Then count = count + 1 End If Next score 'F3セルに平均点未満の人数を表示する dataSheet.Range("F2").Value = count End Sub
3.5 実行結果の確認
最後に、作成した自動集計アプリの実行結果を確認します。
3.5.1 プログラムを実行する
タイトルシートにあるボタンをクリックし、プログラムを実行しましょう(図14)。
3.5.2 ファイルの選択
図14のボタンを選択すると、プログラムを実行し、ファイルダイアログを表示します(図15)。
図15の画面で、準備で作成した「集計データ.csv」を選択し、「開く(O)」を選択します。
3.5.3 集計結果の確認
データシートにある集計結果を確認します(図16)。
図16に示す通り、「データがコピペできている」「国語の平均点」「国語の平均点未満の生徒数」「散布図の描画」が表示できればアプリは完成です。
4.終わりに
今回は、前回に引き続き、VBAを使った自作ツールの作成例を紹介しました。自分の業務に合わせて自作ツールが作成できると、効率的に業務ができます。ぜひ、業務効率化の道具箱に入れていただき、作業次第では自分でツールを作ることも検討していただければと思います。
山浦先生の書籍が発売中です!
前々シリーズ「ソフトウェア技術者のためのバグ百科事典」を大幅に加筆、修正した山浦恒央先生の書籍「ソフトウェア技術者のためのバグ検出テキスト」が日科技連出版から好評発売中です。連載でも取り上げた、「要求仕様書のバグ」「実装抜けのバグ」「テスト業務のバグ」など、バグを36種類に分類して解説しています。囲碁や将棋であれば、「相掛かり」「矢倉」「四間飛車」「藤井システム」のような戦法を網羅した内容になっています。
前著「ソフトウェア技術者のためのバグ検出ドリル」(2019年11月刊行)も好評発売中です。実際にバグを含む要求仕様書、設計書、コーディング、デバッグ、保守を具体的に取り上げ、練習問題として31問を出題しました。同書は、囲碁や将棋における「次の一手」的な問題であり、ピンポイントの場面を取り上げ、実践力を鍛えることを目的としています。
両書とも興味のある方は、Amazon.comや書店でチェックしてください!
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- ≫連載「山浦恒央の“くみこみ”な話」バックナンバー
- 業務効率化の道具箱(9)VBAで自動集計アプリを作ってみよう
ソフトウェア開発にとどまらない、PCを使う全ての人が対象となるシリーズ「業務効率化の道具箱」。第9回は、VBAによる自作ツール作成の例として自動集計アプリを作ってみる。 - 業務効率化の道具箱(8)ツールがないならVBAで作ってみよう
ソフトウェア開発にとどまらない、PCを使う全ての人が対象となるシリーズ「業務効率化の道具箱」。第8回は、自作ツール作成の第一歩としてVBAを紹介する。 - 業務効率化の道具箱(7)ターミナルソフト「RLogin」を使ってみよう
ソフトウェア開発にとどまらない、PCを使う全ての人が対象となるシリーズ「業務効率化の道具箱」。第7回は、ターミナルソフトである「RLogin」の導入方法や使い方を紹介する。 - 業務効率化の道具箱(6)Google Testを使ってみよう【その2】
ソフトウェア開発にとどまらない、PCを使う全ての人が対象となるシリーズ「業務効率化の道具箱」。第6回は、前回導入した「Google Test」の使い方と、「アサーション」「パス・カバレッジ」によるテストの方法を紹介する。 - 業務効率化の道具箱(5)Google Testを使ってみよう【その1】
ソフトウェア開発にとどまらない、PCを使う全ての人が対象となるシリーズ「業務効率化の道具箱」。第5回は、単体テストで役立つフリーのツールである「Google Test」と「gcov/lcov」を紹介する。