SSブログ

VBAの演算子 [VBA]

○算術演算子

+ ・・・ 和
- ・・・ 差
* ・・・ 積
/ ・・・ 商
^ ・・・ べき乗
¥ ・・・ 商の整数部分
Mod ・・・ 剰余
& ・・・ 文字列の連結

文字列の連結は、+でも可。
(¥の存在を知ったのは、実は数年前。便利です)

○論理演算子

And ・・・ 論理積
Or ・・・ 論理和
Xor ・・・ 排他的論理和
Eqv ・・・ 論理等価
Imp ・・・ 論理包括


○比較演算子

< ・・・ より小さい
<= ・・・ 以下
> ・・・ より大きい
>= ・・・ 以上
= ・・・ 等しい
<> ・・・ 等しくない
Is ・・・ オブジェクトの比較
Like ・・・ パターンマッチング


○その他

AddressOf ・・・ プロシージャのアドレスを取得

たぶん普通は使わないです。


VBAにはビットシフトが無いようです。

ループ 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を使用する場合で、変換が不要な場合、読み(カナ)の入力等の場合は、「無変換」を設定します。

続きを読む


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