こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel VBA 構文をすっきりさせたい

いつもお世話になっています。
次のような構文を使って、データを別シートに転送するVBAを作成しました。
転送するデータが多い場合、構文が延々続くことになります。
もっとすっきりと記述する方法がありましたらぜひ教えてください。
お力添え、よろしくお願いします。


Sub データ()
With ActiveSheet
Dim last
last = ActiveSheet.Range("b" & Rows.Count).End(xlUp).Row + 1

.Range("b" & last).Value = Worksheets(2).Range("b2").Value
.Range("c" & last).Value = Worksheets(2).Range("c2").Value
.Range("d" & last).Value = Worksheets(2).Range("d2").Value
    以下同様に続く・・・・

End With
End Sub

投稿日時 - 2012-01-20 14:12:23

QNo.7255650

すぐに回答ほしいです

質問者が選んだベストアンサー

コピー元、コピー先が不連続なら、先に配列に格納しては如何でしょう。

Sub データ()
   Dim last
   Dim sFrom, sTo, i
   sFrom = Array("A1", "A3", "B2", "D3")
   sTo = Array("B", "C", "D", "E")
   last = ActiveSheet.Range("b" & Rows.Count).End(xlUp).Row + 1
   With ActiveSheet
      For i = 0 To UBound(sFrom)
         .Range(sTo(i) & last).Value = Worksheets(2).Range(sFrom(i)).Value
      Next i
   End With
End Sub

投稿日時 - 2012-01-20 16:30:10

補足

ご報告が遅くなり申し訳ありません。
まさに求めていた回答で感激です。
ありがとうございました!

投稿日時 - 2012-01-23 10:22:10

お礼

回答をいただきありがとうございます。
実は配列は乗り越えなくてはいけない課題のひとつです。
のちほど結果についてご報告いたします。

投稿日時 - 2012-01-20 20:50:37

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

RangeはCells(行番号,列番号)でも書けるので、繰返し部分はFor~Nextでループにすればすっきりするんじゃないでしょうか。
例えばB列(行番号2)からZ列(行番号26)までならこんな感じ

For i = 2 To 26
.Cells(last, i).Value = Worksheets(2).Cells(2, i).Value
Next

投稿日時 - 2012-01-20 14:35:17

お礼

早々に回答いただきありがとうございます。

実は、元のデータは、A1セル、A3セル、B2セル、D3セル…というふうに
続きになっていません。
教えていただいた式ではそのままA列ならA1セル、A2セル、A3セル…
というように横並びに入ってしまいます。

申し訳ないのですが、その場合は教えていただいた式をどのように
アレンジすればよいのでしょうか。
教えてください。
よろしくお願いいたします。

投稿日時 - 2012-01-20 15:54:33

あなたにオススメの質問