
下記のコードはArrayが2つですが、Arrayの部分に別シートのC1からC30セルを参照したい場合
どのようなコードにすればいいですか?
またそのようにした場合
ActiveSheet.Range("A2").AutoFilter Field:=6, Criteria1:= _
"*" & Target_Word(0) & "*", _
Operator:=xlOr, Criteria2:="*" & Target_Word(1) & "*"
の部分はどのように変更すればいいですか?
Sub オートフィルタで複数条件を含むリスト抽出()
Dim Target_Word() As Variant
Target_Word = Array("川", "福")
ActiveSheet.Range("A2").AutoFilter Field:=6, Criteria1:= _
"*" & Target_Word(0) & "*", _
Operator:=xlOr, Criteria2:="*" & Target_Word(1) & "*"
End Sub
No.4ベストアンサー
- 回答日時:
No3です。
たびたび申し訳ない。(また、やってしまった)
No3は破棄してください。以下に入れ替えてください。
Sub Sample()
Dim cRange As Range
Dim c As Long, r As Long
Dim fTitle As String, v
fTitle = "@" & Chr(27) & "@"
Const conditionRange = "Sheet2!C1:C5" ' 条件文字群範囲
Const filterRange = "Sheet1!F1:F20" ' フィルター対象範囲(キー列)
With Range(filterRange).Worksheet
c = .UsedRange.SpecialCells(xlCellTypeLastCell).Column + 1
For r = 1 To Range(conditionRange).Rows.Count
.Cells(r + 1, c).Value = "*" & Range(conditionRange).Cells(r, 1).Value & "*"
Next r
Set cRange = .Cells(1, c).Resize(r)
End With
With Range(filterRange)
.AutoFilter
v = .Cells(1, 1).Value
If .Cells(1, 1).HasFormula Then v = .Cells(1, 1).Formula
cRange.Cells(1, 1).Value = fTitle
.Cells(1, 1) = fTitle
.AdvancedFilter xlFilterInPlace, cRange
.Cells(1, 1).Value = v
End With
cRange.EntireColumn.Delete
End Sub
No.5
- 回答日時:
ご質問の要件で、AdvancedFilter は、凝り過ぎでしょ!!
こんなので、十分なのでは・・・。
Sub オートフィルタで複数条件を含むリスト抽出()
Dim Target_Word() As Variant
Dim i As Long
Target_Word = WorksheetFunction.Transpose(Range("C1:C30"))
For i = 1 To UBound(Target_Word)
Target_Word(i) = "*" & Target_Word(i) & "*"
Next i
ActiveSheet.Range("A2").AutoFilter Field:=6, _
Criteria1:=Target_Word, Operator:=xlFilterValues
End Sub
No.3
- 回答日時:
No2です。
ちょっとミスりました。
(ActiveSheetへの処理が残って、混在してしまっていました。)
以下に、訂正してください。スミマセン。
Sub Sample()
Dim cRange As Range
Dim c As Long, r As Long
Dim fTitle As String, v
fTitle = "@" & Chr(27) & "@"
Const conditionRange = "Sheet2!C1:C5" ' 条件文字群範囲
Const filterRange = "Sheet1!F1:F20" ' フィルター対象範囲(キー列)
With Range(filterRange)
c = .Worksheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column + 1
For r = 1 To Range(conditionRange).Rows.Count
.Cells(r + 1, c).Value = "*" & Range(conditionRange).Cells(r, 1).Value & "*"
Next r
Set cRange = .Cells(1, c).Resize(r)
.AutoFilter
v = .Cells(1, 1).Value
If .Cells(1, 1).HasFormula Then v = .Cells(1, 1).Formula
cRange.Cells(1, 1).Value = fTitle
.Cells(1, 1) = fTitle
.AdvancedFilter xlFilterInPlace, cRange
.Cells(1, 1).Value = v
End With
cRange.EntireColumn.Delete
End Sub
No.2
- 回答日時:
No1です。
>例のコード見たいなものをご提示頂く事はできますでしょうか?
条件がよくわからないので、以下は、勝手に想定した内容で作成したものです。
●セル範囲等は、とりあえず直接アドレスで指定する方式にしてあります。
●conditionRange は条件の語彙群があるセル範囲。
必ず「含む」及びOrで抽出しますので、範囲内に空白セルがあると全てが抽出されます。
●filterRange は抽出対象のセル範囲。ただし、抽出対象列を指定してください。
(行の表示/非常時なので、比較対象列だけを指定しても、行全体が表示/非表示になります)
●フィルタオプションの場合、タイトル項目が必要になりますが、空白だったり重複していたりする可能性を考慮して、一時的に処理用のタイトルを設定し元に戻すといった処理などをしていますので、若干長い記述になっています。
●サンプルなので、指定範囲や対象シートのチェック等は一切行っていません。
(おかしな指定をすれば、エラーになる可能性があります)
Sub Sample()
Dim cRange As Range
Dim c As Long, r As Long
Dim fTitle As String, v
fTitle = "@" & Chr(27) & "@"
Const conditionRange = "Sheet2!C1:C5" ' 条件文字群範囲
Const filterRange = "Sheet1!F1:F20" ' フィルター対象範囲(キー列)
c = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column + 1
For r = 1 To Range(conditionRange).Rows.Count
Cells(r + 1, c).Value = "*" & Range(conditionRange).Cells(r, 1).Value & "*"
Next r
Set cRange = Cells(1, c).Resize(r)
With Range(filterRange)
.AutoFilter
v = .Cells(1, 1).Value
If .Cells(1, 1).HasFormula Then v = .Cells(1, 1).Formula
cRange.Cells(1, 1).Value = fTitle
.Cells(1, 1) = fTitle
.AdvancedFilter xlFilterInPlace, cRange
.Cells(1, 1).Value = v
End With
cRange.EntireColumn.Delete
End Sub
No.1
- 回答日時:
こんにちは
単純にリストを並べるだけならば、Criteria1に配列をそのまま指定すれば数の制限はありませんけれど、ご提示の例の場合はワイルドカードで「含む」指定になっているので、手操作でいう所の「カスタムフィルター」に当たります。
残念ながら、こちらの場合は条件指定が2種類までしかできない仕様のようです。
Andのフィルターであれば、フィルター操作を繰り返すことでも可能ですが、Orの場合はそうもいきませんね。
・・ということで、ご質問内容を実現する方法として思いつく対応法を以下に。
1)エクセル機能のフィルターオプションを利用する
VBAで言えば AdvancedFilter を利用する方法です。
https://learn.microsoft.com/ja-jp/office/vba/api …
こちらであれば、Orで3つ以上の条件を指定することも可能です。
ただし、CriteriaRange はRangeオブジェクト以外を受け付けないようですので、配列を直接指定することはできません。
シート上のどこかの空き列に条件を作成する必要があります。
(不要であれば、フィルター後に削除することは可能です)
2)フィルター機能を利用せずに自前で実装する
普通に対象範囲内をループで処理する考え方です。
フィルターをかけたい範囲に対して、1行ずつ「条件に合うか否か」を判断し、その行を表示/非表示の処理をすることで、お望みのフィルターをかけた場合と同様の結果を得ることができるでしょう。
こちらであれば、全てメモリ内で処理できるので、一時的な空き列の利用のようなことはしなくても済みます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) Sheet2の日付をキーにオートフィルターで2023年1月のデータを抽出し、Sheet3へ書き出すた 2 2023/03/06 23:57
- Visual Basic(VBA) エクセル VBAで複数セル選択時エラーになる問題 3 2022/10/04 02:40
- Excel(エクセル) エクセルのイベントプロシージャーでF列の最終行のセルの入力をトリガーにしたいのですが 1 2022/10/14 09:36
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
python random.choice について
-
JavaScriptの定数名が取り消し...
-
PHPで無限ループしてしまっ...
-
Excel-VBAで、Importをする方法
-
access2003 クエリSQL文に...
-
Visual Basicでツリービューリ...
-
Excelシート上で右クリックがで...
-
エクセルに見えない文字(JISX0...
-
4列ごとに ならびかえたい
-
VSコードでバックスペースキー...
-
きれいなコードを書いてもらう...
-
VLookup関数を使ってラベルに表...
-
PreviewKeyDownイベントが2回...
-
なぜシフトJISにロシア語がある...
-
コマンドボタンを押したときに...
-
Aのシートにデータがあり、Bの...
-
JISコードと句点コードと1...
-
美しいソースとは?
-
Exel VBA 別ブックから該当デ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
1日に1人がこなせるプログラム...
-
JavaScriptの定数名が取り消し...
-
access2021 VBA メソッドまたは...
-
JANコードとPOSコードは同じ?
-
PreviewKeyDownイベントが2回...
-
エクセルに見えない文字(JISX0...
-
Excelシート上で右クリックがで...
-
オートフィルタで抽出結果に 罫...
-
Exel VBA 別ブックから該当デ...
-
access2003 クエリSQL文に...
-
変数名「cur」について
-
Nullの使い方が不正です。
-
【VB6】実行ファイルとした後、...
-
VBAでファイルオープン後にコー...
-
COBOLの文法
-
Accessでの抽出で完全一致。
-
AccessでReplace関数を使うときに…
-
Access DCountでの連番について
-
sinカーブの表示のさせ方
おすすめ情報
ありがとうございます。
教えて頂いたAdvancedFilter を使用し、ググってみたり、例のコードを改良して
コードを実行してみたのですがうまくいきません。
例のコード見たいなものをご提示頂く事はできますでしょうか?