レコード一件ずつの任意の複数データを、MsgBox関数で表示させることで、データの目視確認を確実にするサンプルコードです。
元データが手書き資料の場合を想定して解説します。
なお、手書き資料を集計する話については、別記事でも少し触れてますので、宜しければそちらもご覧くださいね。
目次
手書き資料のデータ整形業務
VBA集計作業では、表やグラフを作成する前のデータは、必ず整形された状態でなければなりません。
ところが、わたしの実務経験からすれば、整形されたデータが、はじめから揃っているということはまれです。
足りないデータについては、その都度個々人の持つExcelファイルを集めに行ったり、基幹システムからcsvファイルを取り出したりと、新たに追加したりするデータも少なからずありました。
その追加されるデータが、Excelファイルやcsvデータなどのデジタルデータであれば、VBAコードを組んで整形済データとして集約できます。ただ、当時はまだ紙の資料とか、手書きのメモなども追加する必要がありました。
そこで、できる限り業務効率化のために、なんとかVBAを使えないかと考えていたのです。
前置きが長くなりましたが、今回はそんな手書き資料を手入力で転記した後に使えそうなVBAコードのお話しをしたいと思います。
手書き資料入力後のVBAによるチェックプログラム
まずはいつも通りVBAコードをご紹介しますので、サンプルファイルを用意してから真似して書いてみてくださいね。
では、今回のVBAコードの目的についてお話ししますね。まずは、サンプルシートを再掲します。
さて、ここでイメージしてもらいたいのですが、仮に上のサンプルシートの内容が、いま手元にある紙の資料から1つ1つ手入力した結果だとしましょう。
当然、手入力ですので間違いがないか、入力後のデータをはじめからチェックしますよね。
そのチェックするのに便利なのが今回のVBAコードになります。
では、さっそく実行してみましょう。
実行後すぐに、上図のように商品ID1のりんごのデータが帳票形式で表示されました。そこで、手元の紙の資料の該当レコードと、このウィンドウの表示内容を突き合わせ確認するわけです。
右利きの人であれば、マウスの上に右手をのせたまま、左手の人差し指で手元の紙の資料の該当箇所を指さし確認します。確認が取れたら、そのまま右クリックをして次のデータ(下図)を表示させます。
つづけて先頭レコードと同様に、右手をマウスにのせたまま、左手人差し指で確認しながら転記内容に間違いがないかを確認します。
以上のように、最終レコードまでを1レコードづつ確認しながら、転記ミスがないかを確認します。
どうでしょうか。特に横に長くて、横スクロールしないと隠れた項目の値が確認できないようなデータシートに使えるかもしれませんね。
場合によっては、確認が必要な項目だけを選んでMsgBox関数に表示させれば、必要な項目をより早く確認できますよね。
では続いてVBAコードの説明になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | Option Explicit '手元資料入力後チェック用コード Sub Check_Hand_Writing() Dim r As Long '行番号用変数 Dim lngERow As Long 'データ最終行用変数 'データ最終行を取得 lngERow = Range("A" & Rows.Count).End(xlUp).Row '各レコードのすべてのデータを表示 For r = 2 To lngERow MsgBox "商品ID : " & Cells(r, 1) & vbCrLf & _ "商品名 : " & Cells(r, 2) & vbCrLf & _ "在庫 : " & Cells(r, 3) & vbCrLf & _ "原価 : " & Cells(r, 4) & vbCrLf & _ "仕入担当 : " & Cells(r, 5) & vbCrLf & _ "仕入先 : " & Cells(r, 6) & vbCrLf & _ "価格更新日 : " & Cells(r, 7) Next End Sub |
9行目: lngERow = Range("A" & Rows.Count).End(xlUp).Row
レコードの最終行番号を求めるVBAコードになります。
12~20行目:For r = 2 to lngERow ~ Next
ここは繰り返し処理になります。レコード先頭行番号の2から、9行目で取得した最終レコードの行番号までを繰り返し処理します。
13~19行目:(MsgBox関数による各レコードの項目表示)
この一連のVBAコードは、下図で詳しくお話ししたいと思います。
まず、各項目名(商品ID, 商品名, 在庫, ・・・, 価格更新日)は、右の「:」(セミコロン)を含めて「"」(ダブルクォーテーション)で囲っていますので、ここまでが1つの文字列になりますね。
つづいて、文字列をつなぐ「&」(アンバサンド)のあとに、Cells(r, ※)すなわち、各項目に応じた列のデータがくっつきます。(※は、列番号が入ります)
さらに、その後の「&」に続くのが、今回初登場になります「vbCrlf」です。これは、改行コードといい、MsgBox関数などで表示する文字列が長い場合や、見やすく体裁を整える必要がある場合に重宝します。
今回のMsgBoxウィンドウの表示結果が、各レコードの項目ごとに改行されており、見やすくなっていますよね。
最後の「_」(アンダーバー)は、同じく改行なのですが、これはVBE画面上における改行文字になります。例えば、VBE画面の右側に隠れるくらい長いVBAコードは、横スクロールしたり、可読性の面で効率が悪いですよね。
そこで、適宜「_」(アンダーバー)を使って、VBE画面上の体裁をよくします。今回のVBAコードの例では、MsgBox関数の出力結果に合わせて、VBE画面上でも同じように見えるように、「_」(アンダーバー)を使って調整しています。
「vbCrlf」も「_」も直前に「&」でつなげて使うのがポイントです。
ちなみに、最後の項目「価格更新日」の最後の「vbCrlf」と「_」(アンダーバー)は、その後つづけて表示する項目がないので書いてません。
まとめ
今回は、資料の元データが手書き資料の場合に使えるVBAコードを紹介しました。また、MsgBoxウィンドウの表示内容の体裁を整える「vbCrlf」と、VBE画面上で、VBAコードの体裁を整える改行文字「_」(アンダーバー)についてお話ししました。