• ベストアンサー

VBAを教えてください。

Sub 最終行移動() ' Selection.End(xlDown).Select End Sub で最終行がアクティブになるのですが 画面は移動しません。 A1をアクティブにした状態で 「最終行移動」のマクロを実行したら 最終行のA100がアクティブになるのですが 画面はそのままです。 (データは増えていくため、A○○になる) 「最終行を画面内に入れる」と言うコードが知りたいです。よろしくお願い致します。

noname#150256
noname#150256

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

  • ベストアンサー
回答No.4

#1です。 Sub マクロ1() Range("A1").End(xlDown).Activate End Sub これでいけました。実行確認済みです。 Selectは洗濯するだけど、Activateだとアクティブになる(値を変更したりできる)ようになります。 質問者様がSelectionを使っているのに理由があるのか知りませんが、 そのばあい Selection.End(xlDown).Activate デいけると思います。ExcelVBA辞典でしっかり調べましたから 大丈夫です。

noname#150256
質問者

お礼

再度ご回答ありがとうございます。 試して見たら出来ました。 わざわざ調べて頂いてスイマセン。 大変参考になりました。ご回答ありがとうございます。

その他の回答 (3)

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

Sub test01() Range("B65536").End(xlUp).Select d = Range("B65536").End(xlUp).Column Application.Goto Reference:=Selection.Offset(-2, -d + 1), scroll:=True ' Application.Goto Reference:=Worksheets("Sheet1").Range("A20"), scroll:=True End Sub 判別した列で最下行が左上隅のセルに来てよいなら Application.Goto Reference:=Selection, scroll:=True A列が左で、最終行より2行上が左上隅のセル場合 上記コード 一定のセルが左上隅のセル場合 上記の’をつけた行のコード。

noname#150256
質問者

お礼

大変参考になりました。ご回答ありがとうございます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 >最終行がアクティブになるのですが画面は移動しません。 たとえば、画面に出ている行数内の移動なら、画面は移動しません。 しかし、Select を使って、アクティブになれば、 「最終行を画面内に入れる」になっているはずです。 Selection.End(xlDown).Select というのは何かの間違いではありませんか? 画面が動かないことはありません。 また、たとえば、このような方法があります。 Sub Test1()  '目的のセルが、必ず、画面の左上端になる方法  Application.Goto Range("A1").End(xlDown), True End Sub

noname#150256
質問者

お礼

「画面を固定」をしてました  汗 大変参考になりました。ご回答ありがとうございます。

回答No.1

http://t_shun.at.infoseek.co.jp/My_Page/Excel-VBA/vba_page3.htmの画面のスクロールという章に詳しく書かれています。 行数がわかっていれば↓でいけるでしょう。 ActiveWindow.SmallScroll down:=2 行数を調べるには gyousuu = Range("A1").End(xlDown).Row です。http://t_shun.at.infoseek.co.jp/My_Page/Excel-VBA/vba_page7.htmより。ですから gyousuu=Range("A1").End(xlDown).Row ActiveWindow.SmallScroll down:=gyousuu でいいんじゃないかと。 動作確認していないので検証はお願いします。

noname#150256
質問者

お礼

よく読んでみます。 大変参考になりました。ご回答ありがとうございます。

関連するQ&A

  • 最上行へ移動

    最終行へ移動は Selection.End(xlDown).Select だと思うのですが 最上行へ移動のコードがわかりません。 よろしくお願いします。

  • 「シート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?と削除したり挿入したりで数が変わりますが何かしら文字列が隙間なく入っています。 よろしくお願いします。

  • vba なぜこうなるのか・・・。

    こんばんは、よろしくお願いします。 A1セルにデータが入っている状態で、以下の変数を使いA列の最終データが入っている行を調べると、(65536)が表示されます。なぜ、(1)にならないのでしょうか? ためしにA1及びA2セルにデータを入れマクロを実行すると、正確に2が表示されました。 Sub 練習() dim maxrow as long maxrow = Sheets(1).Range("a1").End(xlDown).Row   msgbox maxrow End Sub EXCEL2000を使用しています。よろしくお願いします。  

  • エクセルVBAで値のカウントをしたい

    C列~AA列まで値が入っています 1行目にはタイトル 2行目からそれぞれ値が入っており、終了行は毎回ランダムです 各列毎に値の合計と1以上の値の合計数を表示するために下記のマクロを使用しているのですが、もっとスマートな方法は無いでしょうか? 現在のマクロだとマクロ行数がとても多いものになっています。 Sub Count() With Range("C2") .End(xlDown).Offset(1, 0) = _ "=SUM(" & Range(.Address, .End(xlDown)).Address(False, False) & ")" End With '本当はCの最終行に直接COUNTIFを書き込みたいが、他のセルを使用しないと0になる Range("A1") = "=COUNTIF(C2:C10000,"">=1"")" Range("A1").Select Selection.Copy Range("C1").End(xlDown).Offset(1, 0).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CommandBars("Stop Recording").Visible = False With Range("D2") .End(xlDown).Offset(1, 0) = _ "=SUM(" & Range(.Address, .End(xlDown)).Address(False, False) & ")" End With Range("A1") = "=COUNTIF(D2:D10000,"">=1"")" Range("A1").Select Selection.Copy Range("D1").End(xlDown).Offset(1, 0).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CommandBars("Stop Recording").Visible = False '以降AAまでセルの位置を変えた同一マクロを繰り返す End Sub

  • ExcelのVBAです。

    先日お答えいただいたVBAなんですが、 Sub Macro1() Sheets("Sheet1").Select Range("A1").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("Sheet3").Select Range("A1").Select ActiveSheet.Paste Selection.End(xlDown).Select Application.CutCopyMode = False Do Selection.Insert Shift:=xlDown Selection.End(xlUp).Select Loop Until ActiveCell.Address = "$A$1" End Sub というのを使用させて頂いてます。 これを、コピー先のものを上書きせずに、コピーされたものがあれば表示させるといった風に出来ないでしょうか? 例  A    A 1 a 1 2 b → 2あ 3 c 3 右から左に一行間隔で別シートに表示させたいのですが、  A  1 a 2 あ 3 b 4 5 b という結果にしたいのです。 拙い文章で申し訳ないのですが、教えて頂きたいです。

  • オートフィルター VBAでの設定について

    オートフィルターで0以外のものに絞って、 コピーしたいのですが、 値が0しかない場合にすべてのものをコピーするように なってしまうので、 コピーすることがないようにさせたいです。 例) Sub test() Sheets("Sheet1").Select Selection.AutoFilter ActiveSheet.Range("$A$2:$A$10").AutoFilter Field:=1, Criteria1:="<>0" Range("A2:A10").Select Range(Selection, Selection.End(xldown)).Select Selection.Copy End Sub このようなコードの場合にA2:A10の値が0しかなかった場合に コピーしている状態をなくしたいのですが、 どこのコードを変えたらいいでしょうか。 回答よろしくお願いいたします。

  • 行を挿入するマクロがうまくいきません。

    Sheets("りんご").Select Rows("1:1").Select Selection.Copy Sheets("みかん").Select Range("人").Select Selection.Insert Shift:=xlDown Application.CutCopyMode = False End Sub というマクロは、りんごのシートにある1行をコピーして、 みかんのシートの人と名前定義してある特定の行にコピーする マクロです。この次に下のマクロを実行すると Sheets("りんご").Select Rows("2:3").Select Selection.Copy Sheets("みかん").Select Range("人").Select Selection.Insert Shift:=xlDown それまでのものが残ってしまい、行がどんどん増えていってしまいます。 いずれかのマクロを実行すればリセットされて行が増えないように コピーするにはどうすればよいでしょうか・・?

  • マクロでシート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

  • フィルタ検索後、最上位行に移動する方法

    シート(請求書データベース)内のデータにフィルターをかけてデータ抽出後、最上位行に移動するVBAをご教授願いますでしょうか? ちなみにフィルター検索後も下記VBAで最下位行に移動はできます。 Sub 最下位行移動() Selection.End(xlDown).Select End Sub 下記VBAでは、フィルター検索後でも単純にA1行が選択されるだけで、フィルター抽出後の最上位行に移動できません。A1行は固定窓に設定しています。 Range("A2").Selectを入れると、フィルター抽出を解除した後であれば問題ないのですが、フィルター抽出後はA1行(先頭行)の下は何行目が来るかわかりません。 Sub 最上位行移動() Selection.End(xlup).Select End Sub

  • コピーと貼付

    既存のデータはA~Y列まで入力されています。 新規のデータはA~W列までとなっています。 既存のX行には日付をいれてあり、新規データのX列に次月の1日(ついたち)を入力したい。 とりあえずは、1行下に日付を入力したマクロを組んだのですが、その後50行前後もコピーし貼付したいのですが、範囲の選択がうまく出来ません。 途中のセルから最終行のセルの範囲選択のマクロを教えてもらえないでしょうか。 ※Y列はダブルクリックコピーで問題ないので大丈夫です。 例   A列・・・・・・    X列      Y列(検索の関数が入っています) 1  ABC・・・・・・   2011/6/1    1    ※既存のデータ 2  DDD・・・・・・   2011/7/1         ※新規データの1列目 3  FFF・・・・・・   (      )                4  GGG・・・・・・   (      ) 5   ・ 6   ・ 7   ・ 8   ・ 50 ZZZ・・・・・・   (       ) 新規の2列目以降に、新規で作成した日付をコピーし貼付したい。 上記までのマクロを参考に送ります。 教えて下さい。 Sub test() Dim MaxRange '最終行番号 MaxRange = Range("X3").End(xlDown).Row '最終行の設定 Range("X3").Select Selection.End(xlDown).Offset(1, 0).Select 'X列の最終行+1行目を選択 ActiveCell.FormulaR1C1 = "=EDATE(R[-1]C,1)" '同セルに関数入力 Range("X" & MaxRange - 1).Copy '書式の変更(変更前の最終行よりコピー・貼付) Range("X3").Select Selection.End(xlDown).Offset(0, 0).Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Range("X3").Select '追加したセルの関数を値に変更 Selection.End(xlDown).Offset(0, 0).Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub

専門家に質問してみよう