Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8746 / 13644 ツリー ←次へ | 前へ→

【31412】「行の非表示」と「オートフィルタ」が矛... 教えてください初心者です 05/11/19(土) 11:26 質問[未読]
【31413】Re:「行の非表示」と「オートフィルタ」... kobasan 05/11/19(土) 14:33 発言[未読]
【31417】Re:「行の非表示」と「オートフィルタ」... 教えてください初心者です 05/11/19(土) 16:33 お礼[未読]

【31412】「行の非表示」と「オートフィルタ」が矛...
質問  教えてください初心者です E-MAIL  - 05/11/19(土) 11:26 -

引用なし
パスワード
   こんにちは。「行の非表示」と「オートフィルタ」が相互に矛盾する問題の解決に力をお貸し下さい。

住宅見積書を作成している所です。工事種目も明細行も多いので必要に応じて行を増やせるように考えました。
ボタンクリックすることで工事種目中の明細行を追加し、小計はその都度その行を加算して行けるようにと考えて作り、初めてのマクロ試行ですが下のようになりました。

A列には増行コマンドの為のボタン(ボ)を置くだけで実際の見積書はB列から始まります。ボタン行のすぐ上の第3行は書式・関数を埋め込んだまま空欄にして非表示にします。
動作としては「Aボ」セルを最初に押して相対位置を決定した後にそのセルに置いてあるボタンをクリックすることでシート保護と第3行の非表示を解き、その行をコピペして1行増やし、次にボタン行の上に出来た新しい行を非表示にした後にシートを保護します。勿論記入すべきセルには保護チェックを外してあります。マクロ記録しか出来ない私の苦肉の策でした。

これだけなら問題はなかったのですが、実はE行にはオートフィルタを設定してあり、「見積作成の際には省略出来ないのに印刷の際には省きたい金額記載のない行」を除外してコンパクトな見積書に印刷するのですが、オートフィルタを実行した後に「すべて」をクリックすると非表示行まで全部表示されてしまうので、その印刷後に続けて記入を再開するためには誤記入を避けるために全工事種目について手入力で再度非表示にしなければなりません。


事前のご説明がとても長くなって恐縮ですが、この煩わしい手入力再度非表示をしない為にはどうすれば良いか、というご質問です。

マクロ記録でなくてVBAならこんな問題はないよ、というご回答もあるかと思いますが、その記述には慣れていませんので、そのままコピペ出来るように教えて頂けると有難いです。

■工事種目の明細行の一例(単純化してあります)
_A____B_____C______D_____E__
___|_1__|__数__|__単価_|_金額__←明細行
___|_2__|__数__|__単価_|_金額__←明細行
___|_3__|__数__|__単価_|_金額__←記入しない非表示行
_ボ_|____|_____|_____|_小計__


■上記のマクロ記録
Sub 増行()
'
' 増行 Macro
' マクロ記録日 :  ユーザー名 :
'

'
  ActiveCell.Select
  ActiveSheet.Unprotect
  ActiveCell.Offset(-2, 0).Rows("1:3").EntireRow.Select
  Selection.EntireRow.Hidden = False
  ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select
  Selection.Copy
  Selection.Insert Shift:=xlDown
  ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select
  Selection.EntireRow.Hidden = True
  ActiveCell.Offset(1, 0).Range("A1").Select
  Application.CutCopyMode = False
  ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

上記どうぞよろしく。

【31413】Re:「行の非表示」と「オートフィルタ」...
発言  kobasan  - 05/11/19(土) 14:33 -

引用なし
パスワード
   今日は。

簡単にしか考えてないのですが、表示したくない行のA列に1を入れて、下記マクロを実行するボタンをシートに配置してやってみてください。(他の列にしたかったら、変更してください)

Sub test()
Dim r As Range
  For Each r In Range("A1", Range("A65536").End(xlUp))
    If r.Value = 1 Then r.EntireRow.Hidden = True
  Next
End Sub


>
>■工事種目の明細行の一例(単純化してあります)
>_A____B_____C______D_____E__
>___|_1__|__数__|__単価_|_金額__←明細行
>___|_2__|__数__|__単価_|_金額__←明細行
>___|_3__|__数__|__単価_|_金額__←記入しない非表示行
>_ボ_|____|_____|_____|_小計__
>
>
>■上記のマクロ記録
>Sub 増行()
>'
>' 増行 Macro
>' マクロ記録日 :  ユーザー名 :
>'
>
>'
>  ActiveCell.Select
>  ActiveSheet.Unprotect
>  ActiveCell.Offset(-2, 0).Rows("1:3").EntireRow.Select
>  Selection.EntireRow.Hidden = False
>  ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select
>  Selection.Copy
>  Selection.Insert Shift:=xlDown
>  ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select
>  Selection.EntireRow.Hidden = True
>  ActiveCell.Offset(1, 0).Range("A1").Select
>  Application.CutCopyMode = False
>  ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
>End Sub
>
>上記どうぞよろしく。

【31417】Re:「行の非表示」と「オートフィルタ」...
お礼  教えてください初心者です E-MAIL  - 05/11/19(土) 16:33 -

引用なし
パスワード
   kobasanさん、早速のご回答有難うございます。

別にボタンをつくり、それを押すことで一斉に非表示にしようと言うアドバイスですね。なるほどっ。

早速実行してみました。全ての非表示行のA列に「1」を打ち込み、教えて頂いたマクロをその通りに記述してそのマクロに「右へならえボタン」を設定し(A1セルに設定しました)、オートフィルタで「全て」を選んで全表示させてから「右へならえボタン」を押すと工事種目ごとの非表示行は見事に一斉に非表示になりました。

しかし一つ問題がありました。私のマクロ記述では非表示行の単純なコピペですからA列に1を置いた列ばかり増えて、消したくない行まで消えてしまうことでした。

そこでマクロ記述を少し変形させ、一行増やすたびに古い行の「1」を削除する項目を挿入する事でこの問題をクリアしました。

お世話になり有難うございました。感謝致します。もともとエクセルは好きでしたが、マクロ記述を覚えてからこのソフトの面白さに首までハマりそうです。 VBAまで手を伸ばすつもりですから又色々とお教え下さい。

8746 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free