アプリ版:「スタンプのみでお礼する」機能のリリースについて

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つにまとめたいのですが、
何か良い方法はありませんでしょうか?

A 回答 (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 にすればよいです。
    • good
    • 0

正確に言うと、この文は、VBの文法には違反していません。



これはどう解釈されるかというと、a+bとdがイコールかどうかの結果をcに代入している、と解釈されています。だから、falseなのです。
試しに、問題の行の前に、c=13と入れてみると…

VBの代入文は、C言語のように、評価結果を持たないみたいですね。
    • good
    • 0

c = d = a + b


という式は、文法的には間違ってはいませんが、意味はあなたが考えているものではありません。

あなたが考えているのは、
a + b の値を d に代入し、d の値を c に代入する、
ということですよね。

でも、この式の場合、
d と a + b が等しかったら True 、等しくなかったら False を、c に代入する、
という意味になります。

一番左にある = は、代入演算子ですが、それ以外の = は比較演算子になります。

なので、c が Falseなのは当然です。

さらに、d には何も代入されていないので、やはりFalseなのは当然です。
    • good
    • 0

> 見た目を良くするために、1つにまとめたいのですが、



  意味が分かりません。  
  "見た目" って何?


  規約違反をしているのにも関わらず、標準の Excel 環境で対処しようとするのは無理
 があります。


  ※別途、Pre-Compiler などを作成して、対処するようなことを検討して
  みてください。
    • good
    • 0

あ、そうそう。



c=a+b : d=c

これなら、式が":"前後で2個、という扱いになるのでオッケーだった筈です。これでごまかすしか無いですね。
    • good
    • 1

はい、ExcelVBAは「式の中にイコールは一つ」という「仕様」だった筈です。

ですので、できないものはどうやっても出来ないですね。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!