- ベストアンサー
VBAで100行ごとに列を変更してコピーする方法
- VBAを使って、ExcelのA列とB列のデータを100行ごとに列を変えてコピーする方法について教えてください。
- 具体的な処理としては、別シートに100行ごとにデータを分割し、列を変更してコピーするサンプルコードを使用します。
- この方法を使えば、データを簡単に分割できるだけでなく、同じシート内で処理を行う場合でも応用することができます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
手抜き版です。 A,B列の102行目以降を削除する処理は入れてません。 Sub Sample() コピー行 = 100 回数 = Int((Range("A1").End(xlDown).Row - 2) / コピー行) For i = 1 To 回数 nRow = i * コピー行 + 2 Range(Cells(2, i * 2 + 1), Cells(1 + コピー行, i * 2 + 2)) = Range(Cells(nRow, 1), Cells(nRow + コピー行 - 1, 2)).Value Next i End Sub
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
繰り返し法ですが、コピー貼り付などを使って、コード行数を最小限(結果6行、MAGBOX除いて)になるように考えた。 データは、1シートのA,B列にあり、結果をC列以右に、コードと名称の、2列づつ出すとして Sub test01() lr = Range("a100000").End(xlUp).Row MsgBox lr bs = Int(lr / 20) + 1 MsgBox bs For i = 1 To bs ActiveSheet.Range("A" & ((i - 1) * 20 + 2) & ":B" & (i * 20) + 2).Copy Cells(2, (i * 2 + 1)) Next i End Sub ただし当方のテストでの確認のため20行ごとに分割してやってみたので、100行ごとの場合は、VBAコード内で、20のところを、すべて100に修正してください。
お礼
imogasi様 ご回答いただきありがとうございます。 できましたら、1~101行まではA列B列のままで、 102行目をC列以降に100行づつコピペしたかったのです。 申し訳ありません。
- SI299792
- ベストアンサー率47% (772/1616)
すみません、絶対参照にするのを忘れていました。また、スペースの時0が出ます。 少し長いですが、 C2 =IF(INDEX($A:$A,ROW(A2)+COLUMN(A2)*50-50,1)="","",INDEX($A:$A,ROW(A2)+COLUMN(A2)*50-50,1)) D2 =IF(INDEX($B:$B,ROW(A2)+COLUMN(A2)*50-50,1)="","",INDEX($B:$B,ROW(A2)+COLUMN(A2)*50-50,1)) にして下さい。
お礼
SI299792様 ご回答ありがとうございます。 申し訳ありませんが、VBAを希望しております。
- SI299792
- ベストアンサー率47% (772/1616)
C2 =INDEX(A:A,ROW(A2)+COLUMN(A2)*50-50,1) D2 =INDEX(B:B,ROW(A2)+COLUMN(A2)*50-50,1) として、右下 101行までコピペすれば、関数でできます。 値にしたければ、コピー、形式を選択して貼り付け、値を行ってください。 どうしてもVBA がいいなら、作りますが、これから忙しいので明日になります。他の人に作ってもらった方が早いです。
お礼
SI299792様 ご回答ありがとうございます。 申し訳ありませんが、VBAを希望しております。
お礼
mt2015様 ご回答いただきありがとうございます。 希望通りの処理が出来ました。 102行目以降を削除する処理は、がんばってみます。 いつもご回答いただき、感謝しております。