[[20130201143300]] 『IF構文の条件指定の仕方』(ゆき) ページの最後に飛ぶ

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

 

『IF構文の条件指定の仕方』(ゆき)

 本当にいつもお世話になります。
 Excel2010です。

[[20130130184834]]

 の関連です。

 ユーザーフォームで条件を指定してデータを抽出したいのですが、条件指定の仕方で困っています。

 「未出荷リスト」シートの「担当者」(I列)・「締日」(E列)で条件を指定してデータを抜き出し、
 雛形をコピーしたシートに書き出そうとしています。

  Private Sub UserForm_Initialize()

    With ComboTanto  '担当者を指定するコンボボックス
        .AddItem "田中"
        .AddItem "鈴木"
        .AddItem "指定なし"

    End With

    With ComboSime  '締日を指定するコンボボックス
        .AddItem "15日"
        .AddItem "20日"
        .AddItem "末締"
        .AddItem "指定なし"

    End With

 End Sub

 このようにコントロールを配置していますが、データシートの中には「未定」や「不明」といった
 コンボボックスのリストに無い文字列が入っていることがあります。

 リストに無いデータは、どの条件であっても必ず抽出するようにしたいのですが、その指定のIF構文の書き方がうまくいきません…

 例えば、「締日」(E列)に

    E
 1
 2  締日 ←見出し
 3  20日
 4  不明
 5   -
 6  末締
 7  20日
 8  15日

 というデータが入っていて、ComboSimeの「20日」を選んだ時に、3・7行目だけでなく
 4・5行目も出るようにしたいです。
 (15日・末締を選んだ時も同様。「指定なし」は全件抽出するので問題なし)

 「担当者」も同様です。

 ComboBoxの値(例えば「20日」)を選んだ時にデータシートの値と一致するものだけを抽出すればいいなら

 'ws1は「未出荷リスト」シート
 If ComboSime.Value = ws1.Cells(i, 5).Value And ComboTanto.Value = ws1.Cells(i, 9).Value And ws1.Cells(i, 11) = "" Then

 (K列が空白のものという条件を含んでいます)

  --データを「未出荷リスト」から新しいシートに転記するコード--

 という指定の仕方でいいのですが、これに加えて「リストにないもの(不明や未定など)も全部含める」
 という指定の仕方がわかりません…

 説明がややこしくてすみません。

 不足分は補いますのでよろしくお願いします。


 なかなか回答付かないですね。

 動作確認をしていないアイデアレベルですが、下記のような感じでできないでしょうか。
 辞書を使ったりした方がスマートだと思いますけれど、とりあえず案ということで。
 (Mook)

 Sub MyFilter()
    '// 選択されたもの以外を羅列
    Dim 不一致リスト担当 As String
    不一致リスト担当 = ""
    With UserForm1.ComboBoxTanto
        For j = 0 To .ListCount - 1
            If .List(j) <> .Value And .List(j) <> "指定なし" Then
                不一致リスト担当 = 不一致リスト担当 & "/" & .List(j)

            Next
        Next
    End With
    不一致リスト担当 = 不一致リスト担当 & "/"

    '// 選択されたもの以外を羅列
    Dim 不一致リスト締め As String
    不一致リスト締め = ""
    With UserForm1.ComboBoxSime
        For j = 0 To .ListCount - 1
            If .List(j) <> .Value And .List(j) <> "指定なし" Then
                不一致リスト締め = 不一致リスト締め & "/" & .List(j)

            Next
        Next
    End With
    不一致リスト締め = 不一致リスト締め & "/"

    '// シートの準備
    Dim コピー元シート As Worksheet
    Set コピー元シート = Worksheets("未出荷リスト")

    Dim コピー先シート As Worksheet
    Worksheets("雛形").Copy
    Set コピー先シート = ActiveSheet

    '// 一致しないものをコピー
    コピー先行 = 2
    For 行 = 2 To 最終行
        If InStr(不一致リスト担当, "/" & コピー元シート.Cells(行, "I").Value & "/") = 0 _
        And InStr(不一致リスト締め, "/" & コピー元シート.Cells(行, "E").Value & "/") = 0 Then
            コピーしたいシート.Rows(コピー先行) = コピー元シート.Rows(行)
            コピー先行 = コピー先行 + 1
        End If
    Next
 End Sub


 (Mook)様ありがとうございます。

 テストデータで試してうまくいったので、本番に組み込んでみます。
 助かりました

 (ゆき)

コメント返信:

[ 一覧(最新更新順) ]


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