- ベストアンサー
エクセルで、毎回違う行数をコピーする方法
- Excel2003を使用している場合、マクロを使用して毎回行数が異なるデータをコピー貼り付けする方法を教えてください。
- コピー元の表を上部と下部に分けて貼り付けたい場合、コピー元1とコピー元2のデータをそれぞれ0~20行までコピーし、上部と下部を表す空白行を挿入することで実現できます。
- 行数は毎回異なる場合でも、コピー元1の1行目からコピー元2の最下行を20行目に揃えて貼り付けることで上部と下部に分けてコピーできます。空白行は必要に応じて挿入してください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
すみません、使い物になりませんでした。 Sub Re7744683c() Dim rCn1 As Long Dim rCn2 As Long rCn1 = Cells(1, "X").End(xlDown).Row rCn2 = Cells(1, "AA").End(xlDown).Row If rCn1 > 21 Then rCn1 = 0 If rCn2 > 21 Then rCn2 = 0 If rCn1 + rCn2 > 20 Then MsgBox "おおすぎます": Exit Sub If rCn1 > 0 Then Range("X:Z").Resize(rCn1).Copy Cells(1, 1) If rCn2 > 0 Then Range("AA:AC").Resize(rCn2).Copy Cells(21 - rCn2, 1) End Sub
その他の回答 (3)
- tsubuyuki
- ベストアンサー率45% (699/1545)
> マクロを使って毎回行数が違うデータをコピー貼り付けをしたいのですが > よく分かりません。コピー先の最終行そろえのコピーの方法もお願いします。 「よく分かりません」の意味がよく分かりません。 どんなマクロを組めばいいかヒントをくれ、と言う意味でしょうか。 代わりにマクロを組んでくれ、と言う意味でしょうか。 前者だと仮定して話を進めると、 (1)コピー先のA1:C20をクリア (2)コピー元1を“そのまま”コピー先1行目に貼り付け ※提示の例だと、X1:Z2をコピー、A1に貼り付け (3)コピー元2を“そのまま”コピー先(20-データ行数+1)行目に貼り付け ※提示の例だと、AA1:AC2をコピー、 (20-データ行数+1)=19なので、A19に貼り付け だけのコードを、ごく単純に書きます。 各コピー元の行数チェックや、合計した行数チェック、 各行のデータの有効性の確認など、複雑に書けば書けると思いますが、 提示された条件だけならコレだけで十分対応できるかと思われます。
お礼
tsubuyukiさま 回答ありがとうございます。 当方、できたマクロを修正するくらいの知識しかありません。 最初に作る時は、マクロの記録で行っておりました。それを手直しする程度。 今回は、それでは対応できず、いろいろ調べましたが分からず質問させて頂きました。 親切に回答ありがとうございました。
- cj_mover
- ベストアンサー率76% (292/381)
こんにちは。 条件として、 元1、元2、合計20件を超えないこと。 元1、元2、ともに1行めから始まっていること(質問文のまま)。 といことなら簡単に Sub Re7744683j() Dim rcn1 As Long Dim rcn2 As Long rcn1 = Cells(1, "X").End(xlDown).Row rcn2 = Cells(1, "AA").End(xlDown).Row Range("X:Z").Resize(rcn1).Copy Cells(1, 1) Range("AA:AC").Resize(rcn2).Copy Cells(21 - rcn2, 1) End Sub とか。
- CaveatEmptor
- ベストアンサー率26% (126/470)
X,Y,Z列とAA,AB,AC列に入っているそれぞれのデータをA,B,C列にコピーするということでしょうか? X,Y,Z列とAA,AB,AC列の1~20行に違うデータが入力されるたびに実行するマクロという理解でいいですか? 質問者様のVBAのスキルによりますが、私なら以下のようなマクロを組むと思います。 1. X,Y,Z列の1~20行に入っているデータを配列(配列1とします)に入れる。 2. AA,AB,AC列の1~20行に入っているデータを配列(配列2とします)に入れる。 3. 配列1をA,B,C列の1行目から下へ向かって書き込む。 4. 配列2を逆順にソートしてA,B,C列の20行目から上に向かって書き込む。 これで処理はできると思いますが、違うデータを処理する場合は、最初にデータが書き込まれる場所A,B,C列の1~20行目はデータを削除しておく必要があります。 質問の意味を誤解しているかもしれないので、とりあえずの回答です。
お礼
CaveatEmptorさま 早速の回答ありがとうございます。 質問の意味はその通りです。 逆順のソートして、下から書き込む、は気付きませんでした。 VBAのスキルはほとんどありません。 配列の意味から勉強します。
お礼
ci_moverさま 回答ありがとうございました。 早速試したところ、思い通りの結果です。 内容については、これから勉強します。 助かりました。ありがとうございました。