GEN MUTO'S HOMEPAGE  エクセル大事典  エクセルVBAを極める

エクセルExcel大事典 エクセル大事典TOPページへ
 ■ エクセルVBA中級編−VBAでいろんなテクニック
  演算子について詳しく知ろう!
 
■ 演算子を詳しく知ろう!

今回は演算子のお話です。
ExcelVBAでは、さまざまな演算子を用いてプログラミングすることが可能ですが、そのためには演算子の使い方をよく知っておく必要があります。ところで演算子ってなんでしょう?

演算子とは演算内容を指示する記号のことです。
さらに、演算の対象となる値(リテラル)や変数などの引数のことをオペランド(被演算子)と呼びますが、演算子の中でもオペランドを2つとるものを二項演算子(例:A And B、A + B、等)と呼び、オペランドを1つとるものを単項演算子(例:Not A、-A、等)と呼びます。

それでは早速、演算子の種類について解説していきましょう。

代入演算子
書式: a = b

代入演算子は等号の右側の値を左側の変数に代入します。右側の値(リテラル)は変数でも式でもかまいませんが、代入される左側は、必ず変数である必要があります。

※ VB、VBAでは代入演算子の"="と比較演算子の"="は同じ記号を用いますが、意味は全く異なりますので注意が必要です。
※ ExcelVBAではインクリメント、デクリメント演算子は使用できません。a++や a+= などは使用できないので注意が必要です。

例:
  a = 100    変数aに定数100を代入します
  a = b      変数aに変数bを代入します
  a = a + b   変数a自身の値に変数bの値を加算して、変数aに代入します

算術演算子

  +        加算
  -         減算
  *        乗算
  /         除算
  ¥       整数除算
  mod      剰余
  ^        累乗

算術演算子は数値リテラルや数値型変数の演算に使用します。演算子の優先順位は一般の数学と同じく加算・減算よりも乗算・除算のほうを優先します。"()"を使用した場合はカッコの中の演算を優先します。

※ VB、VBAでは加算演算子の"+"と連結演算子の"+"で同じ記号を用いますが、意味は全く異なりますので注意が必要です。
※ 減算演算子の"-"を単独で数値リテラル、変数、式などの前に用いたときは負数(マイナス)を表す記号として機能します。

例:
  a = 3 + 2   変数aには5が代入される
  a = 3 - 2    変数aには1が代入される
  a = 3 * 2   変数aには6が代入される
  a = 3 / 2    変数aには1.5が代入される
  a = 3¥2    変数aには1(1.5の整数部分)が代入される
  a = 3 mod 2 変数aには1(3/2の余り部分)が代入される
  a = 3 ^ 2   変数aには9(3の2乗)が代入される

連結演算子
書式: a & b または a + b

連結演算子の"&"と"+"は文字列リテラル、文字列型変数、式などの連結を行います。ただし、"+"演算子は、両方の式が文字列の場合だけ連結を行い、式の片方に数値が含まれる場合もう片方の式を評価し、加算ができる場合は加算を行い、できない場合はエラーを返します。

例:
  Range("A" & i).select  A列i行のセルを選択します。
  MyStr = "3" + "2"     変数MyStrには文字列"32"が代入されます
  MyStr = "3" + 2       変数MyStrには文字列"5"が代入されます
  MyStr = "A" + 2      型が一致しないためエラーが発生します

このことから、"+"を連結演算子として使用することはお勧めしません。確実に連結を行いたい場合は"&"演算子を用いるようにしましょう。

比較演算子(関係演算子)

  =       等号
  <>      不等号
  >       未満
  >=      以下
  <       超過
  <=      以上
  Like     文字列比較
  Is      参照比較

比較演算子は主に条件式の真、偽の判定に用いられます。式の右辺と左辺を比較し、真または偽の結果を得るのに用います。

例:
  MyBln = 3 > 2   変数MyBlnには真(True)が代入されます
  MyBln = 3 <> 2  変数MyBlnには真(True)が代入されます
  MyBln = 3 = 2   変数MyBlnには偽(False)が代入されます

Like演算子は文字列の曖昧な比較を行うときに用いられます。文字列の比較に用いるパターンは下記の通りです。

パターン
  ?          任意の1文字
  *          任意の数の文字
  #          任意の半角数字1文字
  [文字リスト]    文字リストに指定した任意の1文字
  [!文字リスト]   文字リストに指定した以外の任意の1文字
            (#以外は全角、半角にかかわらず1文字として扱います。)

例:
  MyBln = "ABCDE" Like "AB?DE"   変数MyBlnには真が代入されます
  MyBln = "ABCDE" Like "A*E"     変数MyBlnには真が代入されます
  MyBln = "12345" Like "1234#"   変数MyBlnには真が代入されます
  MyBln = "F" Like "[A-E]"         変数MyBlnには偽が代入されます
  MyBln = "F" Like "[!A-E]"         変数MyBlnには真が代入されます

Is演算子は、2つのインスタンスが同じオブジェクトを参照しているかどうかを比較します。インスタンスが同じオブジェクトを参照している場合、真が返ります。

例:
Sub test()
Dim MyBln As Boolean
Dim Object1 As Range
Dim Object2 As Range
Dim Object3 As Range
  Set Object1 = Range("a1")
  Set Object2 = Range("a1")
  '同一のオブジェクトを参照しているのでMyBlnには真が代入されます
    MyBln = Object1 Is Object1
  '異なるオブジェクトを参照しているのでMyBlnには偽が代入されます
    MyBln = Object1 Is Object2
  'インスタンスが生成されていないのでMyBlnには真が代入されます
    MyBln = Object3 Is Nothing
End Sub

論理演算子

論理演算子は主に条件式で、複数の式の評価を行う場合に使用します。複数の式の真・偽の組み合わせを論理演算子を用いて判定し、全体の真・偽の評価を行います。

  Not  Not以下の条件式が偽ならば真、真ならば偽

例:
  MyBln = Not MyBln

MyBlnが偽の場合、変数MyBlnには真が代入されます。MyBlnが真の場合、変数MyBlnには偽が代入されます。

  And  論理積
  Or    論理和
  Xor   排他論理和
  Eqv  論理等価
  Imp  論理包含

例:
  A 論理演算子 B の場合にとりうる真偽値のパターン

And A\B True False
    True  真  偽
   False  偽  偽

Or  A\B True False
    True  真  真
   False  真  偽

Xor A\B True False
    True  偽  真
   False  真  偽

Eqv A\B True False
    True  真  偽
   False  偽  真

Imp A\B True False (AがTrue、BがFalseのときだけ偽で、それ以外は真)
    True  真  偽
   False  真  真

ビット演算子

論理演算子と同じものを使用します。論理演算子が真偽で結果を返したのに対し、ビット演算子はビット演算の結果を返します。

And(論理積)
  式1  0 0 1 1
  式2  0 1 0 1
  結果 0 0 0 1

Or(論理和)
  式1  0 0 1 1
  式2  0 1 0 1
  結果 0 1 1 1

Xor(排他論理和)
  式1  0 0 1 1
  式2  0 1 0 1
  結果 0 1 1 0

例:
  MyBln = MyLng And 1

この例では、整数型変数MyLngの値が奇数か偶数かを調べます。MyLngの値が何であれ、最下位ビットが1になれば、それは奇数を表し、0になれば偶数を表します。

1001は十進数の9を二進数に変換したものです。1は十進数でも二進数でも同じく1で表されます。
Andは論理積を求めるビット演算子ですので、この場合演算結果は、

    1001
And 0001
------------
    0001

1となり、ブール型変数MyBlnには1(True)が代入され、奇数であることが判定されます。

MyLngが8ならばビット演算は以下のように、

    1000
And 0001
------------
    0000

0となり、ブール型変数MyBlnには0(False)が代入され、偶数であることが判定されます。

この方法だと、MyLngの値が何であれ、常にMyLngの最下位ビットを調べれば奇数か偶数かの判定が行えることがわかります。



演算子の優先順位

演算子の優先順位の詳細は以下のようになります。
(上にいくほど優先順位が高く、下にいくほど優先順位が低くなります)

・()内の式
   ↓
・算術演算子 べき乗>マイナス符号>乗算・除算>整数除算>剰余>加算・減算
   ↓
・連結演算子
   ↓
・比較演算子
   ↓
・論理演算子 Not>And>Or>Xor>Eqv>Imp

以上、
演算子は単独で用いることは少なく、ほとんどの場合、様々な演算子を組み合わせて用いることが一般的です。
複雑に演算子を組み合わせた演算では、演算子の優先順位を意識しないと、予想外の結果が返ってくることになります。

ぜひ、この機会によく理解しておいてください。

>> 次の話にすすむ


サイト内検索ができます

Microsoft Most Valuable Professional

Microsoft MVP Excel
武藤 玄 プロフィール
 

■■■ 執筆した書籍 ■■■
 

EXCEL VBA 業務自動化
 

Excel VBA を5日でマスターする本
 

仕事を速くする Excel VBA 入門
 

Excel VBAと業務改善のポイントがわかる本
 

Access VBA ベーシック スタンダード
 

Excel VBA アクションゲーム作成入門
 

■■■ 連載中の記事 ■■■
 

Excel VBAで業務改善!
 

実務で使うExcel VBA
 


TOPページ


■ エクセルVBA超入門

 ・9ステップで"Hello World!"
  からオブジェクト指向まで!
  1."Hello World!"を表示しよう
  2.基本はデータの入出力
  3.繰り返し処理
  4.シートで簡易データベース
  5.名前をつけよう
  6.構造化プログラムに挑戦
  7.構造体を使ってみよう
  8.フォームを使ってみよう
  9.オブジェクト指向に挑戦

■ エクセルVBA中級編

 ・VBAでいろんなテクニック
  変数・関数のスコープ
  引数の参照方法を明示
  配列の中身を一気に複写
  識別子がよいコードを作る
  データ定義型をもっと知ろう
  定数と列挙型を活用しよう
  エラー処理の重要性1
  エラー処理の重要性2
  いろいろな条件分岐
  いろいろな繰り返し処理
  演算子について知ろう
  文字列操作 連結 変換 置換
  文字列操作 検索 比較 書式
  日付操作関数を知ろう
  数値操作・評価・その他関数
  並び替えソートをマスター
  いろいろな検索をマスター
  VBEditorを使いこなそう
  マクロの記録を活用しよう1
  マクロの記録を活用しよう2
  VBAからVBEを操作しよう1
  VBAからVBEを操作しよう2
  VBAからVBEを操作しよう3
 ・ワークシートを使いこなす
  セルの参照をマスターしよう
  セルの選択をマスターしよう
  セルの操作をマスターしよう
  セルの書式設定をマスターしよう
  行・列の操作をマスターしよう
  シートの参照をマスターしよう
  シートの操作をマスターしよう
  ブックの操作をマスターしよう
  ウィンドウの操作をマスターしよう
  イベントプロシージャを活用しよう
  ワークシートを印刷しよう1
  ワークシートを印刷しよう2
  音声(読み上げ)機能を操作しよう
  グラフを操作しよう
 ・ユーザーフォームを使いこなす
  ユーザーフォームを使おう
  UserFormsオブジェクト
  Labelコントロール
  TextBoxコントロール
  ComboBoxコントロール
  ListBoxコントロール
  CheckBoxコントロール
  OptionButtonコントロール
  ToggleButtonコントロール
  CommandButtonコントロール
  ScrollBarコントロール
  SpinButtonコントロール
 ・VBA関数の一覧
  Aから始まる関数の一覧
  Cから始まる関数の一覧
  Dから始まる関数の一覧
  Eから始まる関数の一覧
  Fから始まる関数の一覧
  Gから始まる関数の一覧
 
■ エクセルVBAを極める
 VBAスーパーテクニック
 
 ・データベースへ接続してみよう!
  CSVファイルへの接続
  ワークシートへの接続
  mdbファイルへの接続
  SQL Serverへの接続
  ADOレコードセットの操作1
  ADOレコードセットの操作2
 ・ファイルを操作してみよう!
  FileSystemObjectの操作
  Drive File Folderの操作
  TextStream ダイアログ
  ステートメントでファイル操作1
  ステートメントでファイル操作2
 ・他アプリと連携してみよう!
  ActiveXオートメーションの操作
 ・ゲーム技でマクロを超える
  エクセルで音を鳴らす1
  エクセルで音を鳴らす2  
  スクリーン座標を取得
  様々なイベント取得
  リボンUIを制御しよう1
  リボンUIを制御しよう2
  シート上でアニメを動かそう
 
■ 一歩上行くエクセル
 基本操作の完全マスター!

 
 ・あなたはいったい
  エクセルで何をしたいのか?
  エクセルで業務効率化
  エクセル関数を使いこなす
  エクセルの便利技
  エクセルは最高の帳票ツール
 ・エクセル基本操作上級編!
  セル選択、コメント、シリアル値
  オート機能を使いこなそう!
  参照、条件付書式、入力規則
  関数をもっと理解しよう!
  配列数式を有効利用しよう!
  データの正規化をしよう!
  ショートカットキーを利用しよう1
  ショートカットキーを利用しよう2
  Office用アプリを作成しよう!
  PowerPivotとExcelで簡単BI!
 ・世間の誤ったエクセルの
  べからず集
  エクセルで文章を書くべからず
  エクセルで図形を描くべからず
  エクセルでシステムをつくるな
 
■ エクセル関連その他

 ・エクセルコミニュティにあなたも
  参加しませんか?
  Excel関連リンク・コミニュティ
 ・VBの理解がVBAをマスターする
  最短距離!
  VB関連の老舗・大家サイト
 ・エクセルExcel大事典掲示板
 ・プライバシーポリシー

2000アイテムを超えるラベルを販売
送料無料、即納対応の優良ショップ
今買っているラベルより確実に安い!
OAラベルの販売専科グラフトラベル




エクセルExcel大事典ははリンクフリーです エクセル大事典Excel大事典
お問い合わせはこちら gengengen@yahoo.co.jp

Copyright© Gen Muto 武藤 玄 All Rights Reserved,