• 締切済み

シート1のC列の最終行をコピーして同じ行に値貼り付けしたい

シート1のC列の最終行を取得して その行を丸々値貼り付けするマクロを作りたいと思います。 シート3のB18の値をシート1のC列の最終行の1つ下のセルに値貼り付け すると、その行のA、B列に日付が入力される関数が入っています。(下まで) 関数が入ったままだと、うまくいかない時があるので最終行をコピーして値貼り付けしたいのですが、マクロの作り方を教えてください。 シート1の最終行に貼り付け Sheets("Sheet3").Select Range("B18").Select Selection.Copy Sheets("Sheet1").Select Range("C65536").End(xlUp).Offset(1).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End Sub 最終行をコピーして値貼り付け Dim 最終行 As Integer 最終行 = Range("C65536").End(xlUp).Row Range("A6:C" & 最終行).Select Selection.Copy Sheets("Sheet1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End Sub このマクロだと、A6からC列の最終行まで全てコピーされてしまうので、C列の最終行のAからC列まで1行だけコピーできないでしょうか?

みんなの回答

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.7

Worksheets("Sheet1").Cells(65536, 3).End(xlUp).Offset(1).Value = Worksheets("Sheet3").Cells(18, 3).Value Cells(18, 3)はC18です B18ならCells(18,2)です。 私のミスといえばそうですが、単純にコードをコピーするのではなくその意味を汲み取ってください。 そういうことをしたくないのだったら意味がない。

noname#94637
質問者

お礼

すみません・・・ ありがとうございました。

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.6

試してみたのですが、ちゃんと動きますね。(Excel2007) まさか2行に分けて記述しているとか。 「動かない」はエラーになる、結果が変わらないどっち?

noname#94637
質問者

補足

エラーは出ませんが、Sheet3のB18の値がSheet1の最終行に反映されません。Excel2003です。 Sub Macro2() Worksheets("Sheet1").Cells(65536, 3).End(xlUp).Offset(1).Value = Worksheets("Sheet3").Cells(18, 3).Value End Sub

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.5

私は2つの代入を書いているのですが、どちらが動かないのですか? どちらにも間違いはありません。 まさか Dim 最終行 As Integer が記入漏れになっていること?

noname#94637
質問者

補足

お手数おかけします。 Worksheets("Sheet1").Cells(65536, 3).End(xlUp).Offset(1).value = Worksheets("Sheet3").Cells(18, 3).value この一行の他に何か入力するのでしょうか? ボタンを押しても動きません。 最後に書いて頂いた代入は、動きます。

  • hotosys
  • ベストアンサー率67% (97/143)
回答No.4

>Range("A6:C" & 最終行).Select を Application.Intersect(Rows(最終行), Columns("A:C")).Select では? 最終行とA:C列の重なっている部分=最終行のA:C列

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.3

あなたのコードは Range("A6:C" & 最終行).Select を Range("A" & 最終行 & ":C" & 最終行).Select と変えればたぶん意図通りの動作になると思います。 しかしVBAではこういう場合はコピー&ペーストではなく「代入」として考えましょう。 あなたのコードでは 代入元のセルをselect selection.copy 代入先のセルをselect selection.copy オプションはなんたら感たら Application.CutCopyMode = False という記述が 代入先のセル=代入元のセル という一行になります "シート1の最終行に貼り付け" Sheets("Sheet3").Select Range("B18").Select Selection.Copy Sheets("Sheet1").Select Range("C65536").End(xlUp).Offset(1).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False は Worksheets("Sheet1").Cells(65536, 3).End(xlUp).Offset(1).value = Worksheets("Sheet3").Cells(18, 3).value の一行になります。(.valueは省略可) 最終行をコピーして値貼り付け Dim 最終行 As Integer 最終行 = Range("C65536").End(xlUp).Row Range("A6:C" & 最終行).Select Selection.Copy Sheets("Sheet1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False 質問の内容は「C列の最終行のA列,B列」に式が入っているけどそれを値に変えたいと解釈しました。 これも代入で処理します。 最終行A列の値=最終行A列の値 最終行B列の値=最終行B列の値 これは「代入」ですから右辺の「計算結果(あなたの言う日付計算の結果の値)」を左辺に代入する。(A=A+1と同じ解釈です) 以下の3行になります。 最終行 = Range("C65536").End(xlUp).Row cells(最終行,1).value=cells(最終行,1).value cells(最終行,2).value=cells(最終行,2).value .(.valueは省略可)

noname#94637
質問者

お礼

回答頂きありがとうございます。 今回初めてネットで検索しながらマクロを作った次第で、代入のやり方はよくわかりませんでした。 そのまま貼ればいいのでしょうか。動かないです。 最初に書いて頂いたものに変更することで、 関数式が残らず値のみ貼り付ける事が出来ました。 ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

ここまで判っておれば、簡単な事ではないの。 ただ質問文章がごたごたして意味が良く取れない。 ーーー コピー先は シート1のC列の最終行の直下行。 その行のA列以右列は空白セルですね。 >その行のA、B列に日付が入力される関数が入っています。 ということはC列セルだけ空白セルなのか?普通珍しい。 >その行のA、B列に日付が入力される関数が入っています、とは? 値貼り付けするのですね。コード例は質問に載っているよね。 ーーー コピー元は >シート3のB18の値を・・で1セルですか?シート3に間違いない? >C列の最終行のAからC列まで1行だけコピーできないでしょうか? との関連は? === コピー元とコピー先を明確に説明してください。 === 全体的に不明だが、コードで言えば Range("A" & 最終行 & ":C" & 最終行).・・ または Range("A" & 最終行+1 & ":C" & 最終行+1).・・ の書き方が参考になるかな。 ーー >最終行 = Range("C65536").End(xlUp).Row Range("A6:C" & 最終行).Select Selection.Copy Sheets("Sheet1").Select Selection.PasteSpecial Paste は同じセルに値貼り付けして、式を消すのかな?それまでのニュアンスと違うようだが。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

>Sheets("Sheet3").Select >Range("B18").Select >Selection.Copy >Sheets("Sheet1").Select >Range("C65536").End(xlUp).Offset(1).Select >Selection.PasteSpecial Paste:=xlPasteValues, >Operation:=xlNone, SkipBlanks _ >:=False, Transpose:=False >Application.CutCopyMode = False With Sheets("Sheet1").Cells(Rows.Count, "C").End(xlUp).Offset(1)   .Value = Sheets("Sheet3").Range("B18").Value End With >最終行 = Range("C65536").End(xlUp).Row >Range("A6:C" & 最終行).Select Cells(最終行, "A").Resize(, 3).Select

関連するQ&A

専門家に質問してみよう