2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【VBA】VBAメモまとめ

Posted at

はじめに

この記事は実務で使った技法を、そこら中からまとめたものになります(書籍・有料情報等は除く)。

技法の参考元は各項目の末尾に記載しております。
詳しい解説を見たい方は、是非とも参考元をご覧ください。
※一部「YouTube」へと飛ぶリンクがあるため、音量にご注意ください。

随時更新する予定です。

情報の誤り・不足等はコメント欄にてご指摘頂けますと幸いです。

①最終行を取得したい

【使用例】

  • 行の終着点が分からない場合
  • データ一覧の最後尾を知りたい場合
  • etc

【コード】

Test.xlsm
'A列の最終行を取得後、「Ctrl + ↑」でデータの最後尾を選択するイメージ
    Cells(Rows.Count, 1).End(xlUp).Select

【参考元】


②最終列を取得したい

【使用例】

  • 列の終着点が分からない場合
  • etc

【コード】

Test.xlsm
'1行目の最終列を取得後、「Ctrl + ←」でデータの最後尾を選択するイメージ
    Cells(1, Columns.Count).End(xlToLeft).Select

【参考元】


③変数などの定義情報へジャンプしたい

【使用例】

  • 変数の定義情報を探すのが面倒なとき
  • etc

【使い方】

『Shift + F2』 でジャンプできる
※元の行に戻りたいときは 『Ctrl + Shift + F2』

【参考元】


④対象列の値が「〇〇」の場合、別列の値末尾に「〇」を付与する(ループ処理)

【使用例】

  • 特定のデータを判別する場合
  • etc

【コード】

Test.xlsm
'7列目の値が「〇〇」の場合、1列目の値末尾に「〇」を付与するイメージ
    Dim i As Long
    Dim a As Long
    
    '1列目の最終行を取得
    a = Cells(Rows.Count, 1).End(xlUp).Row
    
    '先頭行から最終行までループ
    For i = 1 To a
        If Cells(i, 7) = "〇〇" Then
            Cells(i, 1).Value = Cells(i, 1).Value & "〇"
        End If
    Next i

【参考元】


⑤指定フォルダ内のファイルを順次開き、処理を行う(FileSystemObject)

【使用例】

  • フォルダに対して操作を行う場合
  • FileSystemObjectを使用
  • etc

【参考元】


⑥想定外エラー発生時に対応する処理を作りたい

【使用例】

  • 想定されたエラー以外の処理が発生する場合(実装上必須となる)
  • etc

【参考元】


➆セルの文字色を変更したい場合

【使用例】

  • エラー発生時、画面に『NG』を表示し、強調するために赤色にする
  • etc

【参考元】


⑧外部設計時のポイント

【ポイント】

①システム仕様記載の際、まずは処理概要を文字で表現してみる(あくまでユーザーから視認できる箇所を)。

②文字で表現してみて、それだけでは分かりにくいものにはついては、その機能に特化した図を書いてみる(詳しく書く必要はなく、ポンチ図でOK)。

③プログラム的な記載は内部設計の領域になるため、そこまで詳しく記載しない。

④システム概要、システムフロー図、開発方針、前提制約事項、入出力ファイル情報、入出力ファイル項目定義、メッセージ定義などを作成。

⑤FileSystemObjectを使用してフォルダ内のファイル一覧を処理する場合、フォルダ内をソート(名前の昇順)などの対応を考慮すること。
 ※上記オブジェクトでは、ソート機能を有するオプションがないため、自分でロジックを組み、部品化をして呼び出す必要がある。
 ➡ファイルサーバのファイルシステムが『NTFS』の場合、ツール実行時は必ず名前順で処理される仕組みとなっている。

⑥エラー時のメッセージ表示、それ以外の想定外エラーの対応も考慮すること。

➆FileSystemObjectを使用してフォルダ内のファイルを繰り返して処理する場合、『For Each file in files』を使用する。
 このとき、既に開かれているファイルがある場合、そちらが優先されて開く仕組みとなっている。

【もしツール実行時にユーザーに伝えたいこと、制限したいことが発生した場合】

  • すべてロジックに落とし込む必要はなく、場合によっては外部設計『システム仕様書』の前提制約事項に書いて保険を置くことも大事になってくる。

【システム仕様書の項目について】※あくまで一例

項目名
システム概要
機能一覧(モジュールごと)
開発方針
前提条件
システムフロー図(隣接システム含めたフロー)
入出力情報
入出力ファイル項目(定義情報)
システム仕様

⑨ツール開発時のポイント

【ポイント】

①モジュール単位、処理単位で実装後、機会を作ってデモンストレーション&レビューをした方がいい。
 ※余計な手戻りが発生しないようにするため。

②共通化できる処理はユーザー定義関数(Function)を作成した方がいい。

③ツールは必ずバージョン管理、もしくはファイルサーバに履歴を持った方がいい。

④モジュール単位で実装後、疎通テストを実施した方がいい
 ※I/Oでファイル比較ツール(WinMerge等)を使用し、変更箇所の変更がないか確認する

⑤入力チェック処理等は必ず実装すること
 ・INファイルのフォーマットチェック、項目ごとのNULLチェック、フォルダ存在チェックなどなど。

⑥想定外のエラーに対処する処理は追加するべき
 VBAの場合:On Error goto ***

➆処理途中のメッセージ(保存しますか等々)は表示させないようにする。
 また、処理中の動作は省略させること。

⑧件数をカウントする場合、最初に0を代入させた変数を宣言し、その後、追加する件数をその変数に+する。


⑩UTテストケース作成のポイント

【ポイント】

①初期動作(ツール起動時の処理、初期画面の表示、2回目起動の表示確認)

②ボタン検証(ボタン押下時の結果確認)

③出力ファイル検証

④エラー検証

【証跡作りの考え方】

・証跡フォルダの構成
 No.**
・入力ファイル
・出力ファイル
・差分比較用(WinMerginなどによる比較結果に使用したCSV)
・証跡ファイル(xlsx)

UTテスト時のポイント

・テスト項目以外に思いついた検証観点がある場合、まずはモンキーテストを実施してみること。
 ➡そこから落ち度を発見する可能性があるため、その時にUTテスト項目として追加し、実施すること(その際にデグレテストも実施する)。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?