none
VBAにおける変数の定義について RRS feed

  • 質問

  • 1週間おきに、新しい日付を指定すると、その日付が表の最終行に表示されていくというマクロです。その際、その表の最終行から、5行上の行を自動的に非表示にするという設定をしたいのですが、どのようなコマンドで、どのように変数を指定し、最終行から5行上の行を非表示にしたらよいのか、ご教授いただけないでしょうか?

    よろしくお願いいたします。

    tdkr_936XR

    2016年8月31日 22:41

回答

  • とりあえず簡単なイメージですと、以下のような感じでしょうか?

    Private Sub Worksheet_Change(ByVal Target As Range)
    
        If Target.Row > 4 And Target.Column = 5 Then
        
            If Cells(Target.Row, Target.Column).Value <> "" Then
                Cells(Target.Row - 4, 1).EntireRow.Hidden = True
            Else
                Cells(Target.Row - 4, 1).EntireRow.Hidden = False
            End If
        End If
    
    End Sub


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/


    2016年9月1日 6:01
    モデレータ
  • こんなのはだめでしょうか?

    Sub test()
        Dim x As Long
        x = Cells(Rows.Count, 1).End(xlUp).Row
        Range("A" & x + 1).Value = InputBox("新しい日付")
        Rows(x - 4).EntireRow.Hidden = True
    End Sub

    -----------------

    Changeイベントマクロをお望みなら
    Sheet1にデータがあるならALTキーを押したままF11キーを押してVBE画面を出す。
    VBE画面の左側にあるVBAProjectの下方のSheet1をダブルクリックして右側のOption Explicitの下に下記マクロを貼り付ける。
    Sheet1に戻って6行目に新しい日付を入れる。

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Row > 5 And Target.Column = 1 Then
            If Target.Offset(-1).Value = "" Then
                Application.EnableEvents = False
                Target.Value = ""
                Application.EnableEvents = True
                Exit Sub
            Else
                Rows(Target.Row - 5).EntireRow.Hidden = True
            End If
        End If
    End Sub

    2016年9月3日 0:26
  • 以下が参考になると思います。以下ではMacro1という標準モジュールに記述していますが、Worksheet_Changeはそこではなく、ワークシートのマクロに記述して下さい。例えば、Sheet1などのマクロに記述します。

    プログラムを書き始めるまでの準備
    http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture/vba2013/01-intro01.html#before


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2016年9月3日 5:03
    モデレータ

すべての返信

  • Excelの話で良いのでしょうか? もし、そうだとすれば、Excelのバージョンも教えて下さい。
    また、ご質問の意味もはっきりわかりません。入力した値が最終行に入力され、その最終行から5行上までの5つの行を非表示にするのでしょうか? それとも、最終行の1つ上の行から5行上までの5つの行を非表示にするということでしょうか?


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2016年9月1日 0:55
    モデレータ
  • trapemiya 様、

    Excel は、Excel 2013 でマクロを組みました。

    また、入力した最終行で、4行上まで(1ヶ月分)は残して(表示された状態で)、最終行の上の5行目だけを非表示にしていくプログラムにしたいということなのです。(現在、5週間分の行が表示されており、最終行に最新の週の行を入力した際、一番古い5週間前の行を非表示にしていくようにしたいということなのですが)。

    以上の説明でよろしいでしょうか?

    tdkr_936XR

    2016年9月1日 3:54
  • とりあえず簡単なイメージですと、以下のような感じでしょうか?

    Private Sub Worksheet_Change(ByVal Target As Range)
    
        If Target.Row > 4 And Target.Column = 5 Then
        
            If Cells(Target.Row, Target.Column).Value <> "" Then
                Cells(Target.Row - 4, 1).EntireRow.Hidden = True
            Else
                Cells(Target.Row - 4, 1).EntireRow.Hidden = False
            End If
        End If
    
    End Sub


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/


    2016年9月1日 6:01
    モデレータ
  • こんなのはだめでしょうか?

    Sub test()
        Dim x As Long
        x = Cells(Rows.Count, 1).End(xlUp).Row
        Range("A" & x + 1).Value = InputBox("新しい日付")
        Rows(x - 4).EntireRow.Hidden = True
    End Sub

    -----------------

    Changeイベントマクロをお望みなら
    Sheet1にデータがあるならALTキーを押したままF11キーを押してVBE画面を出す。
    VBE画面の左側にあるVBAProjectの下方のSheet1をダブルクリックして右側のOption Explicitの下に下記マクロを貼り付ける。
    Sheet1に戻って6行目に新しい日付を入れる。

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Row > 5 And Target.Column = 1 Then
            If Target.Offset(-1).Value = "" Then
                Application.EnableEvents = False
                Target.Value = ""
                Application.EnableEvents = True
                Exit Sub
            Else
                Rows(Target.Row - 5).EntireRow.Hidden = True
            End If
        End If
    End Sub

    2016年9月3日 0:26
  • trapemiya 様、

    基本的なことで済みませんが、『Private Sub 』の使い方がよくわかりません。『Sub 識別子、プログラム、End Sub』のどこに挿入すればいいのでしょうか?あるいは『Private Sub Worksheet_Change(ByVal Target As Range)』の識別子はなにになるのでしょうか?

    まだ、VBA の仕組みがよく分かっておりません。上記、ご返事いただければ助かります。

    よろしくお願いいたします。

    tdkr_936XR

    2016年9月3日 4:08
  • 横から失礼します。

    『Private Sub 』は、該当Subメソッドのスコープ(公開範囲)を指定しているだけです。
    下記の3つは動作定義としては一緒ですが、参照可能な対象が異なる(省略時はPublicだったかと)のみです


    Public Sub ○○
    End Sub


    Private Sub ○○
    End Sub


    Sub ○○
    End Sub


    ただし、明示された方がそこに意志が込められますし、
    どこ迄公開されているかが分かり易いので記述されていた方が私は好ましいです。

    2016年9月3日 4:58
  • 以下が参考になると思います。以下ではMacro1という標準モジュールに記述していますが、Worksheet_Changeはそこではなく、ワークシートのマクロに記述して下さい。例えば、Sheet1などのマクロに記述します。

    プログラムを書き始めるまでの準備
    http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture/vba2013/01-intro01.html#before


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2016年9月3日 5:03
    モデレータ
  • trapemiya 様、

    ワークシートに記入して、どのように実行するのでしょうか?

    マクロ名は、どうなるのでしょうか?

    tdkr_936XR

    2016年9月3日 16:38
  • Public Sub, Private Sub, Sub の違いがよく分かりました。ありがとうございます。

    tdkr_936XR

    2016年9月4日 2:14
  • TETSUO 様、

    詳しくご説明、ありがとうございます。何とか無事に、マクロプログラムが完成いたしました。

    感謝いたします。

    tdkr_936XR

    2016年9月4日 2:19
  • trapemiya 様、

    丁寧なご教授、ありがとうございます。

    VBA について、少しは理解できるようになった気がします。

    マクロプログラムの方も、何とか

    完成形に近づきつつあります。

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

    tdkr_936XR

    2016年9月4日 2:30