[[20150525112209]] 『VBA 変数を使用して含まない』(未知の世界) ページの最後に飛ぶ

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

 

『VBA 変数を使用して含まない』(未知の世界)

部全体から除外したい課があるとき。

 例えば、部12Bから、課12B22を除外したい時。
(他の部によっては、除外したい課が3つあるときもありますので、
 変数を3つまで作っています。が、下記のコードは、まだ除外がうまくいって
 いないため、ka1の分しか書きこんでいません。)

フィルタをVBで書き込んで「含まない」を検索するときは『Criteria1:="<>*値*"』なので、

12B22を除外したいので
.AutoFilter Field:=2, Criteria1:="<>*" & ka1の箇所を
.AutoFilter Field:=2, Criteria1:="<>*ka1*"…こんな感じで変数を使用して
「含まない」にしたいのですが、できません。
&を付け加えたりいろいろしてみたのですが、うまくいきません。

『〜で終わらない"<>*" & ka1』なら一応、検索結果は出たのですが、
できれば、含まないの方がいいのですが、変数を使用してできないのでしょうか?

例…12Bの部全体から12B22を除く。の件数の結果を貼付シートにコピペする。
 
【フィルタ】シート

  |   A   |    B   |   C   
1 |   部  |   課   |   値
2 |12B	  |  12B55 |   0 
3 |223	  |  22311 |   9 
4 |12B	  |  12B22 |   1 
5 |223	  |  22333 |   8 
6 |12B	  |  12B55 |   5 
7 |12B	  |  12B55 |   4 
8 |12B	  |  12B75 |   6 
9 |12B	  |  12B34 |   4 
10|999	  |  99976 |   -3 
11|12B	  |  12B88 |   2 
12|12B	  |  12B55 |   7 

【貼付】シート

  |   A  |    B  |  
1 | 0〜5 | 6〜10 |
2 |  5   |  2    |

VBAのコード

Dim bu As Variant
Dim ka1 As Variant
Dim ka2 As Variant
Dim ka3 As Variant


Sub test()

 Dim firuta As Worksheet
 Dim sh As Worksheet

 Set firuta = Worksheets("フィルタ")
     firuta.AutoFilterMode = False
     firuta.Range("A1").AutoFilter

 Set sh = Worksheets("貼付")

 Do
 bu = Application.InputBox("部を入力して下さい" & vbCrLf & _
                           "ただし、半角入力でお願いします。", Type:=2)

    bu = StrConv(bu, vbNarrow)

 If bu = False Then Exit Sub

 If Application.CountIf(firuta.AutoFilter.Range.Columns(1), bu) > 0 Then Exit Do
    MsgBox "該当する部がありません。[" & bu & "]"

 Loop

 Do
 ka1 = Application.InputBox("除外する課を入力して下さい。" & vbCrLf & _
                            "ただし、半角入力でお願いします。", Type:=2)

    ka1 = StrConv(ka1, vbNarrow)

 If ka1 = False Then Exit Do

 If Application.CountIf(firuta.AutoFilter.Range.Columns(2), ka1) > 0 Then Exit Do
    MsgBox "該当する課がありません。[" & ka1 & "]"
 Loop

 With firuta.AutoFilter.Range
            .AutoFilter Field:=1, Criteria1:=bu
            .AutoFilter Field:=2, Criteria1:="<>*ka1*"
            .AutoFilter Field:=3, _
                        Criteria1:=">=0", _
                        Operator:=xlAnd, _
                        Criteria2:="<=5"

  sh.Range("A2").Value = WorksheetFunction.Subtotal(3, firuta.AutoFilter.Range.Columns("C")) - 1

            .AutoFilter Field:=3, _
                        Criteria1:=">=6", _
                        Operator:=xlAnd, _
                        Criteria2:="<=10"

  sh.Range("B2").Value = WorksheetFunction.Subtotal(3, firuta.AutoFilter.Range.Columns("C")) - 1

 End With

End Sub

まだまだ、VBは謎の世界で、調べながら書いたりしてるのでもしかしたら、使いどころ間違ってるなどありましたらよろしければ、お教えください。

以上、よろしくお願します。

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


こんにちは

.AutoFilter Field:=2, Criteria1:="<>*" & ka1 & "*"

ですか?

(ウッシ) 2015/05/25(月) 11:33


こんにちは、さっそくの解答ありがとうございます

できました!!

うぅ、わかる人はこんなにすぐできるのに(:_;)

助かりました。
ありがとうございます!!
(未知の世界) 2015/05/25(月) 11:43


コメント返信:

[ 一覧(最新更新順) ]


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