VBAで動作した行のA列にカーソルを移動する方法

このQ&Aのポイント
  • VBAを使用してエクセル2010で動作した行のA列にカーソルを移動する方法について相談させてください。
  • 現在、一覧シートのA3セルからCtrl + ↓でA列の入力行の最下行に移動し、そのセルの値をコピーしてA3セルに貼り付けるプロシージャがあります。
  • 改良したい点は、最下行ではなくカーソルのある行のA列の値をA3セルに貼り付けること、また、印刷後にカーソルを印刷した行のA列に移動することです。
回答を見る
  • ベストアンサー

VBA 動作の後、動作した行のA列にカーソルを移動

エクセル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列にカーソルが移動するようにしたい。 どなたか、教えていただけると助かります。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

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

schuler
質問者

お礼

ありがとうございます。 しかし、回答していただいた内容が理解できませんでした。 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列に 戻らないのではないでしょうか。

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

(1) 先頭から2行目のSelection.End(xlDown).Selectをコメントアウトする。(行頭に’を付ける) (2) 最後から2行目をSelection.End(xlRight).Selectにする

schuler
質問者

お礼

ありがとうございます。 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列に移動してその値を コピーするという記述は入っていますか?

関連するQ&A

  • 「シート1のアクティブセルをコピーしてシート2のA列の最終行+1に貼り付ける」

    「シート1のアクティブセルをコピーしてシート2のA列の最終行+1に貼り付ける」 というVBAコードが知りたいのですが Sub Macro1() Selection.Copy Sheets("Sheet2").Select Selection.End(xlDown).Offset(1).Select ActiveSheet.Paste End Sub ではうまくいきませんでした。 ・マクロを実行する前のもともとのアクティブセルはシート1の入力されたセル上にあるとします。 ・シート2のA列にはA1~A?と削除したり挿入したりで数が変わりますが何かしら文字列が隙間なく入っています。 よろしくお願いします。

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

  • マクロでシート2~6のデータをシート1に転記したい

    マクロでシート2~6のデータをシート1に転記したいです。 シート2~6のデータを シート1に順番に転記したくてマクロの記録を利用して作成しました。 シート2~6は列は同じですが行数は異なります。 また行数は作業の都度異なります。 同じ記述が繰り返されているので もう少し記述が短くできるのではと思うのですが どうすればいいでしょうか? Sub データ更新() 'シート1の前回データをクリア Sheets("シート1").Select Range("A2:Q2").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlDown)).Select Selection.ClearContents Range("A2").Select Sheets("シート1").Select Range("A1").Select Sheets("シート2").Select Range("A1").Select 'ヘッダーも合わせて取得 Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート3").Select Range("A2").Select 'データのみ取得 Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート4").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート5").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート6").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select End Sub

  • A1から最下行までを選択するVBA

    offise2000です。 EXCEL VBAです。 A1からセルの最下行までの範囲を別シートに貼付するVBAを教えてください。   Range("A1").End(xlDown).select で最下行のセルを選択するところまでは調べたのですが、基本がないので応用がききません。宜しくお願いします。

  • VBAで行をコピーして別のシートに貼付け

    いつもお世話になっております。 現場登録検索のシートの数値F2の値が 一覧シートにマッチする行を検索し その行を切り取り、終了現場に入力されている 最終行に貼付ける。と言うVBAを作りましたが、 "RangeクラスのSelectメソッドが失敗しました。" 下記が黄色になります。 Sheets("終了現場").Range("A1").Select 解決ができません。 アドバイスをお願い致します。 Private Sub CommandButton7_Click() '終了ボタン '終了行を一覧から探す Worksheets("現場登録検索").Range("F2").Select ActiveCell.FormulaR1C1 = "=MATCH(RC[-1],一覧!C[-5],0)" n = ActiveCell.Value 行 = n Worksheets("一覧").Rows(行).Copy Sheets("終了現場").Range("A1").Select Selection.End(xlDown).Select ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False End Sub

  • Excel VBAを使った重複行の抜き出しについて教えてください

    以下のような2シートから、重複する「商品番号」のあるsheet1の行を抜き出して、別シートに書き出したいと思っております。 sheet1  |  A   |  B   | C -+--------+-------+----- 1|      |      | -+--------+------+-------- 2|商品番号|商品名|責任者 -+--------+------+-------- 3|  123456|  ガム|山田太郎 -+--------+------+-------- 4| 2345678| チョコ|田中花子 ・・・ sheet2  |  A   |  B   | C -+--------+-------+----- 1|      |     | -+--------+------+-------- 2|商品番号|商品名|責任者 -+--------+------+-------- 3| 3987624|     | -+--------+------+-------- 4| 193678|      | ・・・ そこでVBAを作成したのですが、例えば商品番号「222011001」の行を抜き出したいのに、「22011001」の行も一緒に抜き出してしまいます。 どこがいけないのか、教えて頂けないでしょうか。 作成したVBAは以下の通りです。 VBA初心者で本を見ながら作ったため、大変見にくくなっているかと思います。申し訳ありませんが、どなたかおわかりになる方がいらっしゃいましたら、どうぞ宜しくお願い致します。 Option Base 1 Option Explicit Sub 重複データ抽出書き直し() Dim シート(2) As Worksheet Dim 比較列(2) As Integer Dim 一致セル As Range Dim 検索範囲 As Range Dim i As Integer Set シート(1) = Sheets("sheet1") Set シート(2) = Sheets("sheet2") 比較列(1) = 1: 比較列(2) = 1 シート(2).Activate ActiveCell.CurrentRegion.Select Selection.Offset(1, 比較列(2) - 1) _ .Resize(Selection.Rows.Count - 1, 1) _ .Select Set 検索範囲 = Selection Sheets.Add After:=Sheets(Sheets.Count) シート(1).Activate ActiveCell.CurrentRegion.Select Selection.Resize(1).Copy With Sheets(Sheets.Count).Range("A1") If Application.Version >= 9 Then .PasteSpecial 8 End If .PasteSpecial End With For i = 2 To Selection.Rows.Count Set 一致セル = 検索範囲.Find(Selection.Cells(i, 比較列(1)).Value) If Not 一致セル Is Nothing Then Selection.Offset(i - 1).Resize(1) _ .Copy Sheets(Sheets.Count) _ .Range("A65536").End(xlUp) _ .Offset(1) End If Next i Sheets(Sheets.Count).Activate End Sub

  • 隣接した列の最後の行まで値を入れる方法 エクセルVBA

    エクセル2003で、下記のようなプログラムを作っています。 (1,1)の列に数字が入っている所まで、(1,2)の列にVLOOKUPで値を引いてくる。 Cells(1,2).Select Selection.End(xlDown).Select L = Selection.Row ですがこのプログラムでは、(1,2)列の一番下の列番号を取得してしまいます(Cell(65536,2)です)。(1,1)列の最後の数字までを取得できるプログラムにするにはどうしたらいいでしょうか。 図解しますと、   (列)1 2  (行)  1   2 A  2   5 F  3   4 H  4   7 T  5   9 Y  6  7      のような具合です。数字や値に規則性はありません。自分なりにやってみたのですが、どうしても上手くいかないので、ぜひ教えて下さい。よろしくお願いします。

  • マクロの記録を書きかえる

    下記の構文を可能な限り短くして書きたいのですが、 どのように省略出来るのかがわかりません。 <シート1のB列のデータの入力されているセルまでコピーし、シート2のA2から値で貼付ける> Range(\"B2\").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets(\"Sheet1\").Select Range(\"A2\").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ご指導宜しくお願い致します。

  • 【Excel VBA】データの最終行について

    Excel2003を使用しています。 ある一覧表形式のデータSheet1をSheet2に値のみコピーして、このSheet2を“印刷用”として、ページ設定等をして、印刷のみに使用しようと思っています。 Sheet2のI列、J列、K列には数値が入力されていて、I列、J列、K列のデータの最終行の1行下に、それぞれ6行目からデータ最終行までの合計の数式が入力されるよう、コードを追加したのですが、数式は入力されるものの、入力したい行に数式が入力されません。 マクロを実行して、数式が入力された行を見てみると、301行目に入力されていました。 Sheet1は別のシートのデータを数式により表示していて、数式が300行まで入力されているので、Sheet2の元になっているSheet1の影響(?)なのかな~?と…。こういう場合、どうすればいいでしょうか? コードは下記のようになっています。 よろしくお願いします。 ---------------------------------------- Sub 印刷用作成() Dim i As Integer Dim j As Long Sheets("Sheet1").Activate Range("B6:L6", Range("L6").End(xlDown)).Select Selection.Copy Sheets("Sheet2").Select Range("B6").PasteSpecial xlPasteValues Application.CutCopyMode = False For i = 9 To 11 j = Application.Max(j, Cells(65536, i).End(xlUp).Row + 1) Next For i = 9 To 11 Cells(j, i).FormulaR1C1 = "=SUM(R2C[0]:R[-1]C[0])" Next i End Sub

  • VBAで行を挿入する

    VBAを始めた初心者です。 Exel2002使用です。 VBAでA列の4行目から10行目に行の挿入をできるようにしようと下記のように書きましたが、Rows("i:i").Selectの部分でデバックがかかってしまいます。間違っている理由がわからないのですがよろしくお願いします。 また、DO While Loopステートメントを使ってA列が空白になるまで(例えばA4セル以下の)行を挿入とする場合の方法も教えていただけましたら幸いです。 Sub 4行目から10行目まで() Dim i As Integer For i = 4 To 10 Cells(i, 1).Value = i Rows("i:i").Select Selection.Insert Shift:=xlDown Next i End Sub Sub 4行目から空白になるまで() Dim i As Integer Range("A4").serect Do While activecell.value = "" Cells(i, 1).Value = i Rows("i:i").Select Selection.Insert Shift:=xlDown activecell.offset(1,0).select Loop End Sub

専門家に質問してみよう