- 締切済み
エクセルで形式を指定して挿入したいのですが・・・
エクセル作業でマクロを作ろうと思ったのですがうまくいかないので皆様のお知恵を貸していただけませんでしょうか。 まずSheet1にn行×m列の数字データがあります。 またsheet2にはn’行×m’列の数字データがあります。 このデータは月に一回上がってきて、mおよびm’は毎月同じ ですがnおよびn’は毎月違う数になります。 それを整理しなくてはなりません。 このふたつのシートから共通項目の列A、B、C、D・・・を抜き出して sheet3にN行×M列の数字データを作りたいのです。 ここからが質問なのですが、行数が毎回違うのでマクロを組む時に行数最大値でコピーしようと思うのですが、その場合、sheet1を張った後にsheet2を張ろうとすると、 行最大値をオーバーする為エラーが出ます。 そこで空白を無視して挿入をしたいのですがそのやり方が分かりません。 なにかと分かりにくい文章かと思いますがよろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- merlionXX
- ベストアンサー率48% (1930/4007)
すみません、さらに誤りがありました。 再度訂正します。 Sub test04() Set sh1 = Sheets("Sheet1") Set sh2 = Sheets("Sheet2") Set sh3 = Sheets("Sheet3") sh1.Range("A1").CurrentRegion.Copy sh3.Range("A1") sh2.Range("A1").CurrentRegion.Copy sh3.Cells(sh3.Cells(Rows.Count, "A").End(xlUp).Row + 1, "A") End Sub
- merlionXX
- ベストアンサー率48% (1930/4007)
原因がわかりました。 わたしのミスです。 (o。_。)oペコッ Sub test03() Set sh1 = Sheets("Sheet1") Set sh2 = Sheets("Sheet2") Set sh3 = Sheets("Sheet3") sh1.Range("A1").CurrentRegion.Copy sh3.Range("A1") sh2.Range("A1").CurrentRegion.Copy sh3.Cells(Cells(Rows.Count, "A").End(xlUp).Row + 1, "A") End Sub
- merlionXX
- ベストアンサー率48% (1930/4007)
> sheet3は > 1111 > 2222 > 2222 > 1111 > となってしまいます。 Sheet1 Sheet2とも前提どおりA1からの連続データですか? そうなるはずがないのですが・・・・。 > 行数最大でコピーすると挿入行数が多すぎる 行最大でコピーするという意味がわかりません。A1から65536行(2007ならちがいますが)までコピーしているということですか? > 為、空白を除いて挿入をしたいのです。 挿入の意味がわかりません。貼り付けではだめなのですか?
補足
返信ありがとうございます。 >Sheet1 Sheet2とも前提どおりA1からの連続データですか? そうなるはずがないのですが・・・・。 sheet1に 3333 3333 3333 3333 3333 sheet2に 4444 4444 と入力すると sheet3は 3333 3333 3333 4444 4444 となりました。 Cells(Cells(Rows.Count, "A").End(xlUp) + 1, "A") の指示は何をあらわすんでしょうか? そこら辺が分からず苦戦しております。 >行最大でコピーするという意味がわかりません。A1から65536行(2007ならちがいますが)までコピーしているということですか? その通りです。 >挿入の意味がわかりません。貼り付けではだめなのですか 貼り付けでもいいのですが貼り付ける場所の指定がうまく出来ません。 そこが分かればいいのですが。 挿入ならばどこに挿入しても他のデータを上書きしないで済むので 挿入にしようと思いました。 お手数ですが宜しくお願いいたします。
- merlionXX
- ベストアンサー率48% (1930/4007)
#1のmerlionXXです。 すみません、さきほどのではSheet1のデータの最後の1行にSheet2のデータがかぶさってしまいます。 訂正です。 Sub test02() Set sh1 = Sheets("Sheet1") Set sh2 = Sheets("Sheet2") Set sh3 = Sheets("Sheet3") sh1.Range("A1").CurrentRegion.Copy sh3.Range("A1") sh2.Range("A1").CurrentRegion.Copy sh3.Cells(Cells(Rows.Count, "A").End(xlUp) + 1, "A") End Sub
お礼
わざわざありがとうございました。 マクロとして機能することを確認したしました。 私自身VBAの読み方をもう少し学ばねばと思います。
補足
と思ったら違いました。 このマクロでは 例えばsheet1 1111 1111 1111 1111 sheet2 2222 2222 の場合 sheet3は 1111 2222 2222 1111 となってしまいます。 私はsheet3を 1111 1111 1111 1111 2222 2222 としたいと思っています。 又、sheet1とsheet2の行数が毎回違うので挿入を使いたいと考え ました。その場合に行数最大でコピーすると挿入行数が多すぎる 為、空白を除いて挿入をしたいのです。 どうかよいお知恵がありましたら宜しくお願いいたします。
- merlionXX
- ベストアンサー率48% (1930/4007)
何かよくわからないのですが、要はSheet1のA1から連続したデータ範囲をSheet3のA1以降に貼り付け、その下にSheet2のA1から連続したデータ範囲を付け足すということでいいのでしょうか? それでよければ以下をお試しください。 Sub test01() Set sh1 = Sheets("Sheet1") Set sh2 = Sheets("Sheet2") Set sh3 = Sheets("Sheet3") sh1.Range("A1").CurrentRegion.Copy sh3.Range("A1") sh2.Range("A1").CurrentRegion.Copy sh3.Cells(Cells(Rows.Count, "A").End(xlUp), "A") End Sub
お礼
今度こそ大変ありがとうございました。 無事動きました。 いろいろとVBAのことをいろいろ調べる機会ができて 大変良かったと思っております。 また、最下行の次の空白を選択するというマクロ が載っておりましたのでご参考までに。 Range("A1").End(xlDown).Offset(1,0).Select → 最下行のひとつ下のセル Range("A1").End(xlDown).Offset(0,1).Select → 最下行のひとつ右のセル