どなたか教えてください。


     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を熟知していらっしゃる方、教えていただけないでしょうか?
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2010/12/23 03:25:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:spyglass No.1

回答回数455ベストアンサー獲得回数29

ポイント27pt

こんな感じでいかがでしょうか。


変更前)

If Cells(i, 1) = ”木村” Then Rows(i).Hidden = True


変更後)

If Cells(i, 1) <> ”木村” Then Rows(i).Hidden = True

id:cazica

回答ありがとうございます。

今日は休みでしたので、明日会社でやってみます。

ありがとうございました。

2010/12/16 21:55:08
id:taknt No.2

回答回数13539ベストアンサー獲得回数1198

ポイント27pt

木村以外ならば

If Cells(i, 1) <> ”木村” Then Rows(i).Hidden = True

とすればいいでしょう。


ただし

For i = 1 To myLastRow

となっていますので 見出しの行も非表示になってしまいます。

それを防ぐなら

For i = 2 To myLastRow

としたらいいですね。

再表示は Rows(i).Hidden = False

id:cazica

回答ありがとうございます。

明日、会社で試してみます。

2010/12/16 21:58:27
id:Mook No.3

回答回数1314ベストアンサー獲得回数393

ポイント26pt

今回目的はほぼオートフィルタの機能かと思いますが、下記のようにしてできるかと思います。

>|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

||<

id:cazica

回答ありがとうございます。

明日、会社で試してみます。

2010/12/16 22:00:20

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません