[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『行の表示・非表示のマクロ(ボタン作成)』(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
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.