A B C D E F ・・・
1 担当名 支店名 1日 2日 3日 4日
2 木村 品川 ○ × × ×
3 佐藤 豊島 ○ ○ ○ ○
4 佐藤 足立 × ○ ○ ○
5 山本 目黒 × ○ ○ ○
6 木村 中央 ○ × × ×
7 山本 新宿 ○ × × ×
上記の表で、A列の名前が【木村】となっている行を非表示にするには、
Dim myLastRow As Long
Dim i As Long
myLastRow = Range("A2").End(xlDown).Row
For i = 1 To myLastRow
If Cells(i, 1) = ”木村” Then Rows(i).Hidden = True
Next i
End Sub
上記のコードでどうにか出来たのですが、逆に【木村】以外を非表示にするには、
どのようにしたら良いのでしょうか?
また、再表示したい場合は、どのようにしたら良いのか分かりません。
VBAを熟知していらっしゃる方、教えていただけないでしょうか?
よろしくお願いします。
こんな感じでいかがでしょうか。
変更前)
If Cells(i, 1) = ”木村” Then Rows(i).Hidden = True
変更後)
If Cells(i, 1) <> ”木村” Then Rows(i).Hidden = True
木村以外ならば
If Cells(i, 1) <> ”木村” Then Rows(i).Hidden = True
とすればいいでしょう。
ただし
For i = 1 To myLastRow
となっていますので 見出しの行も非表示になってしまいます。
それを防ぐなら
For i = 2 To myLastRow
としたらいいですね。
再表示は Rows(i).Hidden = False
回答ありがとうございます。
明日、会社で試してみます。
今回目的はほぼオートフィルタの機能かと思いますが、下記のようにしてできるかと思います。
>|vb|
// フィルタ:木村 以外を非表示
Sub MyFilter()
'// 画面の更新を無効
Application.ScreenUpdating = False
Dim myLastRow As Long
Dim i As Long
myLastRow = Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To myLastRow '// 開始を2行からにし、タイトル行を対象から除外
If Cells(i, "A") <> "木村" Then Rows(i).Hidden = True
Next i
'// 画面の更新を有効
Application.ScreenUpdating = True
End Sub
||<
>|vb|
'// すべての行を表示
Sub MyFilterOffShowAllRow()
Rows("1:" & Rows.Count).Hidden = False
End Sub
||<
一致しない条件は <> を使用します。
また、データが少ない場合はあまり気にならないかもしれませんが、処理量が多い場合画面がちらちらすると思います。
そのような場合、画面更新(ScreenUpdating)を制御することでちらつきをなくせますし、処理速度も速くなります。
また、直接制御でもできますが、オートフィルタ機能をマクロからも使用できます。
その場合、下記のようなサンプルになりますが、これはいろいろと紹介しているHPがありますので、そちらを参考に
されるとよいかと思います。
http://excelvba.pc-users.net/fol7/7_5.html
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_autofilter.ht...
>|vb|
'// オートフィルタを使用したマクロ
Sub AutoFilterOn()
AutoFilterOff
Worksheets("Sheet1").Range("A1").AutoFilter Field:=1, Criteria1:="<>木村"
End Sub
||<
>|vb|
'// オートフィルタを無効に戻す
Sub AutoFilterOff()
If Worksheets("Sheet1").AutoFilterMode = True Then
Worksheets("Sheet1").AutoFilterMode = False
End If
End Sub
||<
回答ありがとうございます。
明日、会社で試してみます。
回答ありがとうございます。
今日は休みでしたので、明日会社でやってみます。
ありがとうございました。