• ベストアンサー

Excel VBAでイコール二回使えませんか?

Excel2003を使っております。 Excel VBAに関しての質問です。 Sub test() a = 5 b = 8 c = d = a + b Cells(5, 99) = c Cells(6, 99) = d End Sub のプログラムを実行してもFALSEと表示されてうまくいきません。 どうやら、 c = d = a + bに問題があるようです。 これって c = a + b d = c と2つに分けなければならないものなのでしょうか? 見た目を良くするために、1つにまとめたいのですが、 何か良い方法はありませんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

たまたま、同じになってしまいましたが、途中まで、#4さんと同じ内容です。 c = d = a + b このコード自体は、あまりこういう書き方はしませんが、True・False を返す目的としてはアリです。VB系の経験者なら、あまり書かないだけで、意味は分かるはずです。 通常は、  c = (d = a + b) 見かけのために、このように書きます。 dの値が、数値が入っていれば、 d と a + b と比較して、 値が a = 5 b = 8 d = 13 c = d = a + b c は Trueになります。 今回は、以下のようになるのかな? Sub test() Dim a As Long 'データ型の宣言をしてください。 Dim b As Long Dim c As Long a = 5 b = 8 c = a + b Cells(5, 99).Value = c Cells(6, 99).Value = c End Sub その後に、cの値が別途になるなら、その時に、d = c にすればよいです。

その他の回答 (5)

回答No.5

正確に言うと、この文は、VBの文法には違反していません。 これはどう解釈されるかというと、a+bとdがイコールかどうかの結果をcに代入している、と解釈されています。だから、falseなのです。 試しに、問題の行の前に、c=13と入れてみると… VBの代入文は、C言語のように、評価結果を持たないみたいですね。

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.4

c = d = a + b という式は、文法的には間違ってはいませんが、意味はあなたが考えているものではありません。 あなたが考えているのは、 a + b の値を d に代入し、d の値を c に代入する、 ということですよね。 でも、この式の場合、 d と a + b が等しかったら True 、等しくなかったら False を、c に代入する、 という意味になります。 一番左にある = は、代入演算子ですが、それ以外の = は比較演算子になります。 なので、c が Falseなのは当然です。 さらに、d には何も代入されていないので、やはりFalseなのは当然です。

  • DIooggooID
  • ベストアンサー率27% (1730/6405)
回答No.3

> 見た目を良くするために、1つにまとめたいのですが、   意味が分かりません。     "見た目" って何?   規約違反をしているのにも関わらず、標準の Excel 環境で対処しようとするのは無理  があります。   ※別途、Pre-Compiler などを作成して、対処するようなことを検討して   みてください。

  • FEX2053
  • ベストアンサー率37% (7991/21371)
回答No.2

あ、そうそう。 c=a+b : d=c これなら、式が":"前後で2個、という扱いになるのでオッケーだった筈です。これでごまかすしか無いですね。

  • FEX2053
  • ベストアンサー率37% (7991/21371)
回答No.1

はい、ExcelVBAは「式の中にイコールは一つ」という「仕様」だった筈です。ですので、できないものはどうやっても出来ないですね。

関連するQ&A

専門家に質問してみよう