- 締切済み
ある文字を含む列と同じ行にある列と一致の文字の除外
"名称"(D列)で*ABCD*と含まれるものと同じ行にある"番号"(B列)が一致するものを全て除外したい(D列の値は異なるが、 B列の値が一緒なものを除外したい)。 下記のコードに上記の内容のコードを加えたいのですがやり方を教えていただけないでしょうか? ちなみにVBA初心者なためお手柔らかにお願い致します。 Sub 分別() Dim j As Long j = Cells(Rows.Count, 1).End(xlUp).Row With Range(Cells(3, 1), Cells(j, 43)) .AutoFilter Field:=37, Criteria1:="EFGK" .AutoFilter Field:=4, Criteria1:="*FF0001*", Operator:=xlOr, Criteria2:="*DD0002*" End With End Sub
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- masnoske
- ベストアンサー率35% (67/190)
回答側が理解できない点を質問者が理解できないようなら, > "名称"(D列)で*ABCD*と含まれるものと同じ行にある"番号"(B列)が一致するものを全て除外したい(D列の値は異なるが、 B列の値が一緒なものを除外したい)。 の "*ABCD*" と > .AutoFilter Field:=37, Criteria1:="EFGK" .AutoFilter Field:=4, Criteria1:="*FF0001*", Operator:=xlOr, Criteria2:="*DD0002*" の Criteria1,Criteria2の関係が質問文から全く読み取れないのです. D列の "*ABCD*" と "EFGK","*FF0001*", "*DD0002*" の関係が謎です.せめて元データの提示でもあれば,回答者もそれなりに推測できると思いますよ.
- dell_OK
- ベストアンサー率13% (766/5720)
まったくもって、回答No.1と回答No.2に同感です。 が、私が勝手に解釈した範囲で、サンプルコードを載せてみます。 フィルタの条件だけではできそうにありません。 なのでD列とB列を走査して、除外したい行を調べて、フィルタ用の列を別に用意する方法です。 フィルタの開始行が3行目のようなので3行目は見出し行、4行目からデータの開始行としています。 フィルタの終了列が43列目のようなので、フィルタ用の列を44行目としています。 Sub SetFilterValue() Const zFilterCol As Long = 44 'フィルタ用列 Const zFirstRow As Long = 4 'データの先頭行 Const zExclusion As String = "1" '除外対象 Const zNotExclusion As String = "0" '除外対象ではない Dim xLastRow As Long 'データの最終行 xLastRow = Cells(Rows.Count, 4).End(xlUp).Row ReDim xBs(0) As String '除外対象となるB列の値 Dim xRow As Long For xRow = zFirstRow To xLastRow If Cells(xRow, 4).Text Like "*ABCD*" Then 'D列の条件 ReDim Preserve xBs(UBound(xBs) + 1) xBs(UBound(xBs)) = Cells(xRow, 2).Text '除外対象となるB列の値をためる End If Next For xRow = zFirstRow To xLastRow If UBound(Filter(xBs, Cells(xRow, 2).Text)) <> -1 Then 'B列の値のいずれかと一致する Cells(xRow, zFilterCol) = zExclusion '除外対象にする Else Cells(xRow, zFilterCol) = zNotExclusion '除外対象にしない End If Next Range(Cells(zFirstRow - 1, 1), Cells(xLastRow, zFilterCol)).AutoFilter zFilterCol, zNotExclusion '除外対象にしないものでフィルタ End Sub
- masnoske
- ベストアンサー率35% (67/190)
フィルタを掛けたいようですが,文章から何をしたいのかが読み取れません. とりあえずマクロの記録をして結果を提示して下さい. 初心者はマクロの記録をどんどん使うべきです. コードの書き方やメソッド,プロパティ,オプションの勉強になります.
- imogasi
- ベストアンサー率27% (4737/17069)
スル―すればよいことなのだろうが、気になって。 質問の意味・趣旨がよく採れない。 B,D列の模擬実例データを10行分程度挙げて、プログラムでどうなるかを離れて、人間が判断するとして、こういう場合だから結果をこういうデータ(状態)にしたい、という書き方をして、質問してはどうか。 初心者がプログラムを例示するより、それは回答者に任せて、質問者は、質問内容の説明に 力を注ぐべきと思う。 自作コードの添削をしてほしいということかもしれないが、やり方だって他に良い方法がある場合も無きにしも非ず。