Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9421 / 13646 ツリー ←次へ | 前へ→

【27110】列に入力されている文字列をみて、その文字列が入っている行を非表示にする... KK 05/7/29(金) 9:31 質問[未読]
【27111】Re:列に入力されている文字列をみて、その... Jaka 05/7/29(金) 9:56 発言[未読]
【27116】Re:列に入力されている文字列をみて、その... KK 05/7/29(金) 10:35 お礼[未読]
【27121】Re:列に入力されている文字列をみて、その... Jaka 05/7/29(金) 11:06 回答[未読]
【27113】Re:列に入力されている文字列をみて、その... ちくたく 05/7/29(金) 9:57 回答[未読]
【27118】Re:列に入力されている文字列をみて、その... KK 05/7/29(金) 10:43 質問[未読]
【27119】Re:列に入力されている文字列をみて、その... ちくたく 05/7/29(金) 10:58 回答[未読]
【27132】Re:列に入力されている文字列をみて、その... KK 05/7/29(金) 14:27 質問[未読]
【27133】Rows("A:IV")でも動作 ちくたく 05/7/29(金) 14:39 発言[未読]
【27136】Re:Rows("A:IV")でも動作 KK 05/7/29(金) 16:11 お礼[未読]
【27120】Re:列に入力されている文字列をみて、その... ちくたく 05/7/29(金) 11:00 発言[未読]
【27125】Re:列に入力されている文字列をみて、その... KK 05/7/29(金) 13:15 質問[未読]
【27126】Re:列に入力されている文字列をみて、その... ちくたく 05/7/29(金) 13:22 回答[未読]
【27127】Re:列に入力されている文字列をみて、その... KK 05/7/29(金) 13:42 お礼[未読]
【27247】Re:列に入力されている文字列をみて、その... KK 05/8/3(水) 14:24 質問[未読]
【27277】ありがとうございました。 KK 05/8/4(木) 9:36 お礼[未読]
【27432】Re:列に入力されている文字列をみて、その... KK 05/8/9(火) 11:18 質問[未読]
【27437】Re:列に入力されている文字列をみて、その... りん 05/8/9(火) 11:55 回答[未読]
【27438】Re:列に入力されている文字列をみて、その... りん 05/8/9(火) 12:29 発言[未読]
【27439】Re:列に入力されている文字列をみて、その... KK 05/8/9(火) 13:11 質問[未読]
【27444】Re:列に入力されている文字列をみて、その... りん 05/8/9(火) 15:30 回答[未読]
【27450】Re:列に入力されている文字列をみて、その... KK 05/8/9(火) 18:38 質問[未読]
【27454】Re:列に入力されている文字列をみて、その... りん 05/8/9(火) 19:04 回答[未読]
【27456】Re:列に入力されている文字列をみて、その... KK 05/8/9(火) 19:43 質問[未読]
【27458】Re:列に入力されている文字列をみて、その... りん 05/8/9(火) 19:55 回答[未読]
【27461】ありがとうございました。 KK 05/8/9(火) 20:32 お礼[未読]

【27110】列に入力されている文字列をみて、その文...
質問  KK  - 05/7/29(金) 9:31 -

引用なし
パスワード
     A   B     C    D     E      F     G     H      I
1 No. 名前   性別 男結果1 男結果2 男結果3 女結果1 女結果2 女結果3
2 1  ○○一郎 男
3 2  ○○二郎 男
4 3  ○○三郎 男
5 4  ○○花子 女
6 5  ○○花代 女
7 6  ○○四郎 男
8 7  ○○光   
9 8  ○○五郎 男
10 9  ○○花江 女

[ALL] [男] [女]

以上のようなアンケート調査のリストがあり、
下には[共通][男][女]のボタンが配置されています。

性別が“不明”な場合は、空欄にしてあります。

<操作>
[男]ボタンを押したとき
  A   B     C    D     E      F
1 No. 名前   性別 男結果1 男結果2 男結果3
2 1  ○○一郎 男
3 2  ○○二郎 男
4 3  ○○三郎 男
7 6  ○○四郎 男
8 7  ○○光   
9 8  ○○五郎 男


[女]ボタンを押したとき
  A   B     C    G     H      I
1 No. 名前   性別 女結果1 女結果2 女結果3
5 4  ○○花子 女
6 5  ○○花代 女
8 7  ○○光   
10 9  ○○花江 女


[ALL]ボタンを押したとき
すべて表示

※性別=""のときは、常に表示されるようにしたいです。

以上を満たすVBAをご教授いただけませんでしょうか。

【27111】Re:列に入力されている文字列をみて、そ...
発言  Jaka  - 05/7/29(金) 9:56 -

引用なし
パスワード
   こんにちは。
オートフィルタで出来ます。

オートフィルタ性別の抽出条件を、オプションを選び、
男と等しい
OR で、
左欄は何も選ばないで、右欄で等しいを選べば、男&空白で抽出できます。

その後表示したくない列を非表示にでもすれば....。
これは、グループとアウトラインの設定で手動で行ってもいいだろうし....。

【27113】Re:列に入力されている文字列をみて、そ...
回答  ちくたく  - 05/7/29(金) 9:57 -

引用なし
パスワード
   こんにちは。
上手じゃないですけど。
上が、女性なら非表示にするコード。男性も同じやり方です。
下が全てを表示するコードです。ループにしなきゃいけなくないかもしれませんが。
ループをA列で数えてるので、
ナンバリングは確実にやられてないとですが。

Sub myTest()

  Dim myGen As String
  Dim myRow As Integer
  Dim rowEnd As Integer
  Dim targetGen As String
  
  rowEnd = CInt(ActiveSheet.Range("A65536").End(xlUp).Row)
  '女性か男性かを指定
  targetGen = "女性"
  
  For myRow = 1 To rowEnd
    myGen = Range("C" & myRow).Value
    If myGen = targetGen Then
      Rows(myRow).Hidden = True
    End If
  Next myRow

End Sub

Sub AllHiddenFalse()

  Dim myRow As Integer
  Dim rowEnd As Integer
  
  rowEnd = CInt(ActiveSheet.Range("A65536").End(xlUp).Row)
  For myRow = 1 To rowEnd
    Rows(myRow).Hidden = False
  Next myRow

End Sub


▼KK さん:
>   A   B     C    D     E      F     G     H      I
> 1 No. 名前   性別 男結果1 男結果2 男結果3 女結果1 女結果2 女結果3
> 2 1  ○○一郎 男
> 3 2  ○○二郎 男
> 4 3  ○○三郎 男
> 5 4  ○○花子 女
> 6 5  ○○花代 女
> 7 6  ○○四郎 男
> 8 7  ○○光   
> 9 8  ○○五郎 男
>10 9  ○○花江 女
>
>[ALL] [男] [女]
>
>以上のようなアンケート調査のリストがあり、
>下には[共通][男][女]のボタンが配置されています。
>
>性別が“不明”な場合は、空欄にしてあります。
>
><操作>
>[男]ボタンを押したとき
>   A   B     C    D     E      F
> 1 No. 名前   性別 男結果1 男結果2 男結果3
> 2 1  ○○一郎 男
> 3 2  ○○二郎 男
> 4 3  ○○三郎 男
> 7 6  ○○四郎 男
> 8 7  ○○光   
> 9 8  ○○五郎 男
>
>
>[女]ボタンを押したとき
>   A   B     C    G     H      I
> 1 No. 名前   性別 女結果1 女結果2 女結果3
> 5 4  ○○花子 女
> 6 5  ○○花代 女
> 8 7  ○○光   
>10 9  ○○花江 女
>
>
>[ALL]ボタンを押したとき
>すべて表示
>
>※性別=""のときは、常に表示されるようにしたいです。
>
>以上を満たすVBAをご教授いただけませんでしょうか。

【27116】Re:列に入力されている文字列をみて、そ...
お礼  KK  - 05/7/29(金) 10:35 -

引用なし
パスワード
   Jakaさん早速の回答ありがとうございました。

オートフィルターでも出来るようですが、
C列は非表示にしておく必要がありまして、オートフィルタ機能は使えないのです。
また、是非VBAで作ってみたいなと思いまして。。。
ただ、恥ずかしながらオートフィルタで条件を付与できることを始めて知りました・・・
勉強になりました。
ありがとうございました。

【27118】Re:列に入力されている文字列をみて、そ...
質問  KK  - 05/7/29(金) 10:43 -

引用なし
パスワード
   ちくたくさん、早速の回答ありがとうございました。

早速試してみました。
2点うまく機能していなかったのですが、、、
1点目は、[男性]ボタンを押したときにG〜I列が非表示になる、[女性]ボタンを押したときにD〜F列が非表示になる
という条件が機能していませんでした。
もう1点は、[男性]ボタンを押した後に[女性]ボタンを押したとき、(その逆も同様)うまく作動していません。

これら2点を対策したコードをご教授いただけませんでしょうか。

【27119】Re:列に入力されている文字列をみて、そ...
回答  ちくたく  - 05/7/29(金) 10:58 -

引用なし
パスワード
   ごめんなさい、質問をまじめにみてませんでした。
あまり、頭を使わない方法なら、こんな感じですかね。

Sub myTest()

  Dim myGen As String
  Dim myRow As Integer
  Dim rowEnd As Integer
  Dim targetGen As String
  
  rowEnd = CInt(ActiveSheet.Range("A65536").End(xlUp).Row)
  '女性か男性かを指定
  targetGen = "女性"

  Rows("A:IV").Hidden = False
  Columns("1:65536").Hidden = False
  
  For myRow = 1 To rowEnd
    myGen = Range("C" & myRow).Value
    If myGen = targetGen Then
      Rows(myRow).Hidden = True
      Columns("D:F").Hidden = True
    End If
  Next myRow

End Sub


▼KK さん:
>ちくたくさん、早速の回答ありがとうございました。
>
>早速試してみました。
>2点うまく機能していなかったのですが、、、
>1点目は、[男性]ボタンを押したときにG〜I列が非表示になる、[女性]ボタンを押したときにD〜F列が非表示になる
>という条件が機能していませんでした。
>もう1点は、[男性]ボタンを押した後に[女性]ボタンを押したとき、(その逆も同様)うまく作動していません。
>
>これら2点を対策したコードをご教授いただけませんでしょうか。

【27120】Re:列に入力されている文字列をみて、そ...
発言  ちくたく  - 05/7/29(金) 11:00 -

引用なし
パスワード
   それと、Jakaさんへの返信で見たのですが、C列を非表示にされたいのでしたら、
それもHidden = Trueで組み込んでください。

▼KK さん:
>ちくたくさん、早速の回答ありがとうございました。
>
>早速試してみました。
>2点うまく機能していなかったのですが、、、
>1点目は、[男性]ボタンを押したときにG〜I列が非表示になる、[女性]ボタンを押したときにD〜F列が非表示になる
>という条件が機能していませんでした。
>もう1点は、[男性]ボタンを押した後に[女性]ボタンを押したとき、(その逆も同様)うまく作動していません。
>
>これら2点を対策したコードをご教授いただけませんでしょうか。

【27121】Re:列に入力されている文字列をみて、そ...
回答  Jaka  - 05/7/29(金) 11:06 -

引用なし
パスワード
   >C列は非表示にしておく必要がありまして、オートフィルタ機能は使えないのです。
>また、是非VBAで作ってみたいなと思いまして。。。
全体的なものをマクロ記録して、後は手直しすれば行けそうですが。
C列は、マクロでオートフィルタする直前に表示し、フィルタ後非表示すれば良いです。

簡単に書くとこんな手順になります。
抽出条件は、マクロ記録した物と組替えてください。

Application.ScreenUpdating = False '画面更新中止
Columns(3).Hidden = False      'C列表示
ED = Range("C65536").End(xlUp).Row 'C列最終行取得
Range("C1:C" & ED).AutoFilter Field:=1, Criteria1:="男"
Columns(3).Hidden = True      'C列非表示
Application.ScreenUpdating = True  '画面更新中止解除

【27125】Re:列に入力されている文字列をみて、そ...
質問  KK  - 05/7/29(金) 13:15 -

引用なし
パスワード
   ちくたくさん、回答ありがとうございました。

>それもHidden = Trueで組み込んでください。

C列を非表示のコードを以下の箇所に追記したのですが、納得いく動きになりません・・・
===============================
  Next myRow
  
  Columns("C").Hidden = True

End Sub
===============================
例えば、C列非表示状態で[男性]ボタンを押したときの動きを見ると、C列が表示されて、男性だけの表示になって、その後、C列が閉じる。
もっと見栄えよく、常にC列が非表示になるコードの書き方をご教授いただけますでしょうか。

何度もすみませんが、よろしくお願いします。

【27126】Re:列に入力されている文字列をみて、そ...
回答  ちくたく  - 05/7/29(金) 13:22 -

引用なし
パスワード
   こんにちは。
描画をストップさせましょう。
変数の宣言の後くらいに、
Application.ScreenUpdating = False
をいれてください。

で、最後のEnd Subの前くらいに、
Application.ScreenUpdating = True
をいれてください。

▼KK さん:
>ちくたくさん、回答ありがとうございました。
>
>>それもHidden = Trueで組み込んでください。
>
>C列を非表示のコードを以下の箇所に追記したのですが、納得いく動きになりません・・・
>===============================
>  Next myRow
>  
>  Columns("C").Hidden = True
>
>End Sub
>===============================
>例えば、C列非表示状態で[男性]ボタンを押したときの動きを見ると、C列が表示されて、男性だけの表示になって、その後、C列が閉じる。
>もっと見栄えよく、常にC列が非表示になるコードの書き方をご教授いただけますでしょうか。
>
>何度もすみませんが、よろしくお願いします。

【27127】Re:列に入力されている文字列をみて、そ...
お礼  KK  - 05/7/29(金) 13:42 -

引用なし
パスワード
   ちくたくさん、早速の回答ありがとうございました。

思い通りの動作になりました。
無事解決です。
大変勉強になりました。

【27132】Re:列に入力されている文字列をみて、そ...
質問  KK  - 05/7/29(金) 14:27 -

引用なし
パスワード
   無事解決したのですが、コード内で不明な箇所がありましたので質問させていただきます。
以下の箇所ですが、
=====================================
  Rows("A:IV").Hidden = False
  Columns("1:65536").Hidden = False
=====================================

これは、列と行が逆だと思うんですが、動作は正しく動いています。
ちなみに下記のように書き換えても、同様の結果となります。
=====================================
  Columns("A:IV").Hidden = False
  Rows("1:65536").Hidden = False
=====================================

どちらが正しいのでしょうか。
ご回答いただけますでしょうか?

【27133】Rows("A:IV")でも動作
発言  ちくたく  - 05/7/29(金) 14:39 -

引用なし
パスワード
   凡ミス失礼しました。
私はこういうのは詳しくないのでわからないのですが。
正しいのはColumns("A:IV")です。
こういうのがわからないのがありますね。
誰か、教えてくれると思いますよ。

▼KK さん:
>無事解決したのですが、コード内で不明な箇所がありましたので質問させていただきます。
>以下の箇所ですが、
>=====================================
>  Rows("A:IV").Hidden = False
>  Columns("1:65536").Hidden = False
>=====================================
>
>これは、列と行が逆だと思うんですが、動作は正しく動いています。
>ちなみに下記のように書き換えても、同様の結果となります。
>=====================================
>  Columns("A:IV").Hidden = False
>  Rows("1:65536").Hidden = False
>=====================================
>
>どちらが正しいのでしょうか。
>ご回答いただけますでしょうか?

【27136】Re:Rows("A:IV")でも動作
お礼  KK  - 05/7/29(金) 16:11 -

引用なし
パスワード
   ちくたくさん、回答ありがとうございます。

>正しいのはColumns("A:IV")です。
とのことで、解決です。

とりあえず、他の方のレスも待ってみますが、自分でも調べてみます。
ありがとうございました。

【27247】Re:列に入力されている文字列をみて、そ...
質問  KK  - 05/8/3(水) 14:24 -

引用なし
パスワード
   以前、質問させていただきまして、以下のコードを教えていただいたのですが、
更に条件を追加したく、再度質問させていただきました。
=========================================================
Sub myTest()

  Dim myGen As String
  Dim myRow As Integer
  Dim rowEnd As Integer
  Dim targetGen As String
  
  rowEnd = CInt(ActiveSheet.Range("A65536").End(xlUp).Row)
  '女性か男性かを指定
  targetGen = "女性"

  Rows("A:IV").Hidden = False
  Columns("1:65536").Hidden = False
  
  For myRow = 1 To rowEnd
    myGen = Range("C" & myRow).Value
    If myGen = targetGen Then
      Rows(myRow).Hidden = True
      Columns("D:F").Hidden = True
    End If
  Next myRow

End Sub
=========================================================

C列がすべて"不明"な場合の条件を追加したいです。
 [男性]ボタンを押したときにG〜I列が非表示になる、行は表示のまま
 [女性]ボタンを押したときにD〜F列が非表示になる、行は表示のまま

よろしくお願いします。

【27277】ありがとうございました。
お礼  KK  - 05/8/4(木) 9:36 -

引用なし
パスワード
   解決できました。
ありがとうございました。

【27432】Re:列に入力されている文字列をみて、そ...
質問  KK  - 05/8/9(火) 11:18 -

引用なし
パスワード
   今までご教授いただいた回答をまとめ、下記コードで実際に使っているのですが、もう一点質問があります。
=========================================================
Sub myTest()

  Dim myGen As String
  Dim myRow As Integer
  Dim rowEnd As Integer
  Dim targetGen As String
  
  rowEnd = CInt(ActiveSheet.Range("A65536").End(xlUp).Row)
  '女性か男性かを指定
  targetGen = "女性"

  Rows("A:IV").Hidden = False
  Columns("1:65536").Hidden = False
  
  For myRow = 1 To rowEnd
    myGen = Range("C" & myRow).Value
    If myGen = targetGen Then
      Rows(myRow).Hidden = True
      Columns("D:F").Hidden = True
    Else
      Columns("D:F").Hidden = True
    End If
  Next myRow

End Sub
=========================================================

19行目と21行目は、実際に非表示にしたい箇所を入力していますが、
これを"男性"という文字列がある列を非表示にするという方法に変更したいのですが
そのコードをご教授いただけますでしょうか?

ちなみに、"男性"と記入する欄を1行目に追加しました。

【27437】Re:列に入力されている文字列をみて、そ...
回答  りん E-MAIL  - 05/8/9(火) 11:55 -

引用なし
パスワード
   KK さん、こんにちわ。

>これを"男性"という文字列がある列を非表示にするという方法に変更したいのですが
>そのコードをご教授いただけますでしょうか?
>ちなみに、"男性"と記入する欄を1行目に追加しました。

Sub test()
  '1行目で男性を検索し、見つけたら列非表示
  Dim r1 As Range, r1Pos As String
  With ActiveSheet.Rows(1)
    Set r1 = .Find(what:="男性", LookAt:=xlWhole)
    If Not r1 Is Nothing Then
      r1Pos = r1.Address
      Do
        '非表示
        r1.EntireColumn.Hidden = True
        '次
        Set r1 = .FindNext(r1)
      Loop While Not r1 Is Nothing And r1.Address <> r1Pos
    End If
  End With
End Sub

こんな感じです。
Findメソッドの使用例を参考に作りました。

【27438】Re:列に入力されている文字列をみて、そ...
発言  りん E-MAIL  - 05/8/9(火) 12:29 -

引用なし
パスワード
   KK さん、こんにちわ。

>>これを"男性"という文字列がある列を非表示にするという方法に変更したいのですが
>>そのコードをご教授いただけますでしょうか?
>Sub test()
>  '1行目で男性を検索し、見つけたら列非表示
>  Dim r1 As Range, r1Pos As String
>  With ActiveSheet.Rows(1)
>    Set r1 = .Find(what:="男性", LookAt:=xlWhole)
>    If Not r1 Is Nothing Then
>      r1Pos = r1.Address
>      Do
>        '非表示
>        r1.EntireColumn.Hidden = True
>        '次
>        Set r1 = .FindNext(r1)
>      Loop While Not r1 Is Nothing And r1.Address <> r1Pos
>    End If
>  End With
>End Sub

http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=27198;id=excel
ここの質問とほぼ同じ内容で、ほぼ同じ回答がついてましたね。

【27439】Re:列に入力されている文字列をみて、そ...
質問  KK  - 05/8/9(火) 13:11 -

引用なし
パスワード
   りんさん、早速の回答ありがとうございます。

組み合わせると、以下のようになったのですが、修正すべき箇所、改善すべき箇所がございましたら、
アドバイスお願いします。
=========================================================
Sub men()

  Dim myGen As String
  Dim myRow As Integer
  Dim rowEnd As Integer
  Dim targetGen As String

  Dim fCell As Range
  Dim fstAdr As String
  
  rowEnd = CInt(ActiveSheet.Range("A65536").End(xlUp).Row)
  '女性か男性かを指定
  targetGen = "女性"

  Rows("A:IV").Hidden = False
  Columns("1:65536").Hidden = False
 
  For myRow = 1 To rowEnd
    myGen = Range("C" & myRow).Value
    If myGen = targetGen Then
      Rows(myRow).Hidden = True
    End If
  Next myRow
  
  Set fCell = Rows(1).Find(what:="女性")
  If Not fCell Is Nothing Then
    fstAdr = fCell.Address
  Do
    fCell.MergeArea.EntireColumn.Hidden = True
    Set fCell = Rows(1).Find(after:=fCell)
  Loop Until fCell.Address = fstAdr
  End If

End Sub
=========================================================

【27444】Re:列に入力されている文字列をみて、そ...
回答  りん E-MAIL  - 05/8/9(火) 15:30 -

引用なし
パスワード
   KK さん、こんにちわ。

>組み合わせると、以下のようになったのですが、修正すべき箇所、改善すべき箇所がございましたら、
>アドバイスお願いします。

MergeAreaを使っているところをみると、結合セルがあるみたいですね。
どんな風に結合しているかわからないので、ちょっと検索方法を変えました。
同じモノをさがしているようなので、統合してあります。

Sub men()
  Dim targetGen As String
  Dim fCell As Range, ICell As Range
  Dim fstAdr As String
  '女性か男性かを指定
  targetGen = "男性" 'menなのに女性?
  '
  If targetGen <> "" Then '念のため
   With ActiveSheet
     .Rows.Hidden = False '全体表示
     .Columns.Hidden = False'全体表示
     '使用範囲が対象です
     With .UsedRange
      Set fCell = .Find(what:=targetGen, LookAt:=xlWhole)
      If Not fCell Is Nothing Then
        fstAdr = fCell.Address
        Do
         Set ICell = Application.Intersect(fCell, .Parent.Columns(3))
         If Not ICell Is Nothing Then
           'C列がらみだったら行非表示
           fCell.MergeArea.EntireRow.Hidden = True
         Else
           Set ICell = Application.Intersect(fCell, .Parent.Rows(1))
           If Not ICell Is Nothing Then
            '1行目がらみだったら列非表示
            fCell.MergeArea.EntireColumn.Hidden = True
           End If
         End If
         '次検索
         Set fCell = .FindNext(fCell)
        Loop While Not fCell Is Nothing And fCell.Address <> fstAdr
      End If
     End With
   End With
  End If
End Sub

Parent(親オブジェクト参照)をつけたのは、UsedRange.Columns(3)がかならずしもC列になるとは限らないからです。

【27450】Re:列に入力されている文字列をみて、そ...
質問  KK  - 05/8/9(火) 18:38 -

引用なし
パスワード
   りんさん、回答ありがとうございます。

>'女性か男性かを指定
>targetGen = "男性" 'menなのに女性?

[男性]ボタンにSub men() 〜 End Subを登録し、[男性]ボタンをクリックしたときに、[女性]列と行が非表示、[男性]列と行が表示されるようにしているので、
Sub men()
(処理)
End Sub
の中で
targetGen = "女性"
と指定していたのです。

いずれにせよ、解決いたしました。
ありがとうございました。

最後の1文
>Parent(親オブジェクト参照)をつけたのは、UsedRange.Columns(3)がかならずしもC列になるとは限らないからです。
必ずしもC列にならないときというのはどういう時を指すのでしょうか?

【27454】Re:列に入力されている文字列をみて、そ...
回答  りん E-MAIL  - 05/8/9(火) 19:04 -

引用なし
パスワード
   KK さん、こんばんわ。

>[男性]ボタンにSub men() 〜 End Subを登録し、[男性]ボタンをクリックしたときに、[女性]列と行が非表示、[男性]列と行が表示されるようにしているので、
>Sub men()
>(処理)
>End Sub
>の中で
>targetGen = "女性"
>と指定していたのです。
targetGen以外は同じ内容みたいなので、Subの引数を使ってメイン動作をSub内で分岐すれば、実行部分は一つにまとめられそうですね。
こんな風に。
Sub Men()
  RC_HIDE "女性" '男性を表示
End Sub
Sub Women()
  RC_HIDE "男性" '女性を表示
End Sub
Sub AllSHOW()
  RC_HIDE " " 'どちらも表示(半角スペースが入っていたらそこが消えますが)
End Sub
Sub RC_HIDE(targetGen as String)
  Dim fCell As Range, ICell As Range
  Dim fstAdr As String
  '
  If targetGen <> "" Then '念のため
<<<<<<以下省略>>>>>>
End Sub

>最後の1文
>>Parent(親オブジェクト参照)をつけたのは、UsedRange.Columns(3)がかならずしもC列になるとは限らないからです。
>必ずしもC列にならないときというのはどういう時を指すのでしょうか?

セル範囲の左上のセルに対して1列・・・とカウントされていくので、UsedRangeにA列を含まない可能性があるから、C列とは限らないのです。

Sub test()
  '作業用シートは新しいブックで
  Set ws = Application.Workbooks.Add.Worksheets(1)
  With ws
   .Range("B2:B3").Value = "■" '適当
   With .UsedRange
     MsgBox "UsedRange.Columns(3):" & .Columns(3).Address(False, False), _
        vbInformation, _
        "UsedRange:" & .Address(False, False)
   End With
   '作業用シート開放
   With .Parent
     .Saved = True
     .Close False
   End With
  End With
  Set ws = Nothing
End Sub

これを実行してみてください。

【27456】Re:列に入力されている文字列をみて、そ...
質問  KK  - 05/8/9(火) 19:43 -

引用なし
パスワード
   りんさん、こんばんわ。
回答ありがとうございます。

Subの引数を使ってまとめることができるのですね。
勉強になりました。

ただ、
>Sub AllSHOW()
>  RC_HIDE " " 'どちらも表示(半角スペースが入っていたらそこが消えますが)
>End Sub

これに関してなのですが、仮に半角スペースが入ってしまったときを考慮して、
確実に男性、女性が表示されるようにしたいです。

ちなみに、私は以下のように作っていますが、もっと簡潔にできますでしょうか?
=========================================================
Sub AllHiddenFalse() '男性、女性を表示する

  Dim myRow As Integer
  Dim rowEnd As Integer
  Dim myCol As Integer
  Dim colEnd As Integer
     
  rowEnd = CInt(ActiveSheet.Range("A65536").End(xlUp).Row)
  For myRow = 1 To rowEnd
    Rows(myRow).Hidden = False
  Next myRow
  
  colEnd = CInt(ActiveSheet.Range("IV65536").End(xlUp).Column)
  For myCol = 1 To colEnd
    Columns(myCol).Hidden = False
  Next myCol

End Sub
=========================================================


>セル範囲の左上のセルに対して1列・・・とカウントされていくので、UsedRangeにA列を含まない可能性があるから、C列とは限らないのです。
実際に試してみました。
なるほどです。
理解しました。。

【27458】Re:列に入力されている文字列をみて、そ...
回答  りん E-MAIL  - 05/8/9(火) 19:55 -

引用なし
パスワード
   KK さん、こんばんわ。

>ただ、
>>Sub AllSHOW()
>>  RC_HIDE " " 'どちらも表示(半角スペースが入っていたらそこが消えますが)
>>End Sub
>
>これに関してなのですが、仮に半角スペースが入ってしまったときを考慮して、
>確実に男性、女性が表示されるようにしたいです。
>
>ちなみに、私は以下のように作っていますが、もっと簡潔にできますでしょうか?
シート上のセル(行/列)を全部表示すればいいんですよね。
>=========================================================
>Sub AllHiddenFalse() '男性、女性を表示する
  ActiveSheet.Rows.Hidden = False
  ActiveSheet.Columns.Hidden = False
>End Sub
>=========================================================

【27461】ありがとうございました。
お礼  KK  - 05/8/9(火) 20:32 -

引用なし
パスワード
   りんさん、ありがとうございます。

そうですよね・・・
>Sub AllHiddenFalse() '男性、女性を表示する
  ActiveSheet.Rows.Hidden = False
  ActiveSheet.Columns.Hidden = False
>End Sub
これでいいんですよね(>_<)

無事解決です。
本当にありがとうございました!!

9421 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free