[[20151126175312]] 『複数条件での検索』(zunzun) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『複数条件での検索』(zunzun)

  A    B   C   D   E   F
1 幅   5≦6     5   6
2 角度  60≦70   60  70
3 形   丸型
4 高さ  7≦8     7   8
5
6      TYPE  幅  角度  形  高さ 
7 ●    1  5.2  65   丸型  7
8      2  6.2  65   角型  5
9       3  8.5  80   丸型  9

7行目以下にTYPE毎(1〜1000)のデータがあります。
B1,B2,B3,B4に検索したい条件が入力しています。
D1:E4は、条件の左右の値を抜き出すようにしてあります。
値がある場合の検索するマクロ(一致したらA列に●を入力)はできたのですが、
B3以外をブランクにしても検索(例えばB1だけブランク)する方法はあるのでしょうか?

よろしくお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 とりあえず書きましたが検証はしていません。

 Sub Sample()
    Dim c As Range
    Dim chkA As Variant
    Dim chkW As Variant
    Dim chkH As Variant
    Dim chkS As Variant
    Dim minA As Variant
    Dim maxA As Variant
    Dim minW As Variant
    Dim maxW As Variant
    Dim minH As Variant
    Dim maxH As Variant
    Dim ng As Boolean

    chkW = Range("B1").Value
    minW = Range("D1").Value
    maxW = Range("E1").Value
    chkA = Range("B2").Value
    minA = Range("D2").Value
    maxA = Range("E2").Value
    chkS = Range("B3").Value
    chkH = Range("B4").Value
    minH = Range("D4").Value
    maxH = Range("E4").Value

    With Range("B7", Range("B" & Rows.Count).End(xlUp))
        .Offset(, -1).ClearContents
        For Each c In .Cells
            ng = False
            With c.EntireRow
                If Not IsEmpty(chkW) Then
                    If .Range("C1").Value < minW Or .Range("C1").Value > maxW Then ng = True
                End If
                If Not IsEmpty(chkA) Then
                    If .Range("D1").Value < minA Or .Range("D1").Value > maxA Then ng = True
                End If
                If Not IsEmpty(chkS) Then
                    If .Range("E1").Value <> chkS Then ng = True
                End If
                If Not IsEmpty(chkH) Then
                    If .Range("F1").Value < minH Or .Range("F1").Value > maxH Then ng = True
                End If
                If Not ng Then .Range("A1").Value = "●"
            End With
        Next
    End With

 End Sub

(β) 2015/11/26(木) 18:48


βさん
おはようございます。出来ました。
構文の内容を勉強します。
ありがとうございました。
(zunzun) 2015/11/27(金) 09:09

 書き込もうとしたら解決済みになっていたが、せっかく作ったので。

 関数だが。

 A7セルに
 =IF(AND(OR(B$1="",AND(C7>=D$1,C7<=E$1)),OR(B$2="",AND(D7>=D$2,D7<=E$2)),B$3=E7,OR(B$4="",AND(F7>=D$4,F7<=E$4))),"●","")
 と入力して下へフィルコピーではどうか。
(ねむねむ) 2015/11/27(金) 09:14

 別案
 条件範囲のレイアウトを下記に変更

   A     B       C       D      E       F       G
  幅	幅	角度	角度	形	高さ	高さ
 >=5	<=6	>=60	<=70	丸型	>=7	<=8

 Sub test()
    Range("b6").CurrentRegion.AdvancedFilter 1, [a1:g2]
 End Sub
(seiya) 2015/11/27(金) 10:04

 念のため形部分の条件は

 形
 =丸型

 のほうがいいかと。

 比較演算子をつけない場合は前方一致になるため、たとえば「丸型」「丸型A」などがあった場合のため。
(ねむねむ) 2015/11/27(金) 10:37

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.