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

シート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行だけコピーできないでしょうか?

A 回答 (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)です。

私のミスといえばそうですが、単純にコードをコピーするのではなくその意味を汲み取ってください。
そういうことをしたくないのだったら意味がない。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/09/23 20:55

試してみたのですが、ちゃんと動きますね。

(Excel2007)
まさか2行に分けて記述しているとか。
「動かない」はエラーになる、結果が変わらないどっち?

この回答への補足

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

補足日時:2009/09/23 16:22
    • good
    • 0

私は2つの代入を書いているのですが、どちらが動かないのですか?



どちらにも間違いはありません。
まさか
Dim 最終行 As Integer
が記入漏れになっていること?

この回答への補足

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

最後に書いて頂いた代入は、動きます。

補足日時:2009/09/23 09:24
    • good
    • 0

>Range("A6:C" & 最終行).Select



Application.Intersect(Rows(最終行), Columns("A:C")).Select
では?
最終行とA:C列の重なっている部分=最終行のA:C列
    • good
    • 0

あなたのコードは


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は省略可)
    • good
    • 0
この回答へのお礼

回答頂きありがとうございます。
今回初めてネットで検索しながらマクロを作った次第で、代入のやり方はよくわかりませんでした。
そのまま貼ればいいのでしょうか。動かないです。

最初に書いて頂いたものに変更することで、
関数式が残らず値のみ貼り付ける事が出来ました。
ありがとうございました。

お礼日時:2009/09/21 16:32

ここまで判っておれば、簡単な事ではないの。


ただ質問文章がごたごたして意味が良く取れない。
ーーー
コピー先は
シート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
は同じセルに値貼り付けして、式を消すのかな?それまでのニュアンスと違うようだが。
    • good
    • 0

>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
    • good
    • 0

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