VBAの演算子 [VBA]
○算術演算子
+ ・・・ 和
- ・・・ 差
* ・・・ 積
/ ・・・ 商
^ ・・・ べき乗
¥ ・・・ 商の整数部分
Mod ・・・ 剰余
& ・・・ 文字列の連結
文字列の連結は、+でも可。
(¥の存在を知ったのは、実は数年前。便利です)
○論理演算子
And ・・・ 論理積
Or ・・・ 論理和
Xor ・・・ 排他的論理和
Eqv ・・・ 論理等価
Imp ・・・ 論理包括
○比較演算子
< ・・・ より小さい
<= ・・・ 以下
> ・・・ より大きい
>= ・・・ 以上
= ・・・ 等しい
<> ・・・ 等しくない
Is ・・・ オブジェクトの比較
Like ・・・ パターンマッチング
○その他
AddressOf ・・・ プロシージャのアドレスを取得
たぶん普通は使わないです。
ループ While WendとDo Loop [VBA]
While Wendステートメントは、条件が真の間ループを行う構文です。
これと同等の処理が、Do Loopでも記述できます。
・While Wendの構文
While 条件式
・・・
処理
・・・
Wend
・Do Loopの構文
Do While 条件式
・・・
処理
[Exit Do]
・・・
Loop
このように、両方ともまったく同じ事ができますが、Do Loopを使用した場合は、Exit Doステートメントによって、最初の条件式以外の場所でも、ループを抜ける事ができます。
Do Loopを使用した方が、より柔軟な処理が記述できます。
また、While Wendは、前判定のループしか書けませんが、Do Loopは後判定のループも記述できます。
この場合、条件式の結果にかかわらず、必ず1回はループ内の処理が実行されます。
・Do Loopの構文(後判定)
Do
・・・
処理
[Exit Do]
・・・
Loop While 条件式
と、言うことで、ループを書く場合は、迷わずDo Loopで記述して構わないと思います。
コード項目の「前ゼロ」文化 [テーブル設計]
学校などでプログラムを勉強している場合には、まず遭遇しない事柄だと思います。
実際の開発現場では、時としてこういった設計のシステムに出会します。
「前ゼロ」または、「前ゼロ埋め」とは。(私の周りでは、こういう表現でした)
「5桁の数値で、123」を表現する場合、「00123」となることを、こう言います。
前にゼロを付けて数値を表現する事は、いろいろな場面であるのですが、ここではシステムでのコード項目(商品コードとか顧客コードとか)について書きます。
数値の前にゼロが付くというのは、BASICやC言語あたりから(ちょっと古いか、今時は何から始めるんだろう?)プログラムを始めた人には、あまりピンとこない事だと思います。
COBOLでの数値の表現が、こうなっていることに由来していると思われます。
COBOLでは、数値項目を桁数指定で定義します。5桁で定義した場合、その領域には、「00123」のような表現で、必ず5桁が記録されます。記録する桁数が、定義された桁数以下だった場合、上位の桁には、「0」が入ります。
現在のデータベースを用いたシステムでも、同じようなデータの持ち方になるように、設計されることがあるようです。
データベースの数値項目は、「数値」としての情報しかもてませんので、前にゼロを付けた状態は記録できません。記録できる数値の範囲がどうであれ、数値の「123」は「123」です。
では、どうするかというと、テキスト項目にします。文字なので「00123」そのままを記録することができます。
しかし、テキスト項目は、数値項目と比べて、必要な記憶容量や処理の負荷で不利になります。
古い資産の焼き直しとかでない限り、この設計は有用ではないと思います。
内部がどうなっているかは、利用者からするとどうでも良いことなのですが、時々利用者への配慮が足りないシステムに出会します。
例えば、数値5桁の「商品コード」項目があったとします。
そこで、「00123」というコードの商品を呼び出すとします。
私的には、「123」とだけ入力したいのですが、システムは「00123」と入力しなければ受け付けられないようになっています。
そこの所は、プログラムで良きに計らって頂きたい所なんですが、そうなってない物もあるわけです。5桁なら、まあ許せるかも知れませんが、これが7桁とか9桁になったら、キーボードの「0」がすぐ壊れます。
若い開発者が、古いシステムをお手本にして、何の疑問も持たずに、コード項目を文字項目で作るようになって欲しくないと、私的には思ってます。
蛇足ですが、下記のような用語があるようです。
・ゼロパディング・・・数値が規定の桁数に満たないとき、桁を0で埋めること。
・ゼロサプレス・・・前(左側)から連続する0を取り除くこと。
さらに蛇足です。
文字項目のコード項目で、後ろスペースを持つような作りにはしない方が良いと思います。
どーもSQLの条件とかでは、後ろスペースは無視されて、スペース数やありなしを判定できないような感じだったので。
テーブル設計 数量と単価と金額 [テーブル設計]
例えば売上データを格納するテーブルを作成するとして、以下のような項目を定義します。
○売上データテーブル
・売上日
・商品コード
・数量
・単価
・金額
特に何のひねりもない、単純な構成です。
ここで、ある程度プログラムをやったことがある人なら、一つ気になる部分があると思います。
「金額」の項目は、「数量×単価」で計算できるから、テーブルの項目として持つ必要があるのか?
「金額」の項目をテーブルに持たなければ、その分データを記録する容量が少なくて済むので、効率的と言えます。無駄を省くのは良いことです。
テキストボックスのプロパティ IMEの制御 [テキストボックス]
テキストボックスにフォーカスが来たときに、ユーザーが入力作業を行いやすくなるように、IMEの状態を制御することができます。
○IMEを制御するプロパティの説明
・IME入力モード保持・・・そのコントロールでのIMEの状態を保持し、フォーカスが別のコントロールに移った後、再度フォーカスを取得した時に、以前の状態に復帰する。
・IME入力モード・・・オン・オフや、ひらがな入力・英数入力モード等を指定する。
・IME変換モード・・・変換モード指定する(一般・人名/地名・話し言葉優先・無変換)。
○設定内容
・IME入力モード保持・・・ 基本的に、「いいえ」を設定しておいて良いと思います。
・IME入力モード・・・IMEが不要な数値、英数の入力の場合は、「オフ」を設定します。
全角文字・漢字の入力の場合は、「ひらがな」を設定します。
その他、場合に応じて、「全角カタカナ」「半角カタカナ」等を設定します。
・IME変換モード・・・基本的に、「一般」の設定で良いと思います。
IMEを使用する場合で、変換が不要な場合、読み(カナ)の入力等の場合は、「無変換」を設定します。