SSブログ

テーブルデータを参照するメソッド [VBA]

 プログラムからテーブルのデータを参照したい場合、ADOなどを利用する方法がありますが、Applicationオブジェクトのメソッドで、簡単に参照することもできます。
 DAvg・DCount・DFirst・DLast・DLookup・DMax・DMin・DStDev・DStDevP・DSum・DVar・DVarPメソッドです。
 参照できるテーブルは、現在のデータベースに定義されているテーブル、リンクテーブル、クエリです。
 リンクが設定されていない、他のデータベースを参照することはできません。

続きを読む


クエリ グループで最大値をもつレコードの抽出(相関サブクエリ) [クエリ]

 以前の記事で、テーブル全体から最大値をもつレコードを抽出する方法をとりあげましたが、今回はグループ毎の最大値のレコードを抽出します。

 データはこんな感じ。
 担当Aさん、Bさん、Cさん・・・が居て、日付毎に、金額が一番大きかった人のレコードを抽出します。

続きを読む


クエリ 最大値をもつレコードの抽出 [クエリ]

 テーブルのデータから、ある項目の最大値そのものを抽出するのは、MAXで簡単に得られますが、その最大値をもつレコード全体を特定したい場合は、ちょっと工夫が必要です。

 例として、下記のようなデータから、最大値をもつレコードを抽出する場合を考えます。

 ぱっと見で、2011/1/9の2,000円が最大です。

続きを読む


システム設計の話 その3・システム化する内容をまとめる [システム設計の話]

 前回、顧客の業務内容と、システム化する内容をざっくりまとめました。
 これを踏まえて、具体的にシステムでどんな物を作るかを考えて行きます。前回のシステム化した業務内容から、必要な物を洗い出してみます。

・「売上入力」画面
・「納品書印刷」画面
・「納品書」帳票
・「売上伝票印刷」画面
・「売上伝票」帳票
・「経理売上報告書印刷」画面
・「経理売上報告書」帳票
・「売上実績表印刷」画面
・「売上実績表」帳票

 顧客から直接見えるシステムの部品は、とりあえずこんな感じでしょうか。
 画面と帳票は、ACCESSで言うところの、フォームとレポートになります。
 今回は、入力画面と帳票のみで、データをごりごり処理するバッチ処理みたいなのは考えていません。もしかすると、売上実績表で、きめ細かい対比を見たいなどの、複雑な要望が合った場合は、それ用のデータをバッチで作成したほうが、作りやすいかもしれません。

 この時点で、ざっと何をつくったら良いかが少し見えてきました。
 しかし、それぞれ細かい内容はまだ未定です。これからは、それぞれについて、詳細な内容を検討していく工程に入ります。
 説明の例なのでざっくりやってますが、それでもめんどくさいですよ。実際の現場では、こういう細かい打ち合わせを延々何時間、何日、何ヶ月ってやって、システムを作っていくわけです。

 ちょっと愚痴が入りましたが、区切りが良いので今回はこの辺で。
 次回は上記の一覧にそって、一つずつ詳細内容の検討をしていきます。


関数・プロシージャの呼び出しとCallステートメント [VBA]

 と、いうか、引数を括弧で囲むかどうかと、Callを書くか書かないかについて。

 まず、括弧について。
 関数やプロシージャを呼び出す場合、関数名(プロシージャ名)の後に括弧「(」「)」を付けるかどうかについてです。
 関数やプロシージャから戻り値を受け取る場合、括弧を付けます。

 例えば、
  MsgBox "テスト", vbInformation
 この場合は、メッセージボックスを表示させるだけなので、括弧なしでOKです。

 戻り値を受け取る下記のような場合は、
  intR = MsgBox("テスト", vbInformation + vbYesNo)
 と、なります。

 また、
  MsgBox("テスト", vbInformation + vbYesNo)
  intR = MsgBox "テスト", vbInformation + vbYesNo
 これらは、構文エラーになります。

 

 次に、Callステートメントについて。
 Callステートメントは、関数名・プロシージャ名の後ろに括弧を付けるけど、戻り値を受け取らない場合に記述します。

 例えば
  Call MsgBox("テスト", vbInformation + vbYesNo)
 このような記述になります。
 最初っから括弧を書かなければCallも書かずに済むのですが、引数部分は括弧で囲んだ方が見やすいとか、戻り値があるけど捨ててることを明示的にしておきたいとか、いや、正確な理由は分かりませんが、こういうことになってます。

 こちらも、下記のような記述は、
  Call MsgBox "テスト", vbInformation + vbYesNo
 構文エラーになります。

 

 さて、なんでこんな事を取り上げたかと言いますと、たまに下記のようなコーディングに遭遇するからです。
  Dim intR As Integer
  intR = MsgBox("テスト", vbInformation)
 たぶんですね、見よう見まねでMsgBoxを使ってみたら、なにやらエラーがでる。なんだかわかんないけど、こうするとエラーにならないから、以後ずっとこうしてる的な感じでしょうか。
 ちゃんと理由を理解してないとこうなります。
 そして、派遣プログラマにはこういう人がたくさんいます。


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。