
エクセルVBAのAdvancedFilterのついて教えてください
AdvancedFilterは検索条件をCriteriaRangeで指定するかと思うのですが、そのつど変更することは可能なのでしょうか
現在、B3からO3に検索するための「見出し」が入力されています
B4からO4に検索したい文字を入力しCriteriaRange:=Range("B3:O4")としてきたのですが、検索を増やし場合があります
B5からO5にも入力し、Range("B3:O5")とすればいいのでしょうが、そのつど検索範囲を変更するのは大変です
あらかじめRange("B3:O5")としてしまうと、4行目までしか入力しなかった場合に、5行目がORで検索されるので、余白行が検索されることになりすべてのデータを抽出してしまいます
最大でも10条件用意しておけば足りると思うので、Range("B3:O13")としたいです
"空白セルの場合は、上の行をコピーする"と命令させておけば、空白セルがなくなりすべてのデータを抽出してしまうということは回避できるのかな?と考えたのですが、どのように実現するか分かりませんでした
それか、"最終行を認識し、そこまでの範囲とする"とか"余白セルを無視する"ことも可能なのでしょうか
自分が思いついたやり方でなくでも構わないので、検索のつど範囲を変更できる方法があれば教えてください
よろしくお願いします
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
> B列に限ることなく、「B3からO13の表の中で、入力されているセルを含む行まで」
なるほど、失礼しました。
だとすると、#3さんの考え方を拝借して、
Range("フィルタをかける範囲").AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Intersect(Range("B3").CurrentRegion, Columns("B:O")), _
Unique:=False
としてやるのが早そうですね。
14行目以降にも何らかの(検索キー以外の)データがあるなら、
Intersect(Range("B3").CurrentRegion, Range("B3:O13"))
としてやっても良さそうです。
あ、言い忘れましたが、各Range・Columnsには
シート名の指定をお忘れなくなさってくださいね。
#3さま、ありがとうございます。
私も勉強させていただきました。
追加の返信ありがとうございます
No3さんの回答にも書きましたが、A4からA13まで1、2、3、・・・・、10と数字が振ってあり、教えていただいた2つの方法でやってもうまく抽出されません
sheet2に検索するめの表を作成しており、
Intersect(Worksheets("sheet2").Range("B3").CurrentRegion, ・・・といった感じでシートを指定しています
シートの指定方法が駄目なんですかね・・
No.4
- 回答日時:
こんにちは!
横からお邪魔します。
とりあえずB~O列の最終行取得だけ・・・
各列(他の列)に14行目以降にデータがない場合は(1行目には何らかのデータが入っているという前提)
Dim endRow As Long
endRow = ActiveSheet.UsedRange.Rows.Count
これでデータが入っている最終行が取得できると思います。
もし他列に14行目以降にデータがあったり、B~O列内で14行目以降にデータがある場合は
Cells(Rows.Count, 1).End(xlUp).Row
のような方法では3~13行目内の最終行取得はできませんので
Dim i As Long, endRow As Long
For i = 13 To 3 Step -1
If WorksheetFunction.CountA(Range(Cells(i, "B"), Cells(i, "O"))) <> 0 Then
endRow = i
Exit For
End If
Next i
のような感じで行えば
最終行は endRow に格納されます。
※ AdvancedFilter の直接の回答ではないので、
この程度でごめんなさいね。m(_ _)m
回答ありがとうございます
私は応用がきくほどVBAを詳しく分かっていませんが、ヒントになりそうですし、おそらく詳しい方が見たら応用できるんでしょうね。。。
ありがとうございました
No.3
- 回答日時:
No.1です。
列も範囲限定して
Intersect(Range("B3").CurrentRegion,Rows("3:13"),Columns("B:O"))
こんな感じでは無理かな?
追加の返信ありがとうございます
前回のn-junさんの回答を参考に、自分も同じコードを作成しました
A4からA13まで1から10の数字が振ってあるので
しかし、すべてのデータを抽出してしまっているので失敗だと思われます
なぜ駄目なのか・・・
試しにA4の1だけ残し、B4からO4の4行目のみ入力しなければ成功するので、1から10まで入力することで、BからOの列のみ限定できていないということなのだと思うのですが
No.2
- 回答日時:
スタートは3行目である・・と言うのは変わらないのでしょうか。
だとしたら、最終行を可変にしてやればOKと言うことでしょう。
なので、私からは「(ある列の)最終行を取得する」と言うやり方を提案します。
まぁ、このQ&Aでも良く見かけるやり方ですが、
応用が利きますから、覚えておいて損はありません。
例えば「B列(2列目)の最終行を知りたい」時には
Cells(Rows.Count, 2).End(xlUp).Row
としてやると取得できます。
つまり・・エクセル的にシートの最終行(B1048576セル、2003以前ならB65535セル)から
「Ctrl+↑」を押した時に止まる行番号を返してきます。
ちなみに「ある行(例えば3行目)の最終列」を取る場合は
Cells(3, Columns.Count).End(xlToLeft).Column
で出来ます。
応用として「B3セルから行方向に連続してデータがあり、その連続データの最終行」なら、
Range("B3").End(xlDown).Row
としてもOKです。
これを使って、
CriteriaRange:=Range("B3:O" & Cells(Rows.Count, 2).End(xlUp).Row)
あるいは
CriteriaRange:=Range("B3:O" & Range("B3").End(xlDown).Row)
※B3・B4セルにも必ずデータが入っている、と言うのが前提
としてやるといつでも最終行を指定してやることが出来ますね。
以上、参考まで。
さっそくの回答ありがとうございます
B3からO3まで見出しがあるのですが、4行目以降に入力する場合、それがB列からO列のどのセルに入力されるか分かりません
たとえば、4行目はB列(B4)に入力し、5行目はG列(G5)に入力することがあります
すると、B列のみの最終行を調べると4行目になりますが、ほかの行ほかの列にも入力されていることを見逃してしまうことになりませんか
なので、B列に限ることなく、「B3からO13の表の中で、入力されているセルを含む行まで」としたかったのですが、言葉足らずですみません
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Excel(エクセル) エクセル 条件に合う日付に入力された時間数の合計したい 4 2022/06/17 22:18
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) VBA 検索と入力 Excel ブック ぶぶぶ シート ししし 列V 検索対象の列です 最終行は、お 6 2023/05/17 01:40
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Excel(エクセル) エクセルのvlookupについて質問です 3 2023/01/05 15:15
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Visual Basic(VBA) シフト表のコマで「ブロック」されている前の時間の「出」を同一列の「休」と入れ替えたいがふぇきません。 2 2023/08/02 18:49
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで隣のセルと同じ内容に列...
-
Excel関数:「0」を除いた標準...
-
エクセルのカウントについて
-
エクセルで表の変換
-
エクセルでデータの並び替え
-
Excelのソート方法(タイトルと...
-
Excelで順番を逆に
-
【エクセル】区切り位置で分割...
-
Excelでブック間のデータの比較...
-
ExcelVBA 選択セルのある行を色...
-
エクセル日付 文字列の関数がエ...
-
連続したデータがいくつ存在す...
-
Excelのセル選択範囲の指...
-
Excel ピボットテーブル
-
エクセル 重複データの抽出につ...
-
Excel VBA で、2行1単位のデー...
-
エクセル 複数条件
-
あるexcel表からチェックボック...
-
エクセル、正数のみの集計[(負...
-
エクセル2000で〇×の並び替えを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで隣のセルと同じ内容に列...
-
【エクセル】区切り位置で分割...
-
更新前と更新後の差分をVBAを使...
-
Excel関数:「0」を除いた標準...
-
値の入っているセルのうち、一...
-
SUMIFで数値が入力されているセ...
-
エクセル、正数のみの集計[(負...
-
ピボットテーブル 0個の行を...
-
エクセルに入力された日付「S40...
-
エクセルで何種類のデータがあ...
-
SUMPRODUCT関数 行が増えても...
-
Excel関数で、範囲内の最後のセ...
-
複数の候補列から、検索値と一...
-
エクセル 8ケタの数字から日数...
-
EXCEL 階段状のグラフ
-
エクセルVBAを使ってセルに日付...
-
Excelのマクロで行を間引きたい
-
エクセル日付 文字列の関数がエ...
-
《エクセル2000》重複している...
-
入力するとかってにセルの色が...
おすすめ情報