質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

3回答

5649閲覧

「For文を使ってA1~A5の値を配列(Array)に格納する。その後、その配列の3番目(A3)の値をB1に表示する。」のやり方を教えてほしい。

fdajo

総合スコア13

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2021/05/24 15:06

編集2021/05/24 15:18

「For文を使ってA1~A5の値を配列(Array)に格納する。その後、その配列の3番目(A3)の値をB1に表示する。」のやり方を教えてほしい。

そもそもコードはあっているか。(arrayに格納するとあるが、arrayは使っていない。。。)
A3の値と異なる値がB1に入力されるのはなぜ。(A5の値が入っていると思う)
エラー原因はなぜ。

追加質問
・arrayにforで取得したセルの値を入れることができれば解決できると思うが、やり方が分からないのでそれができるのであれば教えてほしいです。

例えば
for~nextで取得した値をarray()に一つずついれる方法

上記を教えてほしいです。

試したこと

vba

1'ここのコードはセルに値を入れるコード 2Sub41rnd() 3 4 Dim i As Integer 5 6 Randomize 7 8 Range("c2") = Int(Rnd * 10) + 1 9 10 For i = 1 To 5 11 Cells(i, "a") = Int(Rnd * 10) + 1 12 13 Next i 14 15 Range("A6") = WorksheetFunction.Sum(Range("A1:A5")) 16 17 18End Sub

vba

1'試したこと1回目 2'ここが題名(For文を使ってA1~A5の値を配列(Array)に格納する。その後、その配列の3番目(A3)の値をB1に表示する)のコード 3 4Sub42forarray() 5  Dim a As Variant 6 Dim i As Long 7 8 9 10 For i = 0 To 4 '配列aにA1~A5の値を格納 11 a = Cells(i + 1, 1) 12 13 i = i + 1 14 15 Next i 16 17 Cells(1, "b") = a 'A3の値をB1に表示 18 19 20 21End Sub

vba

1'試したこと2回目 2Sub42forarray() 3 4 Dim a As Variant 5 Dim i As Long 6 7 8 9 For i = 0 To 4 '配列aにA1~A5の値を格納 10 a = Cells(i + 1, 1) 11 12 i = i + 1 13 14 Next i 15 16 Cells(1, "b") = a(2) 'A3の値をB1に表示 17 18 19End Sub

1回目の実行結果画像
イメージ説明

2回目の実行結果画像
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

詳しい解説は先の回答を参照して頂ければわかると思います。

しかし、配列やarrayを使いこなすのは、難しいので単純なコピーでなく配列に格納する意図はなんでしょうか?

配列を使わない簡素なやり方をご提案できればと思います。

変数、配列、Arrayを混同されているようなので、一旦整理して頂いた方がいいかと思います。

ざっくりとした例えです。

変数 田中="はい"
独り身の田中さん 田中さんを呼べば返事してもらえる

配列 田中(0)="夫" 田中(1)="夫人" 
田中さん夫婦 田中さんを呼んでもどちらかわからないので返事してもらえない。

Array 田中=array("101号","102号","103号")等
アパート全員が田中さん 田中さんを呼んでも誰なのかわからないので返事してもらえない。

それぞれ、用途があるので、違いをしっかりと勉強して下さい。

投稿2021/07/21 02:47

shinyakita

総合スコア39

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

相談者様のソースコードを見ると、「配列」と「Array関数」の区別ができていないように見受けられます。

配列は英訳すると確かに"Array"ですが、Excel VBAにおいて「配列」と「Array」は全く別物です。

配列の使用法

Excel

1Dim i as Integer 2Dim a(5) as Long ' 要素数(5)が必要、型はLongで良い 3 4For i=1 To 5 5 a(i) = Cells(i, 1) 6Next i 7 8Cells(3, 2) = a(3)

要素数5の配列a(5)を宣言すると、a(0)~a(5)の領域が確保されます。
今回の場合、a(1)~a(5)を利用した方がスマートでしょう。

Array関数の使用法

Excel

1Dim a as Variant ' 要素数は不要、型はVariantにする必要がある 2 3a = array(3, 4, 10, 4, 5) ' a(0)=3, a(1)=4, a(2)=10, a(3)=4, a(4)=5 4 5cells(3,2) = a(2) ' 3番目の要素はa(2)に格納されている

Array関数を利用する場合、代入先aの型はVariantにしなければなりません。
またArray関数を利用した場合、値はa(0)から順番に代入されます。

相談者様のケースでは、セルA1~A5に値が入っているため、「配列」を利用することになります。

「試したこと1回目」は以下のようになっています。

Excel

1For i = 0 To 4 '配列aにA1~A5の値を格納 2 a = Cells(i + 1, 1) 3 4 i = i + 1 5Next i

この場合aの値を毎回上書きしています。
a = Cells(1, 1)
a = Cells(3, 1)
a = Cells(5, 1)
ついでにいえば、i=i+1は不要です(Next iの行でi=i+1の処理をやっているため)。
この結果、Cells("b", 1) = aではcells(5, 1)の値が代入されます。

「試したこと2回目」では、配列ではない変数aの「要素」a(2)を参照しようとしています。
変数aと配列変数a(2)では「型」が違うので、「型が一致しません」とのエラーが表示されます。

説明が長くなりましたが、結論として配列とArray関数は別ものと捉えていただければと思います。

投稿2021/07/20 23:48

toitoburuku9

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

VBA

1Sub 問42forarray() 2 3 Dim a(4) As Variant 4 Dim i As Long 5 6 For i = 0 To 4 '配列aにA1~A5の値を格納 7 a(i) = Cells(i + 1, 1) 8 Next i 9 10 Cells(1, "B") = a(2) ' その配列の3番目(A3)の値をB1に表示 11 12End Sub 13

投稿2021/05/24 22:23

編集2021/07/21 00:21
jinoji

総合スコア4585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問