VBA の配列についてご教授下さい。 前提条件 ・A列には通番がn行まで入っています。途中に空白行はありません。
VBA の配列についてご教授下さい。 前提条件 ・A列には通番がn行まで入っています。途中に空白行はありません。 ・B列には、「20210301」のように日付がスラッシュ抜きの数字で入っています。 ただし、B列は日付が入っていない行等もあります。 ・C列にB列を参照し「202103」と年月を、最終行まで入力をしたい。 Sub 配列() Dim n n = Cells(Rows.Count, 1).End(xlUp).Row Dim MyArray ReDim MyArray(1 To n, 0) Dim i For i = 1 To n MyArray(i, 0) = Left(Cells(i, 2), 6) Range(Range("C1"), Cells(Rows.Count, 1).End(xlUp)).Offset(0, 2) = MyArray Next i End Sub 最終行の取得をA列でしたいので上記のように記述して実行してみると C,D,E列すべてに同じデータが入ってしまいます。 前提条件のように、C列にだけ当該データを反映したい場合はどこの記述を直すと いいのでしょうか? 配列がなかなか習得できずに困っていました。よろしくお願いいたします。
Visual Basic・8閲覧
ベストアンサー
セルを配列に入れて処理する場合は Variant型の変数に範囲を代入(二次元配列になる)して 更新後 元の範囲に戻してあげるのが楽ですよ・ 例えば 確認(テスト)はしていないが↓のような感じ Sub 配列() Dim n n = Cells(Rows.Count, 1).End(xlUp).Row Dim MyArray As Variant MyArray = Range(Cells(1,1),Cells(n,3)) ' A1~Cnを二次元配列に入れる Dim i For i = 1 To n MyArray(i, 3) = Left(MyArray(i, 2), 6) Next i Range(Cells(1,1),Cells(n,3)) = MyArray End Sub
質問者からのお礼コメント
やっと配列の使い方が回答例をみてわかりました。 他にも応用効きそうなのでとても助かりました。 これで実行処理3分くらいかかっていたのが解消できそうです(笑)
お礼日時:3/1 21:58