- ベストアンサー
記号
質問します。Excel VBAで下記のようなコードの中に, := こういう記号がでてきますが、 =とどう違うか。=ではエラーとなりますか。 NewBook.SaveAs Filename:=new_BOOKName
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
根拠になる情報がみつからないので参考情報として考えてください。 := という書き方は、組み込みダイアログボックスなどで「名前付き引数」を指定する場合に利用します。 Application.Dialogs(xlDialogSaveAs).Show arg1:="Test1.xls" と指定すると、ファイル名に "Test1.xls" がセットされた「名前を付けて保存」ダイアログが表示されます。 なぜ := なのか、というのが推測になってしまいますが、単に = だと「変数への代入」の意味になってしまうからではないでしょうか。 変数へ値の代入を行うには、 変数 = 値 という書式でコードを書きます。 = の左辺に右辺を代入する、という処理ですね。 組込みダイアログボックスの引数も「代入する」という意味では同じですが、変数ではなく引数だから := を使う、、、と自分は考えています。 というよりも、組み込みダイアログで引数を利用する場合は := を使うものだ、という理解をしています。 なぜ := なのか、ではなくて := を使うのが正解、という理解ですね。 例えば VBA で変数を定義するには Dim を使い、As に続いて変数のデータ型を宣言します。 Dim 変数名 As データ型 普通はなんで Dim なのか、ではなくて Dim を使うものと理解しますね。 As が Is じゃダメなのか、とは考えません。 仮に考えたとしても、実際にそれをやってみて動作しなければ「あ、やっぱりダメなのね」と理解します。 それと同じに理解する...ということなのではないかなと。 > =ではエラーとなりますか。 実際にやってみてください。 手元の環境 (Excel 2003) で Application.Dialogs(xlDialogSaveAs).Show arg1 = "Test1.xls" と指定して試してみたら、ファイル名には "FALSE" と表示されました。 手元の環境では、Option Explicit で変数の宣言を強制しているので、コードの実行前に "arg1" に対して「変数が定義されていません」というコンパイルエラーが出ました。 これはつまり、= だけで代入を行うとその左辺にあるのが変数だと判断されている (引数だと判断されていない) ということになります。 逆に、変数への代入に := を使うと、コードの記述段階でコンパイルエラー 「修正候補 : 式」が表示されます。 どちらも本来の使い方ではないので当たり前ではありますけど、「そういうもの」と理解する他ないのかなと思うんですが...。 でもこうした疑問は判っていても、検証してみるだけでもけっこう面白いですね。 自分は特に疑問も感じずに := を使っていましたが、そんな考え方もあるもんだ、と思いました。 というか、いろんな部分に関心を持って理解を深めようってスタイルは見習いたいです。
お礼
わかりました。たいへんていねいに有難うございました。 疑問解決しました。