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

Excel VBAのことで伺います。office365を使用しています。
以下のとおりマクロを作りましたが,次の動きをするマクロにしたいと思っています。
コピペ元のセル番地を格納する変数が必要だと思うのですが,どのようにそれを宣言すれば良いか等ご教示願います。(今の状態だと,常にB5セルにカーソルが移動して終了してしまいます)

① 「回答」シートにおいてカーソルのある行のA列の値を,B5セルにコピペ
② 「様式」シートの範囲指定した箇所を印刷
③ 「回答」シートの①の動作のときにカーソルのあった行のA列のセル(要は,コピペ元のセル)に戻る。

以下 現状のコード
----------------------------------------------------------------------------------------------
Sub 印刷()

Sheets("回答").Cells(Selection.Row, 1).Select
Selection.Copy
Sheets("回答").Range("B5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sheets("様式").Select
Application.CutCopyMode = False
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

Application.Goto Sheets("回答").Range("B5")

End Sub

質問者からの補足コメント

  • 昨日,追加で質問させていただきましたが,なんとか解決できました。

    No.2の回答に寄せられた補足コメントです。 補足日時:2024/01/30 11:50
  • 昨日,質問させていただきましたが,なんとか,希望するセルで最後は終わるようにできました。
    ありがとうございます。

    No.3の回答に寄せられた補足コメントです。 補足日時:2024/01/30 11:51

A 回答 (3件)

連投すみません


書き換えてしまったので追記します

>コピペ元のセル番地を格納する変数が必要だと思うのですが

今回の処理の場合必要ではなさそうですが方法としては2つあります

セル番地を格納する方法
Sub 印刷()
Dim セル番地 As String
セル番地 = Selection.Address


Application.Goto Sheets("回答").Range(セル番地)

セルオブジェクト自体を格納する方法
Dim セル As Range
Set セル = Selection


Application.Goto セル


注意 Selectionは状態を示すものなので セルでない場合があります
(図を選択しているなどの状態)このような場合プログラムはエラーが返されます
エラーを回避するためにはSelectionを使う前に対象(今回セル)を確認する必要があります
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございます。
しかし,書いていただいたコードですと,カーソルのあるセルが変数として保存され,最後はそのセルに戻るコードだと思います。

最後は,カーソルのある行のA列に戻るにはどのようなコードにすれば良いかご教示いただけないでしょうか?

教えていただいた「セル番地を格納する方法」の方で考えていますが,

変数定義の際に,
セル番地=Cells(ActiveCell.Row, 1)

としても,デバックで止まってしまいます。

お礼日時:2024/01/29 12:09

こんばんは



すでに回答が出ていますけれど・・

①文字通りに「カーソルのある行」のA列と解釈しました
 (A列以外であっても、その行のA列を採用します)
  以下のコードではSelectionではなく、確実なActiveCellを使用しています。
②「範囲指定した箇所を印刷」とありますが、ご提示のコードでは
  範囲指定をしていません。
  ですので、シートに印刷範囲を指定してあるものと解釈し、
  そのままにしてあります。
③最初にカーソルが別の列に合っても、その行のA列を選択した状態になります。

以下、ご参考までに。
※ 「回答」シートを表示した状態でないと動作しません。

Sub 印刷()
 If ActiveSheet.Name <> "回答" Then Exit Sub
 Cells(ActiveCell.Row, 1).Select
 Range("B5").Value = Selection.Value
 Worksheets("様式").PrintOut
End Sub
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございます。
①,②についてですが,おっしゃるとおりの意図・状態で質問させていただきました。

伺いたいのですが,実は今回の紙媒体で印刷するコードに加え,PDFの作成を行うコードも作りたいと思っています。
今の状態では,以下のようにそのコードを書いていますが,様式シートでselectを使っているため,カーソルが様式シートにある状態でマクロが終わってしまいます。
当初の質問どおり「最初にカーソルのあった行のA列」でマクロが終わるようにするにはどのようにしたら良いでしょうか。
また,このコードだと,作成したPDFが表示されますが,そのときの表示倍率を60%程度にすることはできますか?

いろいろと申し訳ないですが,ご教示いただけますようお願い申し上げます。

Sheets("様式").Select
Application.CutCopyMode = False
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=myfolder & "回答\" & text & ".pdf", OpenAfterPublish:=True, IgnorePrintAreas:=False

お礼日時:2024/01/29 12:37

>コピペ元のセル番地を格納する変数が必要だと思うのですが,どのようにそれを宣言すれば良いか等ご教示願います。


これについてはそのような構想でも良いと思いますが そもそもSelectしなければ解決できます

① 「回答」シートにおいてカーソルのある行のA列の値を,B5セルにコピペ
コードを見ると値貼り付けのようですのでValue=Valueで代入する

② 「様式」シートの範囲指定した箇所を印刷
現行で良いがSelectをしない様に書く

③ 「回答」シートの①の動作のときにカーソルのあった行のA列のセル(要は,コピペ元のセル)に戻る。

Selectをしなければ③は不要になります

1つ気になることは カーソル これがセル内に表示される状態のときはマクロは実行できないはずですので選択せるとします

コード全体を添削すると
Sub 印刷()

Sheets("回答").Range("B5").Value = Sheets("回答").Cells(Selection.Row, 1).Value
Sheets("様式").PrintOut Copies:=1, Collate:=True

End Sub

選択しているセルの値を指定セルに代入して様式シートをPrintOutをしています
    • good
    • 0
この回答へのお礼

ありがとうございます。
休日を挟み返事が遅くなり申し訳ありません。

こんなにすっきりするんですね。
動作の確認もできました。

お礼日時:2024/01/29 12:02

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

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


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