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

エクセル2010を使っております。

以下の動作を自動記録したプロシージャが次のものですが、これに改良を加えたくて、
相談させていただきました。

(1)一覧というシートにおいて、A3セルからCtrl + ↓でA列の入力行の最下行に異動して、
 そのセルの値をコピーし、A3セルに貼りつける、
(2)請求書というシートを選び、印刷する。
(3)一覧というシートに戻り、A列の入力行のうちの最下行に異動する。

※A3セルに値を貼りつけると、3行目のB列以降→請求書シートという順にデータが飛び、
4行目からのデータを適宜に印刷したい思っております。


Sub 印刷()
Range("A3").Select
Selection.End(xlDown).Select
Selection.Copy
Range("A3").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Sheets("請求書").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
Sheets("一覧").Select
Selection.End(xlDown).Select
End Sub


改良したい点としては、以下のとおりです。

(1)A列の入力行の最下行ではなく、カーソルのある行(編集可能にしているとは限らない)の
A列の値をA3セルに貼りつけるようにするにしたい。

(2)印刷した後、一覧シートのA列、最下行(印刷した行)にカーソルが移動するようになっていますが、体感的な動きとしてはそれと同じく、印刷した行(最初にカーソルのあった行)のA列にカーソルが移動するようにしたい。

どなたか、教えていただけると助かります。
よろしくお願いいたします。

A 回答 (2件)

まず基本方針として、セレクトやセレクション、アクティブなんたらを使わない(選択を動かさない)マクロを書けるようにします。



sub 印刷ver2()
’転記する
 range("A3").value = cells(activecell.row, "A").value

’印刷する
 worksheets("請求書").printout
end sub




何らかの理由でどーしても「これを選びたい」なら、それはそれとしてマクロの動作とは別に行います。

sub 印刷ver2a()
 if activesheet.name <> "一覧" then
  msgbox "一覧シートの対象データを選択してから実行"
  exit sub
 end if

 cells(activecell.row, "A").select
 range("A3").value = activecell.value
 worksheets("請求書").printout
end sub
    • good
    • 0
この回答へのお礼

ありがとうございます。

しかし、回答していただいた内容が理解できませんでした。

sub 印刷ver2a()
 if activesheet.name <> "一覧" then
  msgbox "一覧シートの対象データを選択してから実行"
  exit sub
 end if

 cells(activecell.row, "A").select
 range("A3").value = activecell.value
 worksheets("請求書").printout
end sub

とありますが、メッセージボックスは必要ありません。
また、このプロシージャだと、請求書を印刷したあとに、印刷した行のA列に
戻らないのではないでしょうか。

お礼日時:2013/12/15 07:33

(1) 先頭から2行目のSelection.End(xlDown).Selectをコメントアウトする。

(行頭に’を付ける)

(2) 最後から2行目をSelection.End(xlRight).Selectにする
    • good
    • 0
この回答へのお礼

ありがとうございます。

Sub 印刷()
Range("A3").Select
Selection.Copy
Range("A3").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Sheets("請求書").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
Sheets("一覧").Select
Selection.End(xlRight).Select
End Sub

で良いということでしょうか?
これで動かしてみたのですが、うまくいきませんでした。

4行目以降のどこかのセルにカーソルがあったときに、その行のA列に移動してその値を
コピーするという記述は入っていますか?

お礼日時:2013/12/15 07:37

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