[[20040116152123]] 『下のVBAの説明していただけませんか』(VBAしりたい) ページの最後に飛ぶ

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

 

『下のVBAの説明していただけませんか』(VBAしりたい)

Sub 非表示()
'
' Macro1 Macro
' マクロ記録日 : 2003/7/1 ユーザー名 : A.
'

    Dim a
    Dim DataCnt
    Dim SHEETNAME
'
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    SHEETNAME = Sheets(1).Name

    a = 5

    Do While Sheets(SHEETNAME).Cells(a, "B").Value <> ""
        a = a + 1
    Loop

    DataCnt = a - 1

    a = 5

    Do While DataCnt + 1 > a
        If Cells(a, "C").Value = 0 And Cells(a, "D").Value = 0 Then
            Rows(a).Select
            Selection.EntireRow.Hidden = True
        End If
        a = a + 1
    Loop

End Sub

Sub 表示()
'
' Macro1 Macro
' マクロ記録日 : 2003/7/1 ユーザー名 : A.
'

    Dim a
    Dim DataCnt
    Dim SHEETNAME
'
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    SHEETNAME = Sheets(1).Name

    a = 5

    Do While Sheets(SHEETNAME).Cells(a, "B").Value <> ""
        a = a + 1
    Loop

    DataCnt = a - 1

    a = 5

    Do While DataCnt + 1 > a
        If Cells(a, "C").Value = 0 And Cells(a, "D").Value = 0 Then
            Rows(a).Select
            Selection.EntireRow.Hidden = False
        End If
        a = a + 1
    Loop

End Sub


 【共通部分】
 変数宣言。Variant型
    Dim a
    Dim DataCnt
    Dim SHEETNAME

 マクロ実行中画面を更新しない
    Application.ScreenUpdating = False

 マクロ実行中のメッセージダイアログ表示を抑制
    Application.DisplayAlerts = False

 変数SHEETNAMEにシート番号1の名前を格納    
    SHEETNAME = Sheets(1).Name

 変数aに 5 を格納
    a = 5

 SHEETNAMEシートのセル B5 以降が空白でない間は 変数 a に +1
    Do While Sheets(SHEETNAME).Cells(a, "B").Value <> ""
        a = a + 1
    Loop

 変数DataCntに a - 1 を格納
    DataCnt = a - 1

 【非表示】
 変数aに 5 を格納
    a = 5

 変数DataCnt+ 1  が 変数a より大きい間はDo Loop間を実行
 Do Loop間=C列D列の5行目以降がともに「0(または空白?)」の時は
 その列を非表示に(行番号は変数a にてカウント)
    Do While DataCnt + 1 > a
        If Cells(a, "C").Value = 0 And Cells(a, "D").Value = 0 Then
            Rows(a).Select
            Selection.EntireRow.Hidden = True
        End If
        a = a + 1
    Loop

 【表示】
 変数aに 5 を格納
     a = 5

 変数DataCnt+ 1  が 変数a より大きい間はDo Loop間を実行
 Do Loop間=C列D列の5行目以降がともに「0(または空白?)」の時は
 該当行の非表示を解除 (行番号は変数a にてカウント)
    Do While DataCnt + 1 > a
        If Cells(a, "C").Value = 0 And Cells(a, "D").Value = 0 Then
            Rows(a).Select
            Selection.EntireRow.Hidden = False
        End If
        a = a + 1
    Loop

 「シートは一番左端である」
 「何らかのデータが5行目以降に入力されている」
 「B列で最大データ数を求めることができる」

 上記の条件を満たすシートで処理をする行数を求め、

 「アクティブなシートのC5:Dnの範囲でデータが入力されている」シートで 
 「アクティブなシートのC列 D列の5行目以下のデータがともに
 0(または空白)の行の表示/非表示を切り替える」

 のを意図したマクロであると分析しますが、
 最初の Do〜Loop ではシートを明記しているのに
 あとの方の Do〜Loop ではシートが明記されていません。
 シートが複数あるブックで左端ではないシートがアクティブの状態で
 このマクロを実行した場合はアクティブなシートのほうに表示/非表示の
 動作がかかるのでそれを意図しているかどうかは不明です。
 (KAMIYA)

コメント返信:

[ 一覧(最新更新順) ]


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