[[20181204193014]] 『行の表示・非表示のマクロ(ボタン作成)』(KA00) ページの最後に飛ぶ

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

 

『行の表示・非表示のマクロ(ボタン作成)』(KA00)

表の列に、日付、担当者、商品、販売数などいくつかの項目があり、売り上げがあると、各担当者が行に追加入力していく表を作っています。
行がたくさん増えてくるので、あらかじめ一定数の行を作っておいたうえで、数行のみ表示しておき、それ以外の行は「行の追加」と「行の削除」のボタンをクリックすると、隠してある行のが1行ずつ表示されたり、非表示になったりするようにしたいのですが、どのようなマクロを作るのでしょうか?

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


回答ではありません。
ウインドウ枠の固定という機能はご存知でしょうか。

(マナ) 2018/12/04(火) 19:49


>どのようなマクロを作るのでしょうか
とりあえず、マクロの記録 で行を表示したり非表示にしたりするには、どのような命令を使うのか調べてみましょう
複雑な判定条件を考えるのは、そのあとでも遅くないとおもいます。

(もこな2) 2018/12/04(火) 19:54


ウィンドウ枠の固定については、すでにそのシートの中で使用しており、表の下のほうに集計表を作っていたり、入力されたデータを別のシートの関数で使用したりしているので、マクロで行いたいと考えています。

マクロの記録で行の表示や非表示をする際の、命令についても一応調べてみましたが、不明なため質問しました。
自分が実際に入力するのではなく、複数の人が使用するので、不要なところをいじられないようにロックをかけていたりするため、どうしても質問の内容で行いたいです。
ご教示いただけると助かります。
(KA00) 2018/12/05(水) 09:37


>マクロの記録で行の表示や非表示をする際の、命令についても一応調べてみましたが、不明なため質問しました。
では、実際にどのようなコードが記録されたのか提示いただけますか?

その操作だけ、記録したのであれば問題はないとおもいますが、シート名やブック名など秘匿すべき情報が入っていたら適当なものに置き換えて隠してから投稿してください。

(もこな2) 2018/12/05(水) 10:28


ありがとうございます。
非表示にするマクロは以下です。
Sub Macro1()
'
' Macro1 Macro
'
    Rows("2:2").Select
    Selection.EntireRow.Hidden = True
    Range("A1").Select
End Sub

再表示するマクロは以下です。
Sub Macro2()
'
' Macro2 Macro
'

    Rows("1:3").Select
    Selection.EntireRow.Hidden = False
    Range("A1").Select
End Sub

VBAなどがわからず、マクロの記録で非表示にしたり再表示にする作業を記録しただけす。(これだと、2行目が非表示になるのと再表示されるだけになってしまいます。)
全部で100行の表ができていて、最初は40行ほど表示しておき、「行を追加」ボタンと「行を削除」ボタンを作り、「行を追加」ボタンをクリックするたびに、41行目以下の非表示になっている行を1行ずつ表示していき、「行を削除」ぼ端をクリックするたびに最後に追加した行を1行ずつ非表示にしたりしていきたいです。

(KA00) 2018/12/05(水) 19:24


>ウィンドウ枠の固定については、すでにそのシートの中で使用しており、

グループ化とウィンドウ枠の固定で対応できそうな気がしますが…

>表の下のほうに集計表を作っていたり、入力されたデータを別のシートの関数で使用したりしているので、マクロで行いたいと考えています。

なぜ、それがマクロで行いたい理由なのか???

わたしには、非表示で便利になると思えないのですが、
非表示にする行を求めるには、こんな感じかもしれません。

  Sub test()
    Dim a As Areas

    Set a = Columns(1).SpecialCells(xlCellTypeVisible).Areas

    If a.Count > 1 Then
        MsgBox a(2)(1).Row & "行目を非表示にします"
    Else
        MsgBox "41行目を非表示にします"
    End If

 End Sub

(マナ) 2018/12/07(金) 20:15


回答サボっている間にマナさんがフォローしてくださっていますが、一応投稿しておきます。

提示のあったコードですが

    Sub Macro1()
        Rows("2:2").Select・・・・・・・・・・・・・・・・・・・・(1)
        Selection.EntireRow.Hidden = True・・・・・(2)
        Range("A1").Select
    End Sub

最後の「Range("A1").Select」は、そのままA1セルを選択しなさいという意味なので今回は関係なしとして、
(1)は、2行目を選択しなさい という命令です。
そして
(2)は、「Selection.EntireRow」の部分が、「選択されている範囲が含まれている行全体」という意味になりますので「選択しているセル(2行目全体)が含まれる行」となり、結局2行目という意味になります。
そして、「.Hidden = True」の部分で、「〜を非表示にしなさい」となっています。

マクロの記録は、操作がそのまま記録されるので冗長なコードになりがちですので、上記を整理するとこのようになります。

    Sub Macro1を整理()
        Rows("2:2").Hidden = True
    End Sub

同じ考えで、表示させるには

    Sub Macro2を改造()
        Rows("2:2").Hidden = False
    End Sub

のように、「.Hidden = False」としてやることで「〜を表示」という意味になります。

また、複数行でなく、2行目だけであれば、それぞれ↓のように記述してもokです
「:」がないこと、2が""で囲まれていないところに注目してください。

    Sub 複数行でなければ()
        Rows(2).Hidden = True
        Rows(2).Hidden = False
    End Sub

ここまでは理解できますでしょうか?
それが終わったら↓について考えていきましょう。

 >全部で100行の表ができていて、最初は40行ほど表示しておき、
 >「行を追加」ボタンと「行を削除」ボタンを作り、「行を追加」
 >ボタンをクリックするたびに、41行目以下の非表示になっている
 >行を1行ずつ表示していき、「行を削除」ぼ端をクリックするたびに
 >最後に追加した行を1行ずつ非表示にしたりしていきたいです。 

実は、↑はなかなか難しいとおもいます。
なぜなら「最後に追加した(たぶん表示させた行と言いたいのだと思いますが)行」がどこなのかって、極端なことを言えばVBA上だけでは覚えておけないからです。
厳密にいうと、ブックを開いている間は覚えておけるかもしれませんけど、開きなおしたりするとダメなはずです。

ですので、「前回表示させた行」をどこかのセルにメモしておくか、別ファイルに書き出しておくかしておかないとそのようなことはできないとおもわれます。

なので考え方を変えて、

 「1行表示」ボタンを押したら、41行目から100行目まで順にみていって、最初に見つかる非表示行を表示
 「1行非表示」ボタンを押したら、  〃                     非表示行の1行前を非表示

というような感じで処理することを考えてみてはいかがでしょうか。

(もこな2) 2018/12/10(月) 04:41


コメント返信:

[ 一覧(最新更新順) ]


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