[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Next forを使って複数の定数を順に処理していく方法』(Pchan)
VBAで初めに定数を複数宣言しておいて、Next forを使って宣言した複数の定数を順に処理していく、というコードを作りたいと思っています。
マクロを実行したときに、まずメッセージボックス「C:\Users\user\Downloads\a\」、次にメッセージボックス「C:\Users\user\Downloads\b\」と出すイメージです。
以下のコードではうまくいかないのですが、どのような方法がある教えていただけないでしょうか。
Const path1 = "C:\Users\user\Downloads\a\"
Const path2 = "C:\Users\user\Downloads\b\"
Sub a()
For i = 1 To 2 MsgBox (path & i) Next i End Sub
< 使用 Excel:Excel2019、使用 OS:Windows10 >
http://officetanaka.net/excel/vba/variable/07.htm
(OK) 2020/06/04(木) 00:09
>VBAで初めに定数を複数宣言しておいて、Next forを使って宣言した複数の定数を順に処理していく、というコードを作 >りたいと思っています。
よく見てませんでした。
参考まで。
https://www.moug.net/tech/exvba/0150119.html
(OK) 2020/06/04(木) 07:28
私は配列の利用でよいと思いました。
Option Explicit Sub test() Dim path(1 To 2) As String Dim i As Long
path(1) = "C:\Users\user\Downloads\a\" path(2) = "C:\Users\user\Downloads\b\"
For i = 1 To 2 MsgBox path(i) Next i End Sub # なお、"C:\Users\user\Downloads\" までは共通なので外に出すとかは別の話 # という整理です。 (γ) 2020/06/04(木) 07:43
path1、path2はプロシージャを超えて参照するので、dimをpublicとして宣言場所をプロシージャの前にしたのですが(A)、「コンパイルエラー プロシージャの外では無効です」とエラーが出ます。
A
−−−−−−−−−
Public path(1 To 2)
path(1) = "C:\Users\user\Downloads\a\"
path(2) = "C:\Users\user\Downloads\b\"
Sub test()
For i = 1 To 2
MsgBox path(i) Next i
End Sub
−−−−−−−−−
publicではなくdimにしてプロシージャ内で宣言すると(B)、エラーが出ずに意図した通りに動きますので、そこが原因だというところまではわかるのですが、何が問題なのでしょうか。
B
−−−−−−−−−
Sub test()
Dim path(1 To 2)
path(1) = "C:\Users\user\Downloads\a\"
path(2) = "C:\Users\user\Downloads\b\"
For i = 1 To 2
MsgBox path(i) Next i
End Sub
−−−−−−−−−
(Pchan) 2020/06/04(木) 20:43
Dim path(1 To 2) As String
Sub test1()
path(1) = "C:\Users\user\Downloads\a\" path(2) = "C:\Users\user\Downloads\b\" End Sub
Sub test2()
Dim i As Integer For i = 1 To 2 MsgBox path(i) Next i End Sub (OK) 2020/06/04(木) 20:58
最近?ミスリードが多いのと(前からかぁ(^^;)回りくどい気もしますが、、 最初のコード最大限尊重すると。。こんな感じでしょうか????
Option Explicit Const path1 = "C:\Users\user\Downloads\a\" Const path2 = "C:\Users\user\Downloads\b\" Sub a() Dim i Dim x x = Array(path1, path2) For i = LBound(x) To UBound(x) MsgBox x(i) Next i End Sub (SoulMan) 2020/06/04(木) 21:17
>Public path(1 To 2) こちらは、変数宣言
>path(1) = "C:\Users\user\Downloads\a\" >path(2) = "C:\Users\user\Downloads\b\" こちらは、命令文(プログラムの中枢部分) (BJ) 2020/06/04(木) 21:27
定数と変数の違い、それと、宣言文と実行文の違い、を知らなくてはいけません
変数は、プロシジャ中で代入することができて、その値は可変です。 定数は、代入することは出来ず、値は不変です。その値は宣言文で定義されます。
さて、VBAでは、添え字付きの変数を配列変数と呼びます。 VBAでは、配列変数は使えますが、配列定数は使えません。 配列定数を使える言語(処理系)もありますが、VBAでは使えません。
話が変わって、 宣言文は、変数や定数の定義部なので、プロシジャの外にあってもいいです。 宣言文の位置はその変数や定数のスコープ(影響範囲というか使える範囲)に影響を与えますが、ちょっとおいときます。
定数は宣言文で、同時にその値を定義することが出来ます。 変数は宣言文では、値を決めることが出来ず(型によって初期値は決まってますが)、 変数にどっかで値を代入しないといけないです。 ただし、代入文は実行文なので、プロシジャの中にないといけません。
まとめると、 ・添え字をつけない定数は、プロシジャの外で宣言できて、値も同時に決められる ・VBAでは、添え字をつけたら必ず配列変数(添え字付きの定数は使えない)であり、 配列変数へ値を代入するのは実行文なので、プロシジャの中にないといけない
おしまい
書いてみたけどわかりづらですね。 どこかにわかりやすい解説がありそうなものだけど (´・ω・`) 2020/06/04(木) 21:59
エラーの原因は以下の通り理解しました。
・定数は宣言も代入もプロシージャ外で可能、変数は宣言はプロシージャ外で可能だが、代入はプロシージャ内でのみ可能
・今回は代入する値を変える必要があるので、定数は使えず配列変数が使えそう
そして解決策はみなさんがいくつか出していただいているので、それらを見ながら考えてみます。
(Pchan) 2020/06/04(木) 22:12
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.