重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

標題の件、以下のように、宣言をして、コードを書いて下さいと
マクロのルールであります

しかし、実際に書かなくても動きます
ルールで書いたり、忘れたりするのですが、どんな目的があるのでしょうか?
⇒型を定義して宣言しているというのは理解できます

ご存じの方、教えて下さい


Dim wb As Workbook ⇒エクセルブックを宣言

Dim LastRow1 As Long ⇒最終の行番号を宣言

Dim filePath As String ⇒ファイルパスを宣言


Set wb = Workbooks.Open(filePath)

LastRow1 = Cells(Rows.Count, "A").End(xlUp).Row


filePath = "C:\Users\2020\OneDrive\マクロ\a.xlsm"

A 回答 (4件)

変数宣言には2つの意味があります。


(1) 使う変数を限定することで間違いを減らす。
Option Explicit を指定ことで強制できる。

Option Explicit
Sub AAA()
 Dim hensuu
 hensu = 5 '← 宣言されてないのでエラー
 hensuu = atai '← ataiが宣言されてないのでエラー
End Procedure

Sub BBB()
 hensuu = 3 ← BBBの中では宣言されてないのでエラー
End Procedure

(2) 型を限定することで間違いを減らす
'Visual BasicだとOption Strict Onで型指定を強制できるが、VBAには無い
Dim LastRow1 As Long 
LastRow1 = Cells(Rows.Count, "A").End(xlUp) '← .Rowを忘れているが、Cells(Rows.Count, "A").End(xlUp)はRange型なのでLong型と合わずにエラー


一方で、(1)(2)のようなものはプログラマが注意すればいい、いちいち宣言が面倒だし気楽に書きたい、等の考えもあります。

VBAは初期値では Option Explicitが未指定な状態では宣言が無くても利用できます。
上の例だと
'Option Explicit → 無し
Sub AAA()
 Dim hensuu
 Dim hensu '← 内部で自動で宣言される
 hensu = 5
 Dim atari '← 内部で自動で宣言される
 hensuu = atai
End Procedure

Sub BBB()
 Dim hensuu '← 内部で自動で宣言される
 hensuu = 3
End Procedure
のような動作になります。


初心者には宣言は難しいでのそのまま使え、という解説サイトを見たことがあります。
私はむしろ初心者こそOption Explicitを付けて宣言を強制し、型を意識するべきだと思ってます。
    • good
    • 2

変数を宣言するとメモリをこの変数用に空けといて!ってできます。


vbaだと省略してもプログラムから使われてる変数を探し出して勝手に内部的に宣言してくれます。
一見便利そうな機能ですが、変数名を書き間違えてしまうと勝手にそれが宣言されNothingとして使用されてしまうのでバグの原因になります。
1番上に「Option Explicit」と入れておけば実行時に宣言されていない変数があると「宣言されていない変数があります」って表示されて誤字に気づけますよ。
    • good
    • 2

宣言はプログラミング言語として型安全などを提供するための機能です。

主に書き間違えなどを検出しやすくするためにあります。
Excelマクロでは宣言しなくても動くようになっていますが、間違いを検出しにくくなるので宣言した方が良いです。

たとえば
Dim wb As Workbook
と宣言するとwbはWorkbook型と指定しているのでワークブック以外のものを間違って代入しようとすればエラー検出されますが、宣言していないと何でも代入できるのでエラーにならず、思ったのと違う誤った動きをして理由が分からないといったことになりがちです。

人間は間違いを犯しがちなので、間違っていることをコンピュータが検出しやすいように、プログラムの意図をコンピュータに伝えておくことが重要です。宣言はそういう目的で記述します。
    • good
    • 3
この回答へのお礼

以下、ご指南ありがとうございます
確かに、ワークブックを入れる為に作った変数に
他のものを、代入したりする可能性もありますね
⇒当該ミスを防止する為にも役立つんですね
⇒ご指南ありがとうございます


>プログラムの意図をコンピュータに伝えておくことが重要

>ワークブック以外のものを間違って代入しようとすればエラー検出されま>すが、宣言していないと何でも代入できるのでエラーにならず、思ったの>と違う誤った動きをして理由

お礼日時:2025/04/13 09:47

>>しかし、実際に書かなくても動きます



書かなくても、記述内容から推測してうまく処理できることが多いのでしょう。

でも、エクセルも、うまく推測できない場合もあるでしょうから、「宣言してね」となっていると思っています。
    • good
    • 1
この回答へのお礼

変数の方を 数字や文字列等、エクセルが推測して処理をしくれているん
ですね。解説ありがとうございます

>書かなくても、記述内容から推測してうまく処理できることが多いのでしょう。

お礼日時:2025/04/13 09:09

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A