質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

3回答

912閲覧

同じシートに5か所最終行に貼り付けをしたい

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/05/31 02:22

別のシートから列の最終行に5か所貼り付けたい。
試しに3か所してみましたが、
1か所目のD列の下に3個コピーされます。
どうすれば別の列の最終行に貼り付けられますか?
よろしくお願いします。

Sub cell?コピー ()
ActiveSheet.Range("S9").Select
Selection.Copy
Sheets("1").Select

n = Cells(Rows.Count, "D").End(xlUp).Row + 1 Range("D" & n).Select Sheets("1").Paste ActiveSheet.Range("S28").Select Selection.Copy Sheets("1").Select n = Cells(Rows.Count, "E").End(xlUp).Row + 1 Range("E" & n).Select Sheets("1").Paste ActiveSheet.Range("S18").Select Selection.Copy Sheets("1").Select n = Cells(Rows.Count, "F").End(xlUp).Row + 1 Range("F" & n).Select Sheets("1").Paste

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_bauer

2020/05/31 02:47

質問のタイトルは「同じシートに5か所最終行に貼り付けをしたい」、質問の最初の行は「別のシートから列の最終行に5か所貼り付けたい」となっていますが、質問者がしたいことは「別のシートの異なる5つのセルの値を、それとは違うシートの5つの列の最終行のセルに貼り付けたい」という事でしょうか? 質問のコードでは、『ActiveSheet.Range("S9").Select』となっていて、現在開いているシート(ActiveSheet)のセルから値をコピーしているようですが、これは質問の最初に書かれている「別のシートから」と矛盾します。 また、最初の値のコピーは起動時に開いていたシート(ActiveSheet)からですが、その後は『Sheet("1").Select』されているので、ワークシート"1”の中のセルからセルへのCopy&Pasteになっています(別のシートからになっていません)。 まず、どのような事をしたいのかを質問に判りやすく追加して下さい。
退会済みユーザー

退会済みユーザー

2020/05/31 02:51

activeシートから5か所sheet("1")の最終行にコピーをしたいです。
退会済みユーザー

退会済みユーザー

2020/05/31 05:49

activシートからsheet("1")に最終行の下に5か所貼り付けをしたいです。わかりにくくてすみません。
guest

回答3

0

ExcelVBA

1Sub test() 2 Dim rngFrom As Range '転記元 3 Dim rngTo As Range '転記先 4 5 Set rngFrom = Worksheets("Sheet2").Range("S9,S28,S18") 6 'シートの使っているセル範囲に対して 7 With Worksheets("Sheet1").UsedRange 8 Set rngTo = .Rows(.Rows.Count + 1) '最終行の次の「行」 9 End With 10 11 '転記先の「行」のn番目のセルの値へ 12 '転記元の「飛び飛びの範囲(Areas)」のn番目の範囲の値を入れる 13 With rngTo 14 .Cells(4).Value = rngFrom.Areas(1).Value 15 .Cells(5).Value = rngFrom.Areas(2).Value 16 .Cells(6).Value = rngFrom.Areas(3).Value 17 End With 18End Sub

こういうことですかね?
セルの位置の指定にはさまざまな表現方法が用意されていますので、
勉強して語彙を増やしてください。
事前にそのセル範囲を指定して変数に記録しておけば、
あとは「それ」のどの位置か「相対位置」を指定するように、
考える癖をつけておけば、今後に応用が効くと思います。

それから、
手動では、操作したいセルを「選択」することで指示しますが、
VBAでは、文章で遠隔操作するようにシートやセルを指定できる(する)ので、
選択することはやりたいことではないので、選択の命令をすることは無意味です。
また、選択されていることを前提にコードを書くと、
冗舌な文章になってあとで読みにくかったり、
意図していない選択で誤動作の原因になったりしますので、
Selectしない書き方を覚えましょう。
マクロの記録では、手動の操作をほぼそのままコードに翻訳しますので、
Selectが記録されてしまいます。
マクロの記録は手動の動作あるいは機能が、
VBAではどのような命令になるのかを探るための一つの
手段として割り切ってください。

投稿2020/06/01 00:19

mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/06/02 11:48

回答ありがとうございます。勉強していきます。
guest

0

Select や Selection は使わないというのが基本です。
また、Copyメソッドは引数でコピー先を指定できます。これを使うとPasteは不要です。

Range.Copy メソッド (Excel)

vba

1Sub cell_コピー() 2 'コピー元シート=アクティブシート 3 Dim fromWs As Worksheet 4 Set fromWs = ActiveSheet 5 'コピー先シート=Sheets("1") 6 Dim toWs As Worksheet 7 Set toWs = Sheets("1") 8 9 'コピー元のセルデータをコピー先(Destination)にコピー 10 fromWs.Range("S9").Copy _ 11 Destination:=toWs.Cells(Rows.Count, "D").End(xlUp).Offset(1) 12 13 fromWs.Range("S28").Copy _ 14 Destination:=toWs.Cells(Rows.Count, "E").End(xlUp).Offset(1) 15 16 fromWs.Range("S18").Copy _ 17 Destination:=toWs.Cells(Rows.Count, "F").End(xlUp).Offset(1) 18 19End Sub

投稿2020/05/31 04:08

編集2020/05/31 04:12
hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/05/31 06:55

ありがとうございます。数式を入れずに値だけをコピーできるようにがんばります。
guest

0

ベストアンサー

だいたい、次のようなプログラムになります。何をしているのかはコメントで説明しています。
(動作確認はしていませんので、使ってみてエラーが出たら対処してください。)

Sub cell?コピー () 'ActuveSheetとシート"1"を保存する変数を定義(DIM)し、値を設定する。(複数のシートの間の操作を行うプログラムでは、この一手間が大切。) Dim fromSheet as Worksheet, toSheet as Worksheet Set fromSheet = ActiveSheet Set toSheet = Sheets("1") Dim n as Long ' 1つ目のコピー ' シート(fromSheet)とRangeでセルを特定しているので、Copyで値をコピーできる。 fromSheet.Range("S9").Copy ' シート"1"(toSheet)に移って(Selectして)、D列の最終行に貼り付け toSheet.Select n = Cells(Rows.Count, "D").End(xlUp).Row + 1 Range("D" & n).Select selection.paste ' 2つめのコピー fromSheet.Range("S28").Copy ' シート"1"に移って(Selectして)、E列の最終行に貼り付け toSheet.Select n = Cells(Rows.Count, "E").End(xlUp).Row + 1 Range("E" & n).Select Selection.Paste ' 3つ目以降のコピーも同様のコードなので省略します。

投稿2020/05/31 03:20

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/05/31 06:56

ありがとうございます。数式を入れずに値だけで貼り付けもできるように、がんばります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問