[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『IF構文の条件指定の仕方』(ゆき)
本当にいつもお世話になります。 Excel2010です。
の関連です。
ユーザーフォームで条件を指定してデータを抽出したいのですが、条件指定の仕方で困っています。
「未出荷リスト」シートの「担当者」(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.