2018年10月26日金曜日

列番号の設定

例えば基幹システムから出力したデータCSVに、ビジネス側で持っている顧客情報や契約情報をリンクして集計して出力表を作ることがあります。
インストールされてるからアクセスで~とか思っていると、エクセルで作って下さいって言われます。
こういう場合の表データは、英訳すればそれこそテーブルな訳で、列がフィールドで行がレコードです。
なので、不定なレコード数については作業の途中で「最終行の取得」という処理が頻繁に起きますが、列については所与のものとして扱えばよい場合がほとんどだと思います。
複数の表に共通した列がある場合は区別しないといけないので、“表名_列名”にして、下のような宣言になりがちですが、なんかイマイチ。
    ''データ表列番号
    Const 名前              As Integer = 1
    Const 性別              As Integer = 2
    Const 年齢              As Integer = 3
    Const 誕生日            As Integer = 4
    Const 婚姻              As Integer = 5
    Const 都道府県          As Integer = 6
    Const 一月              As Integer = 7
    Const 二月              As Integer = 8
    Const 三月              As Integer = 9

    ''顧客表列番号
    Const 顧客_名前         As Integer = 1
    Const 顧客_性別         As Integer = 2
    Const 顧客_年齢         As Integer = 3
    Const 顧客_担当営業     As Integer = 4
    Const 顧客_管轄営業所   As Integer = 5
    
    ''集計表列番号
    Const 集計_管轄営業所   As Integer = 1
    Const 集計_担当営業     As Integer = 2
    Const 人数              As Integer = 3
    Const 第一Q売上         As Integer = 4


列挙体 enum

enum というものがあるので、モジュールの頭(Optionの次に書いとけばいいです)に下記のように書きます。
※プロシジャの中では宣言できません
※数字が連続している場合は2つ目以降は省略できます
    ''データ表列番号
    Enum データ
        名前 = 1
        性別 = 2
        年齢 = 3
        誕生日 = 4
        婚姻 = 5
        都道府県 = 6
        一月 = 7
        二月 = 8
        三月 = 9
    End Enum

    ''顧客表列番号
    Enum 顧客
        名前 = 1
        性別 = 2
        年齢 = 3
        担当営業 = 4
        管轄営業所 = 5
    End Enum
    
    ''集計表列番号
    Enum 集計
        管轄営業所 = 1
        担当営業 = 2
        人数 = 3
        第一Q売上 = 4
    End Enum

"Enum hogehoge"~"End Enum"で括られている部分はそれぞれ区別されているので、それぞれの中では「名前」など重複する変数を使うことができます。
書き方はhogehogeと変数の間にドットを入れます。
【例】顧客.名前

インテリセンス

enum では、VBEでコードを書く時にドットを入力した時点でインテリセンスが利きます。
enum を使う理由は、数字を文字列に置き換えられるのはもちろんですが、列名が他の表とかぶっていてもそのまま使えることと、このインテリセンスが使えることです。

0 件のコメント:

コメントを投稿