オートフィルタで最終行を指定する必要は?
- エクセルでVBAでオートフィルタをする場合、最終行を指定する必要はあるのでしょうか?
- VBAを使用してエクセルでオートフィルタを行う際、最終行を取得・指定する必要があるかどうかについて教えてください。
- オートフィルタを設定する際、どちらの方法がより適切か、最終行の取得・指定が必要なのか教えてください。
- ベストアンサー
オートフィルタ 最終行を指定する必要は?
エクセルでVBAでオートフィルタをする場合、 ******************************************* Sub test1() 最終列 = Range("IV1").End(xlToLeft).Column Range(Cells(1, 1), Cells(1, 最終列)).AutoFilter End Sub Sub test2() 最終行 = Range("a65536").End(xlUp).Row 最終列 = Range("IV1").End(xlToLeft).Column Range(Cells(1, 1), Cells(最終行, 最終列)).AutoFilter End Sub ******************************************* どちらでもできるのですが、 test2のように最終行を取得・指定する必要はあるのでしょうか?
- iwateryokou26
- お礼率100% (21/21)
- オフィス系ソフト
- 回答数3
- ありがとう数3
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ご提示のサンプル・・と言うかオートフィルタの処理であれば、必要はあまりないと思います。 ただし、途中でまったくの空白行・空白列が挟まってしまう可能性があるなら必要な場合もあります。 (表の範囲は100行あるが、51行目には何も入力されていない、など) 任意のセル(下記はA1セル)を含む「連続する」表範囲を指定するのであれば、 Cells(1, 1).CurrentRegion.Select などのやり方もアリですね。
その他の回答 (2)
- keithin
- ベストアンサー率66% (5278/7940)
実際には、そのサンプルであれば sub macro1() range("A1").autofilter end sub とするだけで、勝手に右端列・最終行まで自動検知して適切にオートフィルタを取り付けてくれます。 ただし、何らかの理由で「全く空白の空行」「全く空白セルのみの空列」が範囲の中に含まれていた場合を想定して、右端列・最下行をキチンと調べて明示的に指定した方が、より「安全」とは言えます。 またご相談では列範囲も可変を想定していますが、通常は列範囲は既知で、下向け何行目までデータが記入されているかは不定というシチュエーションが大半です。 そういう場合 sub macro2() range("A:B").autofilter end sub などのようにして、取りこぼしを防ぐ方法もあります。
お礼
A1さえ選択すればいいのですか。 「全く空白の空行」は想定してません。ありがとうございました。
- K Kazz(@JazzCorp)
- ベストアンサー率31% (549/1751)
オートフィルタは、列で1つのセルを選択すれば機能するものなので、最終行を考える必要はないと思う。 それとは別に、データの最終行、最終列の割り出し方にギモンあり! A列、行1を基準にする、それはとっても実用的でイイが、未だに、 最終行:Range("a65536").End(xlUp).Row 最終列:Range("IV1").End(xlToLeft).Column を使う人がいる。これでは2007以降の仕様拡張についていけない!! そもそもマジック難波は御法度の筈。 故意に使っているような気もするが、正しくは、 最終行:Cells(Rows.Count, "A").End(xlUp).Row 最終列:Cells(1, Columns.Count).End(xlToLeft).Column 最終行、最終列の検出方法にはさまざまあるようだが、下のリンクの考察は参考になる。 No.8 ワークシートの最終行、最終列を取得する 2007/03/05 http://www.niji.or.jp/home/toru/notes/8.html ワークシートの最終セル(最終行、最終列)を取得する… VBAをはじめた人は誰しも最初に引っかかる問題ではありますが、幸いにもインターネットで検索するといくつもの解決法が見つかります。 ところが…動いたり動かなかったり、想定外の動作をすることがあります。そもそもいくつもの解決法があること自体おかしい、いったい本当の答えはどれ?この際、白黒はっきりさせようじゃないかというのがこのページの趣旨です。
お礼
最終行:Cells(Rows.Count, "A").End(xlUp).Row 最終列:Cells(1, Columns.Count).End(xlToLeft).Column を使うようにします。 オートフィルタは最終行を気にする必要はなさそうですね。ありがとうございました。
関連するQ&A
- オートフィルタをしても本当の最終行を取得したい
エクセル2007のVBAについて教えてください。 A1→目次 A2→あ A3→い A4→う A5→え A6→お オートフィルタで「え」を抽出します。 この状態で Sub test() MsgBox Range("a65536").End(xlUp).Row End Sub を実行すると、5が返ってきますが 実際の最終行は6です。 オートフィルタをしつつ、最終行を取得するには どうすればいいのでしょうか? ご回答よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- vba エクセル
2行目から、最終行までEmptyにしたいのにならないです。 1行目はフィールド行なのに、そのままにしたいのですが 2行目から最終行は空白にしたいです。 なので Sub TEST() With Sheets("log") lastRow = .Cells(.Rows.Count, "b").End(xlUp).Row LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column .Range(.Cells(2, LastCol), .Cells(lastRow, LastCol)) = Empty End With End Sub としたのですが、何も起こりません。 lastRowは100、LastColは5なのですが、 このマクロを実行しても何も起こらないです。 なぜでしょうか?
- 締切済み
- Excel(エクセル)
- シートの全てを半角にする
A列からT列、 行は10000行ほどあるのですが 全てを半角にしたいのですがマクロでないと無理でしょうか? Sub 全てを半角にする() Dim row行 As Long Dim col列 As Long For col列 = 1 To Range("IV1").End(xlToLeft).Column For row行 = 2 To Cells(65536, 2).End(xlUp).Row Cells(row行, col列) = StrConv(Cells(row行, col列), vbNarrow) Next row行 Next col列 End Sub でやるしかないですか? もっと効率のいい方法があったら教えてください!
- ベストアンサー
- オフィス系ソフト
- オートフィルタを使わずに行削除
こんにちは。 簡易記録のマクロで実行したものが、以下となります。 オートフィルタで選択した0以下の行を削除するために選択した物になります。 Sub 0以下を削除() ' Macro test ' ActiveSheet.Range("$A$1:$G$165").AutoFilter Field:=7, Criteria1:="<=0", _ Operator:=xlAnd Rows("3:56").Select ActiveWindow.SmallScroll Down:=66 Rows("3:165").Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$1:$G$123").AutoFilter Field:=7 End Sub 行数は、日によって、様々で何千行となる場合もあります。 そこで、オートフィルタを使用せず、G列目の0以下の数値を行削除を行いたいです。 どのように設定したらいいか教えて頂けると幸いです。 不備がありましたら、補足を入れますので、 お手数ではございますが、宜しくお願い致します。
- ベストアンサー
- Excel(エクセル)
- 【VBA】"オブジェクトが必要です"メッセージ出力
VBAを使用し、A列に日付、B列に数量、C列に単価、D列に金額を入力し、 数量*単価にて、金額を求めるVBAを作成しています。 そこまでは上手くいくのですが、D列で求めた金額を最終行で合計する事で 躓いてしまっています。 行は常に追加され可変の為、最終行を「Cells(Row.Count, 1).End(xlUp).Row」 にて引っ張ってこようと思っております。以下のようなVBAを記載しましたが、 「オブジェクトが必要です」とのメッセージがでて、処理が上手くいきません。 どのような問題があるのか、お分かりの方、ご回答頂けますと幸いです。 ■環境 Windows7 Excel2010 ■VBA Sub test() Dim i As Long Dim j As Long Dim k As Long For i = 2 To Cells(Row.Count, 1).End(xlUp).Row Cells(i, 4) = Cells(i, 2) * Cells(i, 3) Next j = Cells(Row.Count, 1).End(xlUp).Row + 1 k = Cells(j, 1).End(xlUp).Row Cells(j, 4) = WorksheetFunction.Sum(Cells(2, 4), Cells(k, 4)) End Sub
- 締切済み
- Windows 7
- Excelでフィルターのかかっているときの最終行の取り方。
Dim mySh As Worksheet Set mySh = Sheet("Sheet1") Debug.Print mySh.Cells(mySh.Rows.Count,1).End(xlup).Row でデータのあるA列の最終行を取得していますが、この場合、フィルターがかかっていると実際のデータのある最終行でなくて見えている部分の最終行が返ってきます。 Excel2003 SP3 WindowsXP SP3 フィルターがかかっていても実際のデータのある最終行を取得する方法あるのでしょうか?
- ベストアンサー
- オフィス系ソフト
- UsedRangeを使ってソートすることは可能?
UsedRangeを使ってソートすることは可能ですか? エクセルですが 学年 組 出席番号 2 A 1 1 B 2 と言うデータがあり、 これにフィルタをかけつつ、A列で昇順に並び替えるVBAを作ってるのですが Sub さんぷる() オートフィルタをかける Range(Cells(1, 1), Cells(1, Cells(1, Columns.Count).End(xlToLeft).Column)).AutoFilter UsedRange.Sort Key1:=Cells(1, 1), order1:=xlAscending End Sub とすると、 UsedRangeでコンパイルエラーになるのですが どうすればよろしいでしょうか?
- ベストアンサー
- オフィス系ソフト
- 最終列に入力されている文字を表示する
エクセルVBAで最終列に入力されている値の表示方法について教えてください。 最終行については表示できるのですが、最終列に入力されているものの表示がうまくいきません。 A列の最終行の値をセル”D1”に表示するについては Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Long r = Cells(Rows.Count, 1).End(xlUp).Row Range("D1").Value = Cells(r, 1).Value End Sub でうまくいきました。 最終行、例えば3列目の10行目に”111”と入力されているときにセル”D1”に”111”と表示するようにはどうしたらよいのでしょうか。 どなたがご指南ください宜しくお願いします。
- ベストアンサー
- オフィス系ソフト
- VBA 最終列に入力された値の表示について
VBAで最終列に入力された値の表示について教えてください。 例えば10行目の10列目(J列)に”123”と入力された値をセル”D1”に表示させたいのですがどのようにすればよいのでしょうか。 A列の最終行については Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Long r = Cells(Rows.Count, 1).End(xlUp).Row Range("D1").Value = Cells(r, 1).Value End Sub でうまく表示できたのですが、最終列についてなかなかうまくいきません。 どなたかご指南ください宜しくお願いします。
- ベストアンサー
- オフィス系ソフト
- 最終行に罫線を挿入
A列からU列までの表があり、B列の最終行を基準にしてA列からU列までラインを引きたいのですが、 下記のように作成してみましたが、うまく作動しません。 REnd = Range("B65536").End(xlUp).Row + 1 Range(Cells(REnd.Row, "A"), Cells(REnd.Row, "U")).Select With Selection.Borders(xlEdgeTop) .LineStyle = xlDouble .Weight = xlThick .ColorIndex = xlAutomatic End With
- ベストアンサー
- Windows系OS
お礼
Cells(1, 1).CurrentRegion.Select は初めて知りました。ありがとうございました。