重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

vba初心者です。
自力で調べても分からないので、ご教示いただけると大変助かります。

具体的には、
「シート1」のB列、C列、K列、L列について、それぞれB2、C2、K2、L2から下へデータを入力し、
(何行目まで入力するかは固定ではありません)

このデータを、「シート2」の、それぞれC列、D列、K列、L列へ転記させたいのです。
このとき、C、D、K、L列には既に値が入っているので、最下行の空白セルから追加する形としたいのです。(何行目が最下行かは固定ではありません。)

この場合、どのようなコードを書けば良いのでしょうか?
分かりづらい説明となってしまいましたが、よろしくお願いします。

A 回答 (5件)

こんにちは、


処理内容は、手作業の方が良いのではと思いますが、VBAに興味があるのでしょうか?
この処理方法は、いくつかありますが、よく使う処理(基本的な処理)です
見つからないと言う事ですが、検索力も学習するには必要ですね。

すでに#2さんの回答にあるように、飛んでいるセル範囲はダメなので
シート1のB、C と K、L の2つのグループ
シート2のC、D と K、L 2つのグループに分けて処理する事になります

メイン処理はコピペでも良いと思いますし、データであれば、書式は関係なさそうなので代入式でも良いかもしれません。
=で結ぶ場合
シート1.Range("B2:C2").Value = シート2.Range("C2:D2").Value
同じ大きさ(範囲サイズ)が必要

最下行があるので、行番号を取得する必要がありますね。
入力するデータに空白行がない場合は、すでに回答にある方法で取得する事が出来ます。
もし、空白セルが発生する可能性がある場合は、
シート1.Cells(Rows.Count, "B").End(xlUp).Rowで取得します。

一つ大事なのは、
Cells(Rows.Count, "B") 又は、Cells(Rows.Count, 2) のBの部分は、
必ず入力される列にした方が間違いないでしょう。

理由は、コードの意味を理解すればわかると思います。"B"又は2の場合
シート1のB列でCtrl+↓押下 、Ctrl+↑押下 (xlUp).Row で
選択されるセルの行番号です。新規行の場合はそれに+1で取得できます。

2度3度使用する場合は、多くの場合、変数に代入します。
(整数型ですが、行番号の場合、長整数型 Longが良いです。

代入式の場合、左右を同じ大きさ(セルの数)にするので少し判り難くなりますので、Copyで実行する場合のサンプル、、です。(CD,,BCのみ)

Dim LastRow As Long, NewRow As Long
LastRow = Sheets("シート1").Cells(Rows.Count, "B").End(xlUp).Row
NewRow = 上を見て考えてみてください。
Sheets("シート1").Range("C2:D" & LastRow).Copy
Sheets("シート2").Range("B" & NewRow).PasteSpecial Paste:=xlValues
範囲を変えてもう一度

Application.CutCopyMode = False

代入式で実行する場合は、.Resizeを使うのが良いと思います。

VBA Resize で検索
    • good
    • 1
この回答へのお礼

ありがとうございました。出来ました。

お礼日時:2021/02/02 17:32

一番下にデータがあるセルを見つける方法は知っていますか?


最下部の行から上に順に検索していくんです。
これは途中に空白セルがあっても確実に一番下のデータがあるセルを見つけるための有名なアルゴリズムです。

まあ、質問のケースなら空白セルは無いようですので、1行目から下へ順に検索すればよいようですけどね。

そんなわけで、
調べればクリティカルな答えを見つけられますよ。


・・・余談・・・

自分ならその程度のことは手作業で行う。
その方が手っ取り早く処理が終わる。
また、無駄なコードを埋め込まなくてもいい。

Sheet1で該当する範囲をまとめてコピーした後
Sheet2のB1セルを選択後に
 Ctrl+↓
で、最後にデータが入力されているセルにジャンプするので、
続いて
 ↓
で、最後にデータが入力されているセルの下のセルを選択できます。
この状態で貼り付けをすればいい。

なお、この操作を ”マクロの記録” でマクロ化すると、セル番地を指定してジャンプするので、質問のケースでは使い物になりません。
    • good
    • 2
この回答へのお礼

ありがとうございました!参考になりました。

お礼日時:2021/02/02 17:32

Dim Last_Row As Long



Last_Row = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Cells(Last_Row + 1, 3).Select

こちらでいかがでしょうか?
Cells(Last_Row + 1, 3).Selectの3を変えると左右に移動します。
    • good
    • 1
この回答へのお礼

ありがとうございました。なかなかできませんが、参考にさせていただきます!

お礼日時:2021/02/02 17:31

マウスでセル範囲を選択しコピペしたとしても隣同士の2組の列なので2回で終わりになるかと。

    • good
    • 1
この回答へのお礼

ありがとうございました。

お礼日時:2021/02/02 17:30

Cells(1, 1).End(xlDown).Row

    • good
    • 1
この回答へのお礼

ありがとうございました。

お礼日時:2021/02/02 17:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A