VBA EXCEL2003のセル選択方法

このQ&Aのポイント
  • EXCEL2003のVBAを使って、オートフィルタで抽出させた表において、入力されているセルの1つ下のセルを選択する方法
  • Range関数を使用して、最終行を特定し、その下のセルを選択することで表全体の1つ下のセルを選択する
  • 具体的なコードは、Range("A65536").Select Selection.End(xlUp).Select ActiveCell.Offset(1, 0).Select
回答を見る
  • ベストアンサー

VBA 表の1つ下のセルを選択する

EXCEL2003のVBAを使っています。 オートフィルタで抽出させた表があります。 入力されているセルの、1つ下のセルを選択するにはどうしたら良いでしょうか。     A 1  あああ  2  あああ  5  あああ  1行目から19行目までの列の中で、"あああ"だけをオートフィルタで抽出している 10  あああ  14  あああ   16  あああ  20   ※ ←ここを選択したい。 Range("A65536").Select Selection.End(xlUp).Select ActiveCell.Offset(1, 0).Select これだとA17のセルが選択されてしまいます。 表全体の1つ下のセルを選択する方法はあるでしょうか?

  • nyakuy
  • お礼率54% (177/322)

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

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

たとえば: sub macro3()  if activesheet.filtermode then   with activesheet.autofilter.range    .offset(.rows.count).cells(1).select   end with  else   range("A65536").end(xlup).offset(1).select  end if end sub かならずA1からオートフィルタが始まっているならもうちょい簡単にできます sub macro1() range("A1").offset(activesheet.autofilter.range.rows.count).select end sub

nyakuy
質問者

お礼

できました!ありがとうございました~。

その他の回答 (4)

回答No.4

こんにちは。別案でこんなのもあります。 前提として「Sheet1で1行目からデータが詰まっている」ことが条件となります。 1行目が空欄だったりすると、「+1」を「+2」とかに調整する必要があります。 ご参考になれば幸いです。 Sub Test() Dim r As Integer 'Sheet1で「使われている」セル範囲の行数を取得 r = Sheets("Sheet1").UsedRange.Rows.Count + 1 Sheets("Sheets1").Cells(r, 1).Select End Sub

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

文章の方言による説明を併用せよ。出ないと本件は意味がわからない。 (1)元データの最終行の次行は判るよね。 (2)フィルタ済みの状態で、可視セルの最下(大)行の次を求めたいのか 例データ A列 コード a a a s d a d f a a x x d ここで「a」などを選んで(フィルタし)、下記を実行してみてください。 Sub test01() d = Range("A65536").End(xlUp).Row MsgBox d d = Range("A2").End(xlDown).Row MsgBox d k = 0 For i = 1 To 20 If Cells(i, "A") = "" Then MsgBox k Exit For Else k = k + 1 End If Next i End Sub 泥臭いやり方だが、1行の記述で済む様なコードはあるのかな。 ーー フィルタ結果表示状態を崩しても良いのなら、 Sub test02() ActiveSheet.ShowAllData d = Range("A65536").End(xlUp).Row MsgBox d End Sub だが、これではダメなのだろうね。 ShowAllDataは「すべて」状態だとエラーになるので注意。 ーー 本題は>1つ下のセルを選択するにはどうしたら・・なので Cells(d + 1, "A").Select は必要ですが。

回答No.2

Range("A65536").Select Selection.End(xlUp).Select SendKeys "{down}" に変更してみては?

  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.1

オートフィルタで上記のようになると言うことは、A1~A19までは何かしら入力されていて、A20からは何も入力されていないと言うことですよね? だとすれば n = 1 Do Until Cells(n, 1) = "" n = n + 1 Loop Cells(n, 1).Select で良いのじゃないでしょうか? ようは、一行ずつ空白かどうかを見て、空白になったらループを止めてそのセルを選択する、という単純なマクロです。 ご参考まで。

関連するQ&A

  • Excel VBA セルの選択方法

    こんばんは。 セルの選択方法をお聞きしたいのですが、 SheetAのB2のセルの値を SheetBのリストの最下行(例えば12)からn行目(例えばn=3だったら12行目から15行目)を選択し、SheetAのB2のセルの値を貼り付ける方法を教えてください。 方法は複数あると思うのですが、考えにいきずまってしまいました。 Range("B2").Copy For i = 1 To n Worksheets("Sheet2").Range("b65536").End(xlUp).Offset(1).Select ActiveCell.Parse Selection..Resize(.Rows.Count + [n]).Select それと   Dim cntRow As Integer Dim cntCol As Integer cntRow = Selection.Rows.Count + 1 cntCol = Selection.Columns.Count + 1 Selection.Resize(cntRow, cntCol).Select 上のようなResizeを使って、表(例えばC3~E10)を貼り付けた隣のセル、(例えばB3~B10)のセル番地を取得して、 SheetAのB2のセルの値を貼り付ける方法も教えていただけないでしょうか。 基本的なことをお聞きするようですが、宜しくお願い致します。

  • エクセルマクロについて

    最終行の1つ下の行に100000と入力したいですが Range("b65536").Select Selection.End(xlUp).Select ActiveCell.Offset(0, 1).Value = 100000 としてもうまく行きません Selection.End(xlUp).Select この部分だけで なんとかなるのでしょうか よろしくお願い致します

  • エクセルで行を非表示にするとアクティブなセルが・・・

    エクセルで行を非表示にするとアクティブなセル?行?がどこかわからなくなり、マクロでアクティブなセルを移動するときにエラーが出ます。 Sub example() ActiveSheet.Range("D3").Select Do Until ActiveCell = 23 If ActiveCell <> "" Then ActiveCell.Offset(1, 0).Select ElseIf ActiveCell <> "" Then ActiveCell.Offset(1, -3).Select ElseIf ActiveCell <> "" Then ActiveCell.Offset(1, -6).Select Else: ActiveCell.EntireRow.Select Selection.EntireRow.Hidden = True ActiveCell.Offset(0, -6).Select End If Loop End Sub 一番下のActiveCell.Offset(0, -6).Select にエラーが出るのですが、どうすればセルを移動できるでしょうか?

  • VBA、セルの選択範囲について

    下記のような表を用意し、   A   B  C  D  E 1    1月 2月 3月 合計 2 Aさん 1  2  3  6 3 Bさん 1  2  3  6 4 Cさん 1  2  3  6 5 合 計 3  6  9  18 セルの範囲選択を指定し別シートの任意のセルへコピーをVBAで行いたいのですが、 Aさん、Bさん、Cさんという範囲を選択する為に、合計という文字は含みたくないので、 Range("A2").Select Range(Selection, Selection.End(xlDown).Offset(-1)).Select と記載し、これは出来ました。 同様に、 1月、2月、3月という範囲も同様にxlToRightを使用し選択出来ました。 Range("B1").Select Range(Selection.End(xlToRight).Offset(, -1), Selection).Select しかし、B2:D4の範囲の指定の仕方がわかりませんでした。 データのレコード数は一定ではないのでB2:D4というように範囲を指定する事は出来ません。 そのときに応じてDさん、Eさんと増えたり、4月、5月と増えたりするので。 何か方法があればご指導お願いします。

  • Excel VBAの相対参照について

    Excelで相対参照を勉強しようと思い、 A3を選択後 1.A3:F3を選択 2.A3:F3に黄色の網かけを設定 3.A5を選択 を相対参照で記録しました。(記録は1.~3.までです) VBAを確認すると Sub 罫線() ActiveCell.Range("A1:F1").Select With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With ActiveCell.Offset(2, 0).Range("A1").Select End Sub という記述があったのですが、 なぜ、ActiveCell.Range("A1:F1").Selectと ActiveCell.Offset(2, 0).Range("A1").Selectというものがあるのでしょうか。 僕は、A1:F1の選択はしていませんし、網掛け後はA5を選択しているのに Range("A1").Selectの記述もよくわかりません。 ActiveCell.Offset(2, 0).Range("A1").Selectというのは 「選択したA1のセルから2行下、0列めを選択」と読めそうですが、 相対参照ならではの記述があるのでしょう。 ご存知の方、教え下さい。

  • 任意の複数セルをマクロで選択し、コピーする方法

    またお世話になります。 エクセルで選択された項目だけを抜き出して、新たに並べ替え、印刷するマクロを作っていますが、任意のセルからその横のセル3つを選択することが出来ません。表のイメージとしては、   A   B   C 1 氏名 獲得 点数 2 田中  3  30点 3 中村  5  50点 4 高橋 5 近藤  1  10点 6 南   ・   ・   ・ の中からB列に数値が入っている行だけを別のところへコピペするというものです。 現在まで作ったマクロは、 Sub Macro01() Range("B1").Select Selection.End(xlDown).Offset(0, -3).Select ここに「田中 3 30点」の3つのセルを選択する方法 Selection.Copy  ’印刷用の一番下から入力されているセルのひとつ下を選択する Range("N22").Select Selection.End(xlUp).Offset(1, 0).Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,   SkipBlanks:= _ False, Transpose:=False この作業を繰り返しして、一定のところで止まるようにしたい。 End Sub です。 お返事よろしくお願いいたします。

  • エクセルVBA ひとつ下の行を選択したい

    オートフィルタがかかっている状態で、 ひとつ下の行のセルを選択したいです。 具体的には、エクセルシートで選択したセルの情報をフォームで編集するのですが、 そのフォームの中のスピンボタンで選択しているセルを上下に移動させたいのです。 以下のコードだと、当然ですがフィルタで抽出されたセル以外も選択されてしまいます。エクセルシート上での矢印キーやENTERキー(入力後にセルを移動する方向が下のとき)と同じ動きがしたいです。 どうかお助けください。。。 Private Sub SpinButton1_SpinUp() Cells(Selection.Row - 1, Selection.Column).Select Call UserForm_Initialize End Sub Private Sub SpinButton1_SpinDown() Cells(Selection.Row + 1, Selection.Column).Select Call UserForm_Initialize End Sub

  • エクセルVBAでグラフの範囲を設定する方法

    お世話になっています。 グラフ自体は、作成済みのものを使用して、データの範囲だけを 変更させる方法を考えています。 A列に、データが入っている範囲を選択して、選択したセル範囲を グラフのデータ範囲としたいと思います。 現在、作成したプログラムは以下のものです。 当たり前なんでしょうが、以下のものではエラーになります。 Loopコマンドで、アクティブになったセルをグラフのデータ範囲に 設定する方法を教えてください。 よろしくお願いします。 Sub グラフ作成() ' Dim 範囲 As String Range("A1").Select Do Until ActiveCell = "" ActiveCell.Offset(1, 0).Activate Loop ActiveCell.Offset(-1, 0).Activate Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlUp)).Select   範囲 = ActiveCell ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.SetSourceData Source:=Range(範囲) End Sub

  • VBAでオートフィルタの可視セルクリア後空白行削除がうまくできません

    VBA初心者です。 オートフィルターで抽出した行を削除したくて、以下のように書いたのですが、最後の一文でエラーになってしまいます。 ◆エラー内容◆ 実行時エラー1004 重複する選択範囲に対してそのコマンドを使用することはできません。 ◆書いたVBA◆   Range("A2").Select Selection.AutoFilter Field:=1, Criteria1:="=1111", Operator:=xlAnd 'オートフィルターで「1111」を抽出 Dim r As Range Set r = Range(Range("A3"), Range("A" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible) r.ClearContents 'A列の可視セルの値をクリア Range("A2").Select Selection.AutoFilter 'オートフィルターの解除 r.SpecialCells(xlCellTypeBlanks).EntireRow.Delete 'A列が空白の行は削除→ ココがエラーになります --------------------------------------------------------- 元のファイル構成は2行目に項目名で、3行目からデータが入っています。 いろいろ調べたのですが、よくわからなかったので教えていただければ 幸いです。 宜しくお願いします。

  • Excel VBAで表組みしたらデバック発生

    Excel VBAの初心者です。Windows Vistaで Excel2007を使っています。 表をマクロの実行で作成したいと思っています。 何もないエクセルブックより 「開発」→「マクロの記録」→「相対参照」 →「表の作成」→「記録終了」→「相対参照で記録の解除」 →「エクセルマクロ有効ブックで保存」 ところがこのマクロ記録が入ったブックを再度立ち上げ、 表をオールクリアにし、マクロボタンより表作成を実行 させようとすると、次のエラーメッセージがでました。 『実行時エラー'9' インデックスが有効範囲にありません。』 デバックからModule1をみると以下の記述となっていました。 Sub 表組み() ' ' 表組み Macro ' ' ActiveCell.Range("A1:E5").Select Selection.Copy Windows("Book1").Activate ActiveSheet.Paste ActiveCell.Columns("A:A").EntireColumn.Select ActiveCell.Rows("1:1").EntireRow.RowHeight = 11.25 ActiveCell.Rows("1:5").EntireRow.Select Selection.RowHeight = 21.75 ActiveCell.Columns("A:A").EntireColumn.ColumnWidth = 14.88 ActiveCell.Offset(0, 4).Range("A1").Select Application.CutCopyMode = False With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With ActiveCell.Offset(1, -3).Range("A1:D4").Select Selection.NumberFormatLocal = "#,##0_ " ActiveCell.Select ActiveCell.FormulaR1C1 = "78000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "102000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "9800" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "65000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "204000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "500" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "86000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "151000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "10200" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, -3).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(-4, -2).Range("A1:D1").Select Selection.AutoFilter End Sub 上から9行目(?)のWindows("Book1").Activateに 黄色い矢印が示され、また行全体が黄色く四角に 覆われていました。 おそらくこの記述に問題があると思いますが、 どんな記述に変えたらいいのか分かりません。 Excel VBAにお詳しい方ご教示願います。 なお、マクロで作成したい図を添付いたします。 参考にしていただければ幸いです。

専門家に質問してみよう