アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAど初心者です。どうしても最終行のデータを選んだシートにコピーできません。 LastRow.Selectのところで、止まってしまいます。どのように行を設定していいのかさっぱりわかりません。どなたか、ご指導のほどよろしくお願いします。

Sub copy_last_line()
Dim LastRow As Long
Sheets("Sheet1").Select
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
LastRow.Select

Selection.Copy
Sheets("Sheet2").Select
Range("A1").Select
ActiveSheet.Paste
Sheets("Sheet1").Select
Range("A1").Select
End Sub

A 回答 (7件)

こんばんは!


ざっとコードを拝見すると

>LastRow.Select
でエラーになるのでは?

LastRowは変数の宣言をしているとおり、長整数型の整数ですので選択しようがありません。

>Cells(LastRow, 1).Select
にしてみてはどうでしょうか?m(_ _)m
    • good
    • 0

どのシートモジュールに書かれているか不明ですがSheet2以外のモジュールでしたら



Sheets("Sheet2").Cells(LastRow, 1).Select

のようにシート名から指定する必要があります。それ以降のコードについても同じです。
    • good
    • 0

「シート1のA列にデータが縦に並んでおり、その最終行のデータをシート2のA1セルにコピーする」



という解釈でよろしいですか?

Sub Test()

Cells(Worksheets(゛sheet1゛).Rows.Count, 1).End(xlUp).Copy

Worksheets(゛sheet2゛).[A1].PasteSpecial

End Sub


また、VBAを使わなくても、
sheet2のA1セルに、

=LOOKUP(10^10,Sheet1!A:A)

と書く方法もあります。

この回答への補足

皆様、回答本当にありがとうございました。初心者なので、キチンと説明ができていませんでした。シート1で最後の行のデータを全部、コピーをしたいのですが、うまく説明できず、セルだけを選んだコードにしてしまいました。シート1で選んだ最終行だけををシート2のデータの最終行の下に(空白になっているところに)、コピーをするというのがさいしゅうもくてきなのですが、、、、下のようにコードを書くとシート1の最終行だけではなく最終行の上のデータまでコピーをしてしまいます(2行ほど)。RANGEの設定の仕方がわかりません。よろしくお願いします。
Sub copy_last_line2()

GYO1 = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
GYO2 = Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row + 1

Sheets("Sheet1").Select
Range(Cells(3, 1), Cells(GYO1, 18)).Copy
Sheets("Sheet2").Select
Range("A" & GYO2).Select
ActiveSheet.Paste
Application.CutCopyMode = False

End Sub

補足日時:2014/06/03 11:02
    • good
    • 0

あ、失礼。


後のLOOKUPを使うやつは数値データの時のみです。
    • good
    • 0

Range(Cells(3, 1), Cells(GYO1, 18)).Copy から察するところ


シート1はA列からR列までデータがあるのですね?

Range(Cells(3, 1), Cells(GYO1, 18)).Copy
↑はシート1のA列の3行目からR列の最終行までコピーなので
最終行だけの一行コピーではなくボックスコピーになります。

貴殿のスクリプトをなるべくそのまま修正すると

Sub copy_last_line2()

Dim GYO1 , GYO2 As Long

'シート1の最終行
GYO1 = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
'シート2の最終行の一行下
GYO2 = Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row + 1

'シート1を選択
Sheets("Sheet1").Select
  'シート1のA3からR列の最終行までコピー?このままだとボックスコピーになります。
  'Range(Cells(3, 1), Cells(GYO1, 18)).Copy
'シート1のA列最終行からR列最終行を一行だけコピー
Range(Cells(GYO1, 1), Cells(GYO1, 18)).Copy

'シート2を選択
Sheets("Sheet2").Select
  'シート2のA列の最終行のセルを選択したい?
  'Range("A" & GYO2).Select
'シート2のA列の最終行のセルを選択
Cells(GYO2, 1).Select
'コピーした行をペースト
ActiveSheet.Paste
Application.CutCopyMode = False

End Sub

となりますが、いかがでしょうか?
    • good
    • 0
この回答へのお礼

mogurun さん、丁寧な解説をありがとうございました。教えていただいだことをよく理解するようにして、もう少し頑張ってみます。ありがとうございました。

お礼日時:2014/06/04 20:49

No.1です。



>シート1で選んだ最終行だけををシート2のデータの最終行の下に(空白になっているところに)、コピーをする・・・

結局、こういうコトでしょうか?

Sub Sample1()
Dim lastRow As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
With Worksheets("Sheet1")
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
.Cells(lastRow, "A").Resize(1, 18).Copy wS.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
End With
End Sub

※ Sheet1の最終行のA~R列のデータを
Sheet2のA列最終行の1行下へコピー&ペーストしています。
※ いちいち選択しないようにしています。m(_ _)m
    • good
    • 0
この回答へのお礼

tom04さん、回答をありがとうございました。さっそく試してみました。tom04さんのようにすらすらとマクロが書けるようになりたいのですが、、、、頑張ります。本当にありがとうございました。

お礼日時:2014/06/04 20:52

「シート1、シート2、共にデータがA列~R列(1列目~18列目)にあり、行数は不定。

ただしA列に空白はないものとする」

という前提であれば、


Dim GYO1 As Long
Dim GYO2 As Long

GYO1=Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row

GYO2=Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row

With Worksheets("Sheet1")
.Range(.Cells(GYO1,1), .Cells(GYO1,18)).Copy
End With

Worksheets("Sheet2").Cells(GYO2 +1,1).PasteSpecial
    • good
    • 1
この回答へのお礼

yaritsusozaiさん、度々の回答ありがとうございます。試してみたら、もちろんきちんとまわりました。レンジの書き方がいまいちなので、本当に助かりました。ありがとうございます!

お礼日時:2014/06/04 20:57

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

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