
VBAで変数の値をセルに表示させる
プログラム初級者です。
配列変数を使わずに
例えば、変数a1,a2・・・a10
の10個の変数を使ってセルにその値を表示する場合に
a1,a2・・・a10をfor next を使って、省略化するにはどうすればよいでしょうか?
具体的には例えば、(私が書いたのは)
Sub aaa()
Dim a1,a2,a3,a4,a5,a6,a7,a8,a9,a10 as Integer
Dim i as Integer
a1=1
a2=2
a3=3
a4=4
a5=5
a6=6
a7=7
a8=8
a9=9
a10=10
For i = 1 to 10
ax= "a" & str(i)
Cells(i, 1).value = ax
Next
End sub()
結果は
a 1
a 2
a 3
a 4
a 5
a 6
a 7
a 8
a 9
a 10
と表示されました。
a1と文字列をとってそれを変数と見なしさらにその変数の値を表示させたいのです。
ちなみにaxの値はa 1
とaと1の間に半角スペースが入ってしまいます。
どうすればいいか行き詰まっています。
解決方法はあるでしょうか?
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
>配列変数を使わずに
>例えば、変数a1,a2・・・a10
基本的には、個別に変数をいれたものは、VBAだけの範疇では、名前の文字列を、変数自体に変換して取り出すことは、私の知っている範疇では不可能です。たぶん、メモリのアドレスが取れれば取れるは思いますが、VBAの範疇ではないと思います。
配列変数を知っていて、配列変数を使わないということですか?なぜ、配列変数を使わないのか、理由が分かりません。配列変数も初級の範疇です。
もし、実務で使うなら、もっと具体的なものでないと回答にはなりません。
外部オブジェクトで取るというなら別かもしれませんが、コレクションでも、オブジェクトでも、いわゆるIndex(添字)の構造を持ったのを用意すれば方法はあるけれども、改めて値を入れなおさないといけません。しかし、コレクションとかオブジェクト使うというのは、この程度ではわずかですが、結果的には、オーバーヘッドが掛かります。
>ax= "a" & str(i)
変数を文字列としても、それは別ものです。それに、"str 関数"は、Str 関数でしょうけれど、負の符号のスペースが用意されていますから、正の時は、符号分がワンスペースあきます。通常は、CStr関数を使います。
それに、
Dim a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 As Integer
VBAでは、こういう書き方はしません。a1--a9 まで、Variant になります。
a10 だけが、Integer になります。このように個別に書かなくてはいけません。
Dim a1 As Integer, a2 As Integer, a3 As Integer, a4 As Integer, a5 As Integer
・・・・・
それに、最後の End Sub() という、()は不要です。
配列ですべきですね。動的配列にするのか、配列を固定にするかはどちらでもよいですが、型が決まっているなら、String型とか、Long型にしますが、あれこれ面倒なら、Dim (1000) As Long としてしまいます。しかし、代入されていないものを判別したりする場合は、Variant 型にして、代入されている場合と、Empty値を区分けします。
もう一度、最初から、変数の値の代入部分かから、考え直したほうが良いのではないでしょうか?
No.4
- 回答日時:
質問者は
Dim a1,a2,a3,a4,a5,a6,a7,a8,a9,a10 as Integer
と定義しているのに
ax= "a" & str(i)
でわざわざ文字(string型)に変換しているのでaxには"a 1"という文字の値が代入されて結果,書き込みの表示になるのです、axを数値型に後で変換することは"a 1"という文字コードを数値で取り出すことになります。
失礼ですが、基本的なデータ型を学んでください。
ax=a+val(i)
として数値型(Integer)を崩さなければ(ai)に代入された値をaxに入れる事が出来るのではないでしょうか。
Sub aaa()
Dim a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 As Integer
Dim i As Integer
a1 = 1
a2 = 2
a3 = 3
a4 = 4
a5 = 5
a6 = 6
a7 = 7
a8 = 8
a9 = 9
a10 = 10
For i = 1 To 10
ax = a + Val(i)
Cells(i, 1) = ax
Next
End Sub
No.3
- 回答日時:
配列を使う代わりに、コレクション(ここでは仮に「acol」という名にしています)を宣言すると、以下のようなプログラムになり、正しい実行結果が得られます。
Sub aaa()
Dim a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 As Integer
Dim i As Integer
Dim acol As New Collection
a1 = 1
a2 = 2
a3 = 3
a4 = 4
a5 = 5
a6 = 6
a7 = 7
a8 = 8
a9 = 9
a10 = 10
acol.Add (a1)
acol.Add (a2)
acol.Add (a3)
acol.Add (a4)
acol.Add (a5)
acol.Add (a6)
acol.Add (a7)
acol.Add (a8)
acol.Add (a9)
acol.Add (a10)
i = 1
For Each ax In acol
Cells(i, 1).Value = ax
i = i + 1
Next
End Sub
No.2
- 回答日時:
配列変数を使わないと言うことなので
以下のような感じでいかがですか
Dim a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 As Integer
Dim mdic As Object, i As Long
Set mdic = CreateObject("Scripting.Dictionary")
mdic.CompareMode = vbTextCompare
mdic("a1") = 1
mdic("a2") = 2
mdic("a3") = 3
mdic("a4") = 4
mdic("a5") = 5
mdic("a6") = 6
mdic("a7") = 7
mdic("a8") = 8
mdic("a9") = 9
mdic("a10") = 10
For i = 1 To 10
Cells(i, 1).Value = mdic("a" & i)
'Cells(i, 1).Value = mdic("a" & Format(i, "####"))'とか
Next
ただ配列を使うと以下のようにかなり短いコードに出来ますが…
Dim a(10) As Integer
Dim i As Long
For i = 1 To 10
a(i) = i
Next
For i = 1 To 10
Cells(i, 1).Value = a(i)
Next
多分例なので無意味な変数代入があるのだと思いますが、実際は
For i = 1 To 10
Cells(i, 1).Value = i
Next
で終わるコードですよね。
> ちなみにaxの値はa 1
> とaと1の間に半角スペースが入ってしまいます。
これはstrのHELPを見てください理由が分かります。
No.1
- 回答日時:
そういうことがしたいなら、変数の宣言から変えないといけません。
以下のようにします。
Sub aaa()
Dim a(1 To 10) As Integer
Dim i As Integer
a(1) = 1
a(2) = 2
a(3) = 3
a(4) = 4
a(5) = 5
a(6) = 6
a(7) = 7
a(8) = 8
a(9) = 9
a(10) = 10
For i = 1 To 10
Cells(i, 1).Value = a(i)
Next
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Visual Basic(VBA) vba 隣のセルに値がある行だけ関数をコピー&ペーストしたい A1 100001 A2 100002 1 2023/01/28 14:29
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- Visual Basic(VBA) VBA 配列を使ったコードに直していただけますか 4 2023/05/06 15:18
- Excel(エクセル) Excelのマクロで、特定のセルから順番に値を取得したい 5 2022/12/06 15:34
- Excel(エクセル) エクセルのA1~A5の任意のセルを選んだら1、A6~A10のセルなら2と返す設定にしたいと思ってます 6 2023/03/20 18:46
このQ&Aを見た人はこんなQ&Aも見ています
-
EXCELで変数をペーストしたい
その他(プログラミング・Web制作)
-
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
-
4
VBAでセル入力の数式に変数を用いたい
Excel(エクセル)
-
5
もしセルが#N/A"なら~をする・・・には?"
Excel(エクセル)
-
6
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
7
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
8
ファイルを開かずにマクロを実行
Excel(エクセル)
-
9
VBA 数式を残して値をクリアについて
Excel(エクセル)
-
10
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
11
【EXCEL】【VBA】空欄は飛ばして処理する方法を教えて下さい。
Excel(エクセル)
-
12
Rangeメソッドは失敗しました。globalオブジェクトについて
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
彼女のことが好きすぎて彼女の...
-
血液検査の結果が悪くefgrの値...
-
風俗店へ行く前のご飯
-
EXCELで式からグラフを描くには?
-
検便についてです。 便は取れた...
-
VLOOKUP関数を使用時、検索する...
-
尿検査前日に自慰行為した時の...
-
納豆食べた後の尿の納豆臭は何故?
-
値が入っているときだけ計算結...
-
勃起する時って痛いんですか? ...
-
2つの数値のうち、数値が小さい...
-
精子が黄色?
-
精子に血が・・・
-
excelでsin二乗のやり方を教え...
-
イタリアから帰国する際、肉製...
-
【Excelで「正弦波」のグラフを...
-
リンク先のファイルを開かなく...
-
小数点以下を繰り上げたものを...
-
ExcelのVBAでフォームが表示さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
彼女のことが好きすぎて彼女の...
-
イタリアから帰国する際、肉製...
-
2つの数値のうち、数値が小さい...
-
健否~書類の書き方~
-
VLOOKUP関数を使用時、検索する...
-
値が入っているときだけ計算結...
-
小数点以下を繰り上げたものを...
-
エクセルで空白セルを含む列の...
-
EXCELで条件付き書式で空白セル...
-
リンク先のファイルを開かなく...
-
ある範囲のセルから任意の値を...
-
精子に血が・・・
-
エクセルで数式の答えを数値と...
-
風俗店へ行く前のご飯
-
エクセル指定した範囲からラン...
-
一番多く表示のある値(文字列...
-
Excel 数値の前の「 ' 」を一括...
-
ワードのページ番号をもっと下...
-
MIN関数で空白セルを無視したい...
おすすめ情報