ボタン一個で表示非表示切り替えマクロについて教えてください。
長文失礼します。マクロ初心者です。
まず画面は以下の通りです。
ー A B C ・・
1 取引名 区分 費目
2 ◯システム 前期 円
3 空白 後期 円
4 空白 実績
ーーーーーーーーーーーーーーーーーーーーー
5 ▲システム 前期
6 空白 後期
7 空白 実績
ーーーーーーーーーーーーーーーーーーーーー
・
・ (★3行ずつ×10〜15コ分続く)
・ (★取引名がないとこは3行とも空白)
ーーーーーーーーーーーーーーーーーーー
20 小計 前期計
21 後期計
22 合計
23 実績計 (★小計欄は4行)
ーーーーーーーーーーーーーーーーーーーーーー
ここまでで1項目、(運用、保守などで区切っています)
次は保守の、同じのが。という風に1000行以上続きます。
別のファイルの取引no.と一致したら費目金額を反映させるマクロを取り込みボタンに設定中なので、
このフォーマットは変えられません。
そして、今回作成しなければならないのが、
表示非表示切り替えボタンです。
3行の一番上に取引名が入り、下2行は空白です。
一番上に取引名が入ってなかったら、以下の3行まとめて非表示/表示を切り替えたいんです。
現状、基本は1項目につき3行ずつ×10ですが
取引名が多数あるものはその分増やしているので統一はしていません。
また、各項目1つでも取引名があれば小計欄は非表示しない。
0だったら小計欄も非表示にする。
というルールです。
先方のお願いは
ボタン一個で、表示をクリックしたら表示され、ボタンの名前は非表示に変わり、非表示をクリックしたら非表示になり、名前は表示に、ということなのですが、
全然できてないのですが、
私が今考えていたコードは
If 切り替え.Caption = ”表示” Then
For i = 2 To LastRow Step 3
★まずここで、3行ずつ回すも、小計欄は4行なのでどうしたらいいのか
続き
If Cells(i,1) <> ”” And _
Cells(i,1) <> ”小計” Then
icnt = icnt + 1
EndIf
値があったらカウントし
後に、icnt>=1 Then
小計欄は残す、という流れをイメージしたのですが…
If Cells(i,1)= ”” Then
Rows(i).Hidden
If Cells(i,1) = ”小計” Then
If icnt>=1 Then
という流れにする場合、
もし残すなら、
次の項目からまたスタートとなるにはどうすればいいのか…
非表示の場合まとめて4行はアクティブセル+3という式にしたらいいのか、、
すみませんがもしよろしければコードをご教示ください。
No.1ベストアンサー
- 回答日時:
こんにちは
ご質問文で一番わからないのが、項目と次の項目の間は隙間なく連続しているのか、空白行や再度タイトルが記されていたりしないのかといったことでしょうか。
空白行がある場合は、きちんと行数が決まっているのか、気まぐれに1行だったり2行だったりするのかということ。
はっきりしないので、コードは示せませんが、少しは考え方のヒントにでもなれば・・・
方法はいろいろあると思いますが、ひとまとまりで考える行数が一定ではないので、ご提示のようにFORループで一律にStep 3としたのではうまくいかないと思います。
一例として、調べる対象の行(先頭行)を変数rwとして、順に見ていくものと考えた場合
rw = 2 '←対象行の初期値
Do While rw <= LastRow
If Cells(rw, 1).Value = "小計" Then
'小計の場合の処理
' ~~~
rw = rw + 4 '←次の行(4でよいのか不明ですが)
Else
'3行セットの場合の処理
' ~~~
rw = rw + 3 '←次の行
End If
Loop
のような考え方にすれば、対象の行数が異なる場合でも、条件分けして処理をすることで、次に参照する行までの行数を変えることが可能です。
上の例では、小計欄の4行の1行目には必ず「小計」と記されていて、それで識別しても良いとの保証があるものと仮定しています。(取引名には「小計」というものは絶対に存在しないなど)
No.2
- 回答日時:
>7 空白 実績
> (★3行ずつ×10〜15コ分続く)
>20 小計 前期計
はて?38以上になると思うがなぜに20?
>Range(Cells(i,1),Cells(i+3,1)).EntireRow.Hidden = True
>としましたが、プラス3という記述はダメでしょうか。
文法的に全く問題ないですよ。
ただi,i+1,i+2,i+3 、で四つありますね。
「ダメでしょうか。」だけでは何がダメなのか判らないです。
私が思うに
ボタン設けるよりも取引名の空白最上段のみ残して
以下は隠しておけば入力された時に、その下3行表示して
クリアされたらその下3行消すでいけるんじゃないかと。
ボタン無しで実現できるから。
この最後に小計の処理を入れたらいいんじゃないかな。
以下は取引名が8行目から始まる前提で書いてみました。
動的部分だけなので表示の時、別途
取引名の空白最上段のみ残して以下は隠しておくが必要です。
取引名を入力いただくと判ります。
Const 余り = 2 '0~2 で実体に合わせる
Const 開始行 = 6 + 余り
Const 最終行 = 33 + 余り
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
If Target.Row Mod 3 = 余り And Target.Column = 1 Then
Application.EnableEvents = False
For i = 最終行 To Target.Row Step -3
If Cells(i, 1) = "" Then
If Cells(i + 1, 1).Height > 0 Then
Cells(i + 1, 1).Resize(3).EntireRow.Hidden = True
End If
Else
Cells(i + 1, 1).Resize(3).EntireRow.Hidden = False
End If
Next
’ 小計の処理書くならここ
Application.EnableEvents = True
End If
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Excel(エクセル) Excel 特定セルの数値を参照したセルの0表示が空白にならないのはどうしてか? 3 2022/04/28 22:23
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Visual Basic(VBA) ユーザーフォームの表示を追加したい 2 2023/03/26 23:18
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
ユーザーフォームに別シートか...
-
フォームの再読み込み
-
セルをマクロのボタンにしたい。
-
VBAのボタンの位置が変わって困...
-
VBA CommandButtonの文字ずれ
-
回数のカウント
-
CommandButtonのCaptionを変化...
-
コマンドボタンやイメージにマ...
-
ボタンにセットフォーカスする...
-
バックスペース機能の作り方
-
閉じると「+」になり開くと「-...
-
VBAでオプションボタンによって...
-
VBA IE ダウンロード ダイアロ...
-
C♯初心者で、四則演算の電卓を...
-
エクセル 検索マクロ オート...
-
Vba 電卓 一文字消すボタン
-
Access VBA でデータペーストを...
-
コントロールの背景色を
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
ユーザーフォームに別シートか...
-
VBA CommandButtonの文字ずれ
-
フォームの再読み込み
-
セルをマクロのボタンにしたい。
-
Excel VBA Application.caller...
-
コマンドボタンやイメージにマ...
-
プロシージャからイベントをコ...
-
Access VBA でデータペーストを...
-
VBAのボタンの位置が変わって困...
-
閉じると「+」になり開くと「-...
-
[Excel VBA]コマンドボタンの入...
-
ASP.Net ラベルの内容をすぐに...
-
Excel マクロ 閉じるボタン
-
ボタン
-
CommandButtonのCaptionを変化...
-
VB.NETでマウスクリックイベン...
-
ボタンの枠線の様なものを消したい
-
C#で動的に作ったtextboxを消す。
おすすめ情報
with 切り替え
If 切り替え.Caption = ”表示” Then
.Caption = ”非表示”
Else
Rows.Hidden = False
.Caption = ”表示”
Endwith
を追記しました。
If Cells(i,1) = ”” Then
Range(Cells(i,1),Cells(i+3,1)).EntireRow.Hidden = True
としましたが、
プラス3という記述はダメでしょうか。