プロが教える店舗&オフィスのセキュリティ対策術

VBAを練習中で、現在、配列について練習しております。
”要素”シートのセル範囲を配列に格納し、”出力”シートの特定セルに表示させたいです。
例示してある”要素”シートは数行ですが、この行が数百行有るような場合を想定しています。
変数(i)も変化させ、要素シートの中から特定(i)の行を格納し、出力に表示させたいです。
住所録(データシートが要素で、個々の情報を出力に呼び出す)みたいな感じを想定しています。

自分なりに調べながら書いたコード、シート情報を記載します。
よろしくお願いいたします。


Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim youso As Range
Dim i As Long

Set sh1 = Worksheets("要素")
Set sh2 = Worksheets("出力")

i = 2 '必要に応じてiの値を変える予定あり

Set youso = sh1.Range(Cells(i, 1), Cells(i, 5))

'↑ここでエラーが出ます。

With sh2
.Range("C2") = youso(1) '要素1
.Range("F2") = youso(2) '要素2
.Range("D4") = youso(3) '要素3
.Range("D6") = youso(4) '要素4
.Range("G5") = youso(5) '要素5
End With

End Sub

「【配列の練習中】変数(範囲)に格納した値」の質問画像

A 回答 (3件)

こんにちは。



そのコードですと、配列になっていないのです。
配列を、簡単な方式で書いてみました。すこし複雑になってしまいますね。

Sub 配列方式()
 Dim Sh1 As Worksheet
 Dim Sh2 As Worksheet
 Dim youso As Range
 Dim Ary_youso(4)  '配列変数
 Dim Rng As Range
 Dim i As Long, j As Long, c As Range
 Set Sh1 = Worksheets("要素")
 Set Sh2 = Worksheets("出力")
  i = 2 '行
 With Sh1
  Set youso = .Range(.Cells(i, 1), .Cells(i, 5))
  Next j
  For j = 0 To 4
   Ary_youso(j) = youso(j + 1).Value '配列変数に入れる
 End With
 j = 0
 With Sh2
 Set Rng = .Range("C2,F2,D4,D6,G5")
 For Each c In Rng
  c.Value = Ary_youso(j)  '配列変数からの吐き出し
  j = j + 1
 Next c
 End With
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
どうも僕は配列のなんたるか(?)がそもそも理解できていなようです。
頂いたコード、今の僕には難しいですが、ネット上の解説などとともに読み解き、
自分で理解できるように努力してみます!

お礼日時:2017/03/06 17:05

配列はこの記事が参考になると思います。



http://officetanaka.net/excel/vba/speed/s11.htm
    • good
    • 0
この回答へのお礼

ありがとうございます。”配列”って言うものがよく理解できていないので、ゆっくり読んでみます。

お礼日時:2017/03/06 17:04

とりあえず、以下を修正してください。


「Set youso = sh1.Range(Cells(i, 1), Cells(i, 5))」→「Set youso = sh1.Range(sh1.Cells(i, 1), sh1.Cells(i, 5))」
    • good
    • 0
この回答へのお礼

ありがとうございます。想定していた結果になりました!

お礼日時:2017/03/06 17:03

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