[[20170623104020]] 『其々の特定セルの文字列が条件で其々数行の表示・』(マカロン) ページの最後に飛ぶ

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

 

削除『其々の特定セルの文字列が条件で其々数行の表示・非表示の自動マクロ』(マカロン)

B4:D8範囲に表を作成しB4に特定文字列"次表へ"を入力するとB11:D15に作成済みの表が表示される(B11からB15間セル行が表示)。"次表へ"が空白の場合はB11からB15間セル行は非表示になる。B11にも同じく"次表へ"を入力するとB18:D22に作成済の表が表示(セル行の表示)される。・・・この作業が数回繰り返しできる(表の表示が自動で。)マクロを組みたいのですが何分マクロは素人なので宜しくお願いします。

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


 該当シートのコード」モジュールへ

 Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 2 Then Exit Sub
    If (Target.Row - 4) / 7 <> Int((Target.Row - 4) / 7) Then Exit Sub
    Target.Offset(7).Resize(5).EntireRow.Hidden = Target.Value <> "次表へ"
End Sub

(seiya ) 2017/06/23(金) 1600


 わかりました。
 外出中ですので、後ほどレスします。
(seiya) 2017/06/23(金) 16:03

 まずこのコードをご自分で応用できるようにしてください。

 1) 新規のブックを立ち上げてA1セルに 数式 =(ROW()-4)/7 を入力して下方コピーする。
 2) B1 に数式 =(ROW()-4)/7=INT((ROW()-4)/7) と入力して下方コピーする。

 A4,A11,A18... という具合に 4行目から7行毎に整数になります。
 同じくB4,B11,B18...がTRUEになることを確認してください。

 3) Private Sub Worksheet_Change(ByVal Target As Range)

 Worksheet_Change イヴェントが発生すると、そのセルがTargetという変数名で渡されます。
 このイヴェントは、セルの値を変更、もしくはカーソルがフォーミュラバーから抜け出た時等に発生します。
 (数式による変更は含みません)

 この渡された変数を基に処理コードを書いていきます。

 ByVal Target As Range と宣言されているので Target.Column,Target.Row,Target.Value等のプロパティで
 変更されたセルの列・行・値 等を取得できます。

    If Target.Column <> 2 Then Exit Sub
    If (Target.Row - 4) / 7 <> Int((Target.Row - 4) / 7) Then Exit Sub

 列が2番目(B列) で無ければ、何もしないで終了。
 行が4行目から7行おきの位置になければ何もしないで終了。

    Target.Offset(7).Resize(5).EntireRow.Hidden = Target.Value <> "次表へ"

 該当セルの7行下から5行の幅の表示を切り替え。(該当セルが "次表へ"なら表示、そうでなければ非表示)

 ここまで理解できたら、その他の条件をどのように追加するかをPseudocode(疑似コード)で結構ですので
 考えてみてください。
(seiya) 2017/06/23(金) 18:05

 それでは、私が提示したコードを参考にして

 >F74:H78に表を作成しF74に"次表へ"を入力で下表の表示しF列はF137:H141まで

 これはできるでしょう?
(seiya) 2017/06/26(月) 11:52

 この際、B列のことは忘れてください。

 J列のみのコードでいいんです。
(seiya) 2017/06/26(月) 12:15

 J列ができましたね。

 1) Target(変更されたセル)が指定した列(BFJ)に存在するかを判定。
    Intersectメソッドを使用して判定しましょう。

    If Intersect(Target, Range("B:B,F:F,J:J")) Is Nothing Then Exit Sub

    指定列にTargetが存在しなければ、何もしないで終了。

 2) Targetが指定した行(4行目から7行おき)にあるか判定。

    If (Target.Row - 4) / 7 <> Int((Target.Row - 4) / 7) Then Exit Sub

    指定行にTargetが存在しなければ、何もしないで終了。

 ここからはTargetの列によって、指定範囲を」設定します。
 Select Case statementで例を挙げます。

 3) 
     Select Case Target.Column   '<- Targetの列による分岐
        Case 2  '<- 2列目(B列)
            If Target.Row > 74 Then Exit Sub '<-Tagetの行が74以上はここで終了。 以下同じ。
        Case 6
            If Target.Row < 74 Or Target.Row > 137 Then Exit Sub
        Case Else  '<- 前出の列以外(この場合J列に相当)
            If Target.Row < 137 Or Target.Row > 141 Then Exit Sub
    End Select

 4) 3)のSelect Case を抜ければ、条件を満たしたセルが変更せれたということですので、
   ここで表示・非表示の作業をします。

   Target.Offset(5).Resize(7).EntireRow.Hidden = Target.Value <> "次表へ"

 Select Caseでの行設定に誤りが合うかもしれませんので、確認して必要があれば変更してください。

 Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("b:b,f:f,j:j")) Is Nothing Then Exit Sub
    If (Target.Row - 4) / 7 <> Int((Target.Row - 4) / 7) Then Exit Sub
    Select Case Target.Column
        Case 2
            If Target.Row > 74 Then Exit Sub
        Case 6
            If Target.Row < 74 Or Target.Row > 137 Then Exit Sub
        Case Else
            If Target.Row < 137 Or Target.Row > 141 Then Exit Sub
    End Select
    Target.Offset(5).Resize(7).EntireRow.Hidden = Target.Value <> "次表へ"
End Sub
(seiya) 2017/06/28(水) 

コメント返信:

[ 一覧(最新更新順) ]


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