出産前後の痔にはご注意!

VBA初心者ですみません

フィルタ内D列にA社、B社、C社・・・と入力してあり、フィルタ外でA社(BA3)、B社(BA4)、C社(BA5)とある場合で、フィルタ外の値(BA3~5)を参照して表示する場合で分からなくて困っています

B社のみを表示する場合は
Range("A1").AutoFilter field:=4, Criteria1:=Range("BA4").Value
これでいけました

ここからが壁になってまして
B社、C社を表示する場合は
Range("A1").AutoFilter field:=4, Criteria1:=Range("BA4:BA5").Value
なんて安易に考えてやってみたところ
B社を表示した直後C社を表示して終わる結果になってしまいました
B社とC社を同時表示してほしいのですが・・・。

そんなのも分からないならセル参照なんてしないでArrayで直接社名指定しろよと怒られそうですが
すでに入力してあるデータ整理の為、何か方法があれば教えて頂けると幸いです。

A 回答 (2件)

こんにちは!



OR条件が三つと判っているのであれば・・・

Sub Sample1()
Dim myAry As Variant
myAry = Array(Range("BA3"), Range("BA4"), Range("BA5"))
Range("A1").AutoFilter field:=4, Criteria1:=myAry, Operator:=xlFilterValues
End Sub

くらいで大丈夫だと思います。

OR条件の数が限定されない場合は

Sub Sample2()
Dim i As Long, myStr As String, myAry As Variant
For i = 3 To 5 '←ここでフィルタ条件数を決める//
myStr = myStr & Cells(i, "BA") & ","
Next i
myAry = Array(Split(Left(myStr, Len(myStr) - 1), ","))
Range("A1").AutoFilter field:=4, Criteria1:=myAry, Operator:=xlFilterValues
End Sub

といった感じで対応できると思います。m(_ _)m
    • good
    • 1
この回答へのお礼

ありがとう

無事解決できました。
とても分かりやすく説明して頂いて助かりました。
ありがとうございました。

お礼日時:2017/01/26 18:32

オートフィルタでやるのなら


Range("$A$1").AutoFilter _
Field:=1, _
Criteria1:=Range("BA4").Value, _
Operator:=xlOr, _
Criteria2:=Range("BA5").Value

でしょうけど フィルタの詳細設定でやった方がいいと思います。
    • good
    • 0
この回答へのお礼

ありがとう

ありがとうございます。
2つを超えた場合も知りたかったのです。
丁寧に説明して頂いたのに申し訳ございません。
説明ヘタですみません。

お礼日時:2017/01/26 18:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Qexcelオートフィルタの検索条件をセルに入力したい

以下のようなexcelのリストがあるとします。

    A       B    C~
1 佐藤・鈴木  Aタイプ
2 田中・山田  Bタイプ
3  佐藤     Aタイプ
4  田中     Cタイプ
5 山田・鈴木  Cタイプ

A列の"田"が含まれる行を抽出したい場合
オートフィルタをかけ、オプションの抽出条件の指定で
"田"を含む、で検索すれば良い、というのはわかります。
ですが、この動作をもうちょっと簡単にできないかと思っています。
具体的には、以下のようにセルに入力して検索・抽出するとはできないでしょうか。

    A       B    C~
1   田


4   A       B    C~
6 田中・山田  Bタイプ
8  田中     Cタイプ
9 山田・鈴木  Cタイプ
(1、2行目=検索用 3行目=空き 4行目以降=リスト)

過去の質問で、同じようにセルに入力して抽出する方法を
聞いていた方がいらっしゃったので参考にしようと思ったのですが
方法がVBAを使ったもので、VBAの知識がまったく無いために
さっぱり理解することができませんでした。

何か良い方法がありましたら教えていただけないでしょうか。

以下のようなexcelのリストがあるとします。

    A       B    C~
1 佐藤・鈴木  Aタイプ
2 田中・山田  Bタイプ
3  佐藤     Aタイプ
4  田中     Cタイプ
5 山田・鈴木  Cタイプ

A列の"田"が含まれる行を抽出したい場合
オートフィルタをかけ、オプションの抽出条件の指定で
"田"を含む、で検索すれば良い、というのはわかります。
ですが、この動作をもうちょっと簡単にできないかと思っています。
具体的には、以下のようにセルに入力し...続きを読む

Aベストアンサー

関数でもできるのでご参考に。(imogasi方式)
データ例 A1:B6に
AB
佐藤・鈴木Aタイプ
田中・山田Bタイプ
佐藤Aタイプ
田中Cタイプ
山田・鈴木Cタイプ
E1に「田」の字を入れておく。
C2に
=IF(ISERROR(FIND($E$1,A2)),"",MAX($C$1:C1)+1)
C3:C6に式を複写する。C2:C6は
空白
1
空白
2
3
E3に
=INDEX($A$1:$B$6,MATCH(ROW()-2,$C$1:$C$6,0),COLUMN()-4)
と入れてF3に複写。
E3:F3を範囲指定し、F3に+ハンドルを出しF3まで引っ張る。
結果
田中・山田Bタイプ
田中Cタイプ
山田・鈴木Cタイプ
C列、E列、F列は別の列へ変えられる。別シートにも替えられる。
ただし式のセル指定・範囲指定、マイナスする値 を変えなければなりません。

QExcelマクロ:オートフィルタ3つ以上の条件

添付の画像を使って質問させて頂きます。
バージョンは2010です。

お客様名 A,B,C,D,E 以外のお客様名を抽出するようにマクロを組みたいのですが

ActiveSheet.Range("$A$1:$D$15").AutoFilter Field:=2, Criteria1:= _
"<"&">&"A", Operator:=xlOr, Criteria2:="<"&">&"B""

の様に考えましたが一つの列に3つ以上の条件では対応できないことが分かりました。

添付の画像は実際使用している表を簡素化しているため
お客様名が少ないですが、実際は多様なお客様名があります。

その中で特定した5社以外のお客様の情報を抽出したいです。

宜しくお願い致します。

Aベストアンサー

>特定した5社以外のお客様の情報を抽出したい

sub macro1()
 dim a
 a = application.transpose(range("B2:B" & range("B65536").end(xlup).row).value)

 a = filter(a, "A", false)
 a = filter(a, "B", false)
 a = filter(a, "C", false)
 a = filter(a, "D", false)
 a = filter(a, "E", false)

 range("A:D").autofilter field:=2, criteria1:=a, operator:=xlfiltervalues
end sub

とかでいいです。

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

QエクセルVBAでフィルタ抽出部分のみのコピー

エクセルVBAで売上帳を作成していますが、オートフィルタでデータ抽出した後、表示されている行のみをコピーして別シートに貼りつけるにはどうすればよいのでしょう?

別シートは指定したセルに値のみの貼り付けをしたいと思っています。

宜しくお願いします。

Aベストアンサー

こんにちは
マクロの記録で作成した一例です。コメントを読んで、適当にアレンジして下さい。

Option Explicit
Sub SampleMacro1()
'
' SampleMacro1 Macro
' マクロ記録日 : 2009/3/13
'
 'フィルター部分
 Selection.AutoFilter Field:=1, Criteria1:="=ほげほげ", Operator:=xlAnd
 '可視セルの選択
 Selection.SpecialCells(xlCellTypeVisible).Select
 '選択範囲のコピー
 Selection.Copy
 'コピー先のシート&セル選択
 Sheets("Sheet2").Select
 Range("A1").Select
 'ペースト
 ActiveSheet.Paste
 'コピー元シートに戻りコピー状態解除
 Sheets("Sheet1").Select
 Application.CutCopyMode = False
 Range("A1").Select
End Sub

外してたら、ごめんなさい

こんにちは
マクロの記録で作成した一例です。コメントを読んで、適当にアレンジして下さい。

Option Explicit
Sub SampleMacro1()
'
' SampleMacro1 Macro
' マクロ記録日 : 2009/3/13
'
 'フィルター部分
 Selection.AutoFilter Field:=1, Criteria1:="=ほげほげ", Operator:=xlAnd
 '可視セルの選択
 Selection.SpecialCells(xlCellTypeVisible).Select
 '選択範囲のコピー
 Selection.Copy
 'コピー先のシート&セル選択
 Sheets("Sheet2").Select
 Range("A1").Select
 'ペース...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Qオートフィルターで指定した値を取得したい

表題の通りです。

オートフィルターで指定した値を、別のセルに表示させたいのですが
そのようなことは可能でしょうか?

Aベストアンサー

標題の「オートフィルターで指定した値」とは、「オートフィルタによる絞り込みの条件とした値」という意味でよろしいでしょうか?


A 列に数値データがあり、それを 1 種類の値のみに絞り込むという場合、次式によりその値を取得できます。この数式は、平均値を求めています。したがって A 列に複数の種類の値が表示されている状態では、小数などを返します。

=subtotal(1,a:a)


文字列などの数値でない値であっても取得するには、マクロを使います。オートフィルタがあるシートのシートタブを右クリック、「コードの表示」から表示されるコードウィンドウに次のコードを貼り付け。

絞り込んだ瞬間ではなく、その次にカーソルを動かした瞬間に、E1 セルに絞り込み条件となっている値を記入します。


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  With Me
    If .AutoFilterMode Then
      With .AutoFilter.Filters(1)
        If .On Then Range("e1").Value = Replace(.Criteria1, "=", "")
      End With
    End If
  End With
End Sub

標題の「オートフィルターで指定した値」とは、「オートフィルタによる絞り込みの条件とした値」という意味でよろしいでしょうか?


A 列に数値データがあり、それを 1 種類の値のみに絞り込むという場合、次式によりその値を取得できます。この数式は、平均値を求めています。したがって A 列に複数の種類の値が表示されている状態では、小数などを返します。

=subtotal(1,a:a)


文字列などの数値でない値であっても取得するには、マクロを使います。オートフィルタがあるシートのシートタブを右クリック、「...続きを読む

Qオートフィルタで3つ以上の条件を検索する事はできる

タイトルの件、質問します。

下記のデータがあるとします。この内、オートフィルタで
●世田谷区 ●葛飾区 ●港区
の3つの区の情報のみ表示する事はできますか??
2つの情報なら選択できるようになっていますが、3つ以上はできません。

【データ】
東京都世田谷区A町
東京都葛飾区 B町
東京都港区 c町
東京都港区 d町
東京都新宿区B町
東京都板橋区B町
東京都墨田区B町

ご存知の方、いらっしゃいましたら、宜しくお願いします。

Aベストアンサー

オートフィルタでは出来ないが、フィルタオプションの設定で別シートに抽出可能ですが如何でしょうか。
検索条件欄で1行目にデータの見出し名、2行目に*世田谷*、3行目に*葛飾区*、4行目に*港区*とすれば抽出できます。
元データに見出し行がなければ、追加定義して下さい。

操作説明は添付のURLを参照下さい。

参考URL:http://www.eurus.dti.ne.jp/~yoneyama/Excel/filter3.htm

QExcel VBAのオートフィルタ解除について

こんばんわ。
現在、コマンドボタン(オートフィルタの設定)にオートフィルタを設定するようなマクロを登録しています。
そして、別のコマンドボタンにはオートフィルタの解除を実施するマクロを書きたいんです。

しかし、オートフィルタを設定していない時に、解除のマクロを実行するとエラーになってしまいます。どうしたら良いのでしょうか?

If・・・文を使って、対象セルにオートフィルタが設定している時は解除を実施し、オートフィルタが設定されてない時は、何も実施しない。

このようなマクロはどうしたら良いのでしょうか?

よろしくお願いします。

Aベストアンサー

フィルタされていないシートに対して実行すると、
実行時エラー'1004':WorksheetクラスのShowAllDataメソッドが失敗しました。
というエラーが出ます(多分)

対象のシートが必ずアクティブなら、
If ActiveSheet.AutoFilterMode Then
 'オートフィルタを解除
 ActiveSheet.AutoFilterMode = False
End If


対象のシートがアクティブでなく、シートを指定する必要があるなら
If Worksheets("sheet1").AutoFilterMode Then
 'オートフィルタを解除
Worksheets("sheet1").AutoFilterMode = False
End If
(シート名は適時変更要)

これで、どうでしょうか?

QエクセルVBA 複数の条件を含む対象を抜き出す。

エクセルVBAについて質問です。
エクセルのバージョンは2003と2007を主に使用しています。

下記の様なデータがあるときに、部活が「野球」でかつクラブは「囲碁」に入っている生徒の学籍番号を別のシート(Sheet2)のB3から下に順にリスト化するマクロがどうしても出来なくて困っています。
find next等を使うのでは無いかと色々してみましたが上手く出来ない現状です。

<sheet1>
   A      B      C       D    E

1 学籍番号 学年    名前     部活   クラブ
2 2222222   1   山田 太郎  野球   囲碁
3 9854923   2   吉田 次郎   剣道   絵画  
4 1111111   3   佐藤 三郎  野球   囲碁
5 8888883   1   米山 権蔵  卓球   囲碁

Aベストアンサー

こんばんは!
Sheet1のA列(学籍番号)のみをSheet2のB3セル以降に表示すれば良いわけですね?
一例です。

画面左下のSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面に
↓のコードをコピー&ペーストしてマクロを実行してみてください。

Sub test()
Dim i, k As Long
Dim ws As Worksheet
Set ws = Worksheets(2)
k = 2
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, 4) = "野球" And Cells(i, 5) = "囲碁" Then
k = k + 1
ws.Cells(k, 2) = Cells(i, 1)
End If
Next i
End Sub

こんな感じではどうでしょうか?m(_ _)m


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング