検索
連載

業務効率化の道具箱(10)VBAでさらに高機能な自動集計アプリを作ってみよう山浦恒央の“くみこみ”な話(163)(4/4 ページ)

ソフトウェア開発にとどまらない、PCを使う全ての人が対象となるシリーズ「業務効率化の道具箱」。第10回は、第9回で紹介したVBAによる自動集計アプリのバージョンアップ版を作ってみる。

Share
Tweet
LINE
Hatena
前のページへ |       
※本記事はアフィリエイトプログラムによる収益を得ています

3.4 プログラムの作成

 最後に、プログラムを入れます(リスト1)。今回は、以下の動作をするものです。

  1. ファイルダイアログを開き、CSVファイルを開く
  2. CSVファイルを選択すると、データシートに選択したデータのA列からD列までのデータをコピペする(D列より大きい列のデータは考慮していない)
  3. E1セルに「国語の平均点」、E2セルに「国語の平均点未満の生徒数」という文字列を表示する
  4. 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
リスト1 自動集計を実行するプログラム

3.5 実行結果の確認

 最後に、作成した自動集計アプリの実行結果を確認します。

3.5.1 プログラムを実行する

 タイトルシートにあるボタンをクリックし、プログラムを実行しましょう(図14)。

図14 プログラム実行ボタン
図14 プログラム実行ボタン

3.5.2 ファイルの選択

 図14のボタンを選択すると、プログラムを実行し、ファイルダイアログを表示します(図15)。

図15 ファイルダイアログの様子
図15 ファイルダイアログの様子

 図15の画面で、準備で作成した「集計データ.csv」を選択し、「開く(O)」を選択します。

3.5.3 集計結果の確認

 データシートにある集計結果を確認します(図16)。

図16 集計結果の様子
図16 集計結果の様子[クリックで拡大]

 図16に示す通り、「データがコピペできている」「国語の平均点」「国語の平均点未満の生徒数」「散布図の描画」が表示できればアプリは完成です。

4.終わりに

 今回は、前回に引き続き、VBAを使った自作ツールの作成例を紹介しました。自分の業務に合わせて自作ツールが作成できると、効率的に業務ができます。ぜひ、業務効率化の道具箱に入れていただき、作業次第では自分でツールを作ることも検討していただければと思います。

山浦先生の書籍が発売中です!

 前々シリーズ「ソフトウェア技術者のためのバグ百科事典」を大幅に加筆、修正した山浦恒央先生の書籍「ソフトウェア技術者のためのバグ検出テキスト」が日科技連出版から好評発売中です。連載でも取り上げた、「要求仕様書のバグ」「実装抜けのバグ」「テスト業務のバグ」など、バグを36種類に分類して解説しています。囲碁や将棋であれば、「相掛かり」「矢倉」「四間飛車」「藤井システム」のような戦法を網羅した内容になっています。

 前著「ソフトウェア技術者のためのバグ検出ドリル」(2019年11月刊行)も好評発売中です。実際にバグを含む要求仕様書、設計書、コーディング、デバッグ、保守を具体的に取り上げ、練習問題として31問を出題しました。同書は、囲碁や将棋における「次の一手」的な問題であり、ピンポイントの場面を取り上げ、実践力を鍛えることを目的としています。

 両書とも興味のある方は、Amazon.comや書店でチェックしてください!

【 筆者紹介 】
山浦 恒央(やまうら つねお)

東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)


1977年、日立ソフトウェアエンジニアリングに入社、2006年より、東海大学情報理工学部ソフトウェア開発工学科助教授、2007年より、同大学大学院組込み技術研究科准教授、2016年より非常勤講師。

主な著書・訳書は、「Advances in Computers」 (Academic Press社、共著)、「ピープルウエア 第2版」「ソフトウェアテスト技法」「実践的プログラムテスト入門」「デスマーチ 第2版」「ソフトウエア開発プロフェッショナル」(以上、日経BP社、共訳)、「ソフトウエア開発 55の真実と10のウソ」「初めて学ぶソフトウエアメトリクス」(以上、日経BP社、翻訳)。


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る