補足での疑問について
A2:A5に1,2,3でも入れて
下記を実行してご覧。
Sub test01()
x = Range("A2:A5")
Range("C3:C6") = x
End Sub
C3:C6にそれらの値が入るだろう。
XはVARIANT型の変数で
何もデータ型を宣言してないのでVARIANT型になる。
エクセルVBA特有?の便利で、面白い機能だ。
配列のようなイメージなんだが、配列ではないようだ。
参考
http://pc.nikkeibp.co.jp/article/NPC/20070803/279065/ など。
ーー
Sub test02()
Dim x As Integer
x = Range("A2:A5")
Range("C3:C6") = x
End Sub
にすると形が一致しませんのエラーになる。
今はそういうものとしておくのが良かろう。将来どういう仕組みになっているのか勉強して。
ーーー
しかしこの質問を読むと、頭がくらくらして判りにくい
(1)実例模擬データを小数作って説明する
(2)人間が手だ行でやるとし束愛の、作業ステップに沿って説明する。
(3)重点を絞って、質問文(内容)簡潔にする
余分な部分があるのではないか。
そういうことを今後の質問では留意をおねがいしますよ。
mu2011様 ありがとうございます。
ご教示いただいた内容から、自分なりに、データの可変に対応したものを次のように作成してみました。不細工ですが…
Dim st1, st2 As Variant
Dim my1Lr, my2Lr As Integer
my1Lr = Sheets("sheet1").Range("D65536").End(xlUp).Row
my2Lr = Sheets("sheet2").Range("D65536").End(xlUp).Row
st1 = Worksheets("sheet1").Range(Cells(1, 1), Cells(my3Lr, 4))
With Worksheets("sheet2")
st2 = .Range(.Cells(1, 1), .Cells(my4Lr, 4))
End With
For i = 1 To my1Lr
For j = 1 To my2Lr
If st1(i, 1) = st2(j, 1) Then
st1(i, 2) = st2(j, 2) 'B列
st1(i, 3) = st2(j, 3) 'C列
Exit For
End If
Next
Next
Worksheets("sheet1").Range(Cells(1, 1), Cells(my1Lr, 4)) = st1
End Sub
これで一応動くようなのですが、やはり最終行がない場合は、動きません。
最終行の機能を教えていただければと思います。
何度も申し訳ありません。
シート上で更新すると画面更新等、多量になれば時間がかかります。
案1.表更新処理の前後で画面更新を停止/開始を行う。
Application.ScreenUpdating = False '画面更新停止
(更新処理)
Application.ScreenUpdating = True '画面更新開始
案2.各シートデータ範囲のデータを変数として取り込み、処理完了後にコピーする。
データは、Cells(行,列)と同様に変数(行,列)として取り扱える。
以下に配列を使用したサンプルコードです。
Dim st1, st2 As Variant
st1 = Worksheets("sheet1").Range("A1:G7000")
st2 = Worksheets("sheet2").Range("A1:G7000")
For i = 1 To 1000
For j = 1 To 7000
If st1(i, 1) = st2(j, 1) Then
st1(i, 2) = st2(j, 2) 'B列
st1(i, 3) = st2(j, 3) 'C列
Exit For
End If
Next
Next
Worksheets("sheet1").Range("A1:G7000") = st1
お礼
mu2011様 日付をまたいで、ご丁寧にありがとうございました。最後にいただいた回答で理解できました。またご指摘いただいた点も、今後のために大変参考になりました。またお世話になるかもしれませんが、よろしくお願いします。本当にありがとうございました。