Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2016)
【D列の値がWINの場合のみ、11行目以降から行表示】をさせたい
投稿日時: 19/04/13 10:46:18
投稿者: kamomegane

よろしくお願いします。
  
【D列の値がWINの場合のみ、11行目以降から行表示】をさせたいと考えています。
どのようなコードを組めばいいか教えていただけますか。
  
以下コードを考えましたが、うまくいきませんでした。
  
Sub  WIN行のみ表示()
 With ActiveWorkbook.ActiveSheet
  Const startrow As String = "11"
  Const col As String = "D"
   Dim idx As Long
   Dim keyWord
   keyWord = "SOD"
  If TypeName(keyWord) <> "Boolean" And Len(keyWord) > 0 Then
  
 For idx = .Cells(65536, col).End(xlUp).Row To startrow Step -1
  If InStr(.Cells(idx, col).Value, keyWord) = 0 Then
  .Rows(idx).Hidden = True
  End If
  Next
 End If
 End With
End Sub
  
  
---------------------------
さらに、条件を足したい場合についてもお伺いしたいです。
上記質問内容の【D列の値がWINの場合、11行以降の行非表示】に、
【E列以降に数値(0を含む)が入っている行のみ表示】を条件に追加した場合。
  
つまり、勝った事のある人だけ表示(WIN行に数値が入ってる人)をできるようにしたいです。
  
自動記録、フィルター機能、条件選択をしてジャンプ、をやってみましたが
やりたい結果には結びつきませんでした。
  
  
  
----------------------------
実際に使用する表は以下のようなものです。
  
会員別に、試合結果(WIN、LOST、DRAW)と、点数(0〜100)を、月ごとに記録しています。
試合は毎月だったり全くバラバラだったり、規則性はありません。
試合をしない月は空欄、試合をして0点の場合は0と入力。
  
会員一人につき4行ずつ使っています。
200名ほどいて今後増える予定です。
  
  
上手く説明できていない点があるかと思いますが、
どうぞよろしくお願いします。
  
  
----------------------------

 
    A     B     C     D   E    F   G   H   I 
10  会員a@  名前  資格  結果  1月  2月  3月  4月  
11    11    あああ     金    WIN     1         
12    11    あああ     金    LOST                 
13    11    あああ     金    DRAW               0          
14    11    あああ     金    予備                 
15    22    いいい     銀    WIN         1             
16    22    いいい     銀    LOST   2             
17    22    いいい     銀    DRAW                 
18    22    いいい     銀    予備                 
19    33    ううう     金    WIN                 
20    33    ううう     金    LOST                 
21    33    ううう     金    DRAW             3     
22    33    ううう     金    予備                 
 
 

 

回答
投稿日時: 19/04/13 12:08:17
投稿者: simple

こんにちは。
現在のコードですが、最大の謎は、keyWord = "SOD"の意味です。これは?
Const startrow As String = "11" は Const startrow As Long = 11
のほうが良いとかその類のことはさておけば、動きそうではありますね。
  
実際の下記の設例で、実行したいことを箇条書きしてみてもらえますか?

 
    A       B        C     D      E    F   G    H    I 
10  会員  名前     資格  結果  1月  2月  3月  4月  
11  11      あああ   金    WIN     1            
12  11      あああ   金    LOST                 
13  11      あああ   金    DRAW              0  
14  11      あああ   金    予備                 
15  22      いいい   銀    WIN          1       
16  22      いいい   銀    LOST    2            
17  22      いいい   銀    DRAW                 
18  22      いいい   銀    予備                 
19  33      ううう   金    WIN                  
20  33      ううう   金    LOST                 
21  33      ううう   金    DRAW         3       
22  33      ううう   金    予備                 

1,2,3の意味(得点か回数なのか不明)も併せて解説願いたい。

投稿日時: 19/04/13 13:05:51
投稿者: kamomegane

simple様
ご回答ありがとうございます。
 
---------------------
keyWord = "SOD"     ←間違えていました。
 
keyWord = "WIN"     ←正しくはこちらです。失礼しました。
 
 
 
---------------------
それから、1,2,3の意味は得点です。
 
 
---------------------
以下、実行したいことです。
 
 
※1行目から10行目までは常に表示しておく。
 これを前提として以下のような事を実行させたいです。
 
・結果がWIN 、かつ1月以降に数値が入っている人の行のみを表示させたい
 →1〜10行目までと、11行目が表示されることになる。
 
・結果がLOST 、かつ2月以降に数値が入っている人の行のみを表示させたい
 →1〜10行目まで表示されることになる。
 
・結果がDRAW 、かつ1月以降に数値が入っている人の行のみを表示させたい
 →1〜10行目までと、13行目と21行目が表示されることになる。
 
 
 
---------------------
※のちに考えているのは、、
 1〜10行目の部分にマクロボタンなどを設置しようと思っています。
 結果内容をボタンにし、時期はセルに数値を入力できるようにし、
 該当する行のみが表示するようにしたいと思っています。
 
 ◆結果◆
 【WIN】 【LOST】 【DRAW】  ←☑かボタンなどで選択できるように。
 
 ◆時期◆
 【   】         ←セルに数値入力ができるように。2と入力すれば2月以降ということに。
 
 ◆全行表示◆       
 
 
 
よろしくお願いします。
 
 
 
 

回答
投稿日時: 19/04/13 13:35:27
投稿者: simple

>1行目から10行目までは常に表示しておく。
「ウインドウ枠の固定」機能を使います。
 
>結果がWIN 、かつ1月以降に数値が入っている人の行のみを表示させたい
人単位(4行ワンセット)ではなく、行単位のようですから、
オートフィルタで十分じゃないですか?
「1月以降に数値が入っている」はどこかに作業列を設けて、
Countif関数で判定しておけばよいでしょう。
 
>【WIN】 【LOST】 【DRAW】  ←☑かボタンなどで選択できるように。
「入力規則」の「リスト」を使って候補から選択させるのが簡便です。
 
# 私の一仕事が今終わってこれから食事に外出しますので、ここまでとさせてください。
# 頑張ってトライしてみてください。

投稿日時: 19/04/13 19:14:20
投稿者: kamomegane

simple様
ご回答ありがとうございます。
 
「ウインドウ枠の固定」
→不要な行を非表示にする際、コードの中で11行目からと指定せずに、
ウィンドウ枠の固定でもやってみようと思います。
  
 
オートフィルタ
→以前に試してみたのですが、一覧から希望の項目を選択するという、些細な手間ではあるんですが
それすらも簡単に操作したいと思っていました。
しかしCountif関数は考えていなかったことなので、試してみます。
  
 
 
様々ご提案頂いてありがとうございました。
まだまだ出来る方法があると分かりましたので、トライしてみます!
また分からないときはどうぞよろしくお願いします!
  

回答
投稿日時: 19/04/13 23:18:21
投稿者: simple

【追記しておきます】
 
0は数値が入力しているということのようでしたので、
要するに、空白でなくなんらかの数値が入っているかどうかで判定するということですね。
でしたら、
・ワークシートのダミー列には
  COUNTIFではなくCOUNTAを使って数値の入っているセルの数を計算しておきます。
・オートフィルタでは、
 ダミー列が「0」 「よりも大きい」 という判定をして絞り込めばよいと思います。
 
マクロの前にまずは一般操作でできるようにすることが先決だと思います。
これをマクロ記録すればマクロになります。

投稿日時: 19/04/14 08:16:07
投稿者: kamomegane

simple様
 
丁寧にお教えいただきましてありがとうございます。
simple様の仰る通りだと痛感致しました。
ご提案頂いたものは実際に試し、進めさせていただきます。
ありがとうございました。