• 締切済み

ExcelVBA 行を非表示にするとボタンが消える

 Excel2016です。調べても解決できなかったので,初めて質問させていただきます。  マクロで行を非表示にしたらコマンドボタンやチェックボックスが消えてしまいます。非表示にする行にはかからないようにオブジェクトを設置していますが,消えてしまいます。コントロールの書式設定で「セルにあわせて移動やサイズ変更をする」「セルにあわせて移動するが変更はしない」「セルにあわせて移動やサイズを変更しない」のいずれに設定しても消えてしまいます。一部消えない(見えている)オブジェクトもありますが,シートやオブジェクトをクリックしたり,画面を切り替えたりすると消えてしまいます。  しかし,「オブジェクトの選択と表示」で確認すると,消えたオブジェクトは全て残っています。  この状態で上書き保存をし,一旦ブックを閉じて再度開くと,オブジェクトは表示されており,機能します。  オブジェクトを配置した位置は,非表示処理をする14~35行より上と,それより下ですが,全て消えてしまいます。全てのオブジェクトを14行目より上に配置しても消えてしまいます。  しかし,別のシート(B)で全てのオブジェクトを非表示する行より上に配置して同様の処理をした場合は,消えません。  ※問題のシート(A)は,元々シートBをコピーして,更に別の処理を加えたりしたものなので,基本的には同じ処理を行っています。  また,その他の確認できた現象として,Ctrl+Wでブックを閉じた場合,通常はウィンドウの位置は変わりませんが,シートAでマクロ実行後に閉じた場合はなぜかウィンドウの位置がずれます(移動します)。ブックを開いて,何もせずにCtrl+Wで閉じた場合は移動しません。  念のため,オブジェクトの高さ等が0になってしまっているのかもしれないと思い,行を非表示にした後にオブジェクトの高さ・幅を変更するコードを追加してみてもやはり消えたままでした。  また,マクロを使用せずに手動で行を非表示にした場合は,オブジェクトは消えませんでした。  このオブジェクトが消える問題を解決する方法を教えていただきたいです。よろしくお願いいたします。 <コードの一部> Dim i As Integer For i = 14 To 35 Step 3 If Len(Cells(i, 9)) = 0 Then Range(Cells(i - 1, 9), Cells(i + 1, 9)).EntireRow.Hidden = True Next i なお, Range(Cells(i - 1, 9), Cells(i + 1, 9)).EntireRow.Hidden = True を Rows(i - 1).Hidden = True Rows(i).Hidden = True Rows(i + 1).Hidden = True に変えてみてもオブジェクトは消えます。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

先程質問者が抹消した、前の質問を見て、やってみていたのですが、 ボタン(例コマンドボタンを貼りつけてあるとして)を右クリック―プロパティーセルに合わせて移動・・をする、を指定しておくと、ボタンの表示されている行の非表示でボタンが見えなくなるようです。 小生は1例ぐらいしかやっておらず、十分テストしていないので、詳細は質問者が、テストしてみてください。 もしそうなら、VBAでコマンドボタンのプロパティの設定もマクロの記録でわかるのではないですか。 ボタンを右クリックしてコントロールの書式設定→プロパティで、 セルに合わせて移動やサイズ変更をしないを選択しておくと。 表示されなくなりますので、試してみてください。 私のいうことが正しければ、VBAのコードを載せて、読者に見せることは必要ないのでは。 コードの正否の問題でなく、エクセルの仕組みの問題でしょう。

  • OKWavex
  • ベストアンサー率22% (1222/5383)
回答No.1

行を非表示にしなければいいです

関連するQ&A

  • ExcelVBAで行の非表示、表示をコード化

    現在、Excel2003をつかっており、VBAを用いて sheet1シートの2行目、4行目、10行目を非表示にするマクロ(HIDDEN)と すべての行を表示にするマクロ(APPEAR)を使っています。 Sub HIDDEN() ThisWorkbook.Worksheets("sheet1").Rows("2").HIDDEN = True ThisWorkbook.Worksheets("sheet1").Rows("4").HIDDEN = True ThisWorkbook.Worksheets("sheet1").Rows("10").HIDDEN = True End Sub Sub APPEAR() ThisWorkbook.Worksheets("sheet1").Rows.HIDDEN = False End Sub いま、2つのマクロを併合し 「Sheet1の2行目、4行目、10行目のいずれかが非表示であれば、すべての行を表示 そうでなければ、2行目、4行目、10行目のすべてを非表示にしたい」 と考えています。 ここで私が困っているのは、2行目、4行目、10行目のいずれかが非表示であれば というのをどうVBAで記述するのかです。

  • ExcelVBAで行の非表示、表示をコード化したい

    現在、Excel2003をつかっており、VBAを用いて sheet1シートの2行目、4行目、10行目を非表示にするマクロ(HIDDEN)と すべての行を表示にするマクロ(APPEAR)を使っています。 Sub HIDDEN() ThisWorkbook.Worksheets("sheet1").Rows("2").HIDDEN = True ThisWorkbook.Worksheets("sheet1").Rows("4").HIDDEN = True ThisWorkbook.Worksheets("sheet1").Rows("10").HIDDEN = True End Sub Sub APPEAR() ThisWorkbook.Worksheets("sheet1").Rows.HIDDEN = False End Sub いま、2つのマクロを併合し 「Sheet1の2行目、4行目、10行目のいずれかが非表示であれば、すべての行を表示 そうでなければ、2行目、4行目、10行目のすべてを非表示にしたい」 と考えています。 ここで私が困っているのは、2行目、4行目、10行目のいずれかが非表示であれば というのをどうVBAで記述するのかです。

  • 結合されているセル行の中から1行だけを非表示にするマクロ

    結合されているセル行の中の1行だけを非表示したいと思っています。 例えばA1:A5が結合していて、B1:E5までは一切結合されていない状態で、3行目だけを非表示にしたいのですが、 Rows("3:3").Select Selection.EntireRow.Hidden = True とすると、1~5行目まで全てが非表示になります。 マクロを自動記録すると Rows("3:3").Select Range("B3").Activate Selection.EntireRow.Hidden = True となるのですが、この通りにコーディングしても、やはり1~5行目が非表示になります。 1行だけを非表示にしたい場合は、どのように記述すれば良いのでしょうか? よろしくお願いします。

  • シートの保護を実行した時、マクロだけは作動させたい

    いつもお世話になります。 WINDOWS7 EXCELL2010です。 シートの保護を実行すると下記のマクロが作動しないのですが何かいい方法はないでしょうか。 もし可能ならばご教示いただければ幸いです。 このマクロは素人の私が作成したもので合計のある行だけを表示するものです。 参考 Sub 非表示() ' ' 非表示 Macro ' マクロ記録日 : 2013/4/25 ユーザー名 : YOKOHAMA '' Rows("72:87").Select Selection.EntireRow.Hidden = True Rows("89:95").Select Selection.EntireRow.Hidden = True Rows("97:105").Select Selection.EntireRow.Hidden = True Rows("107:112").Select Selection.EntireRow.Hidden = True Rows("114:121").Select Selection.EntireRow.Hidden = True Rows("123:131").Select Selection.EntireRow.Hidden = True Rows("133:145").Select Selection.EntireRow.Hidden = True Rows("147:152").Select Selection.EntireRow.Hidden = True Rows("154:159").Select Selection.EntireRow.Hidden = True Rows("161:169").Select Selection.EntireRow.Hidden = True Rows("171:179").Select Selection.EntireRow.Hidden = True Rows("181:187").Select Selection.EntireRow.Hidden = True Rows("189:195").Select Selection.EntireRow.Hidden = True Rows("197:205").Select Selection.EntireRow.Hidden = True Rows("207:214").Select Selection.EntireRow.Hidden = True Rows("216:223").Select Selection.EntireRow.Hidden = True Rows("225:229").Select Selection.EntireRow.Hidden = True Rows("231:238").Select Selection.EntireRow.Hidden = True Rows("240:243").Select Selection.EntireRow.Hidden = True Rows("245:250").Select Selection.EntireRow.Hidden = True Rows("252:259").Select Selection.EntireRow.Hidden = True Rows("261:266").Select Selection.EntireRow.Hidden = True Range("A1").Select End Sub

  • 塗りつぶしのない行を非表示にするマクロ

    塗りつぶしのない行を非表示にするマクロを作成したいのですが、 どこが問題で実行できないのかわかりません! 例えば8行目に対して実行したい場合を教えてください! ちなみに自分で作成したVBAはこんな感じです。 Sub macro1() If Rows("8:8").Interior.Color = xlNone Then Rows("8:8").EntireRow.Hidden = True End If End Sub よろしくお願いします。 ちなみにexcel2007です。

  • 13行目のセルの値が0のとき、その列を非表示にする

    Windows7 Excel2007でマクロ作成中の初心者です。 13行目のセルの値が、0のときは、その列を非表示にするというマクロを作ろうとしましたが なかなか難しくておてあげです。探したら次のようなコードがでてきました。 ボタンを押すとK列の値を参照して「A」と表示されている行を隠し、「表示する」ボタンを押すと、 解除するという処理。 Option Explicit Private Sub Cmd隠す_Click()  Dim 行番号 As Long  '行を隠す  For 行番号 = 4 To 13   If Cells(行番号, 11).Value = "A" Then    Cells(行番号, 1).EntireRow.Hidden = True   End If  Next 行番号 End Sub Private Sub Cmd表示する_Click()  '表全体を再表示する  Cells.Select  Selection.EntireRow.Hidden = False  Selection.EntireColumn.Hidden = False  Cells(1, 1).Select End Sub このコードを利用して、13行目のセルの値が、0のときは、その列を非表示にするというコードにしたいのです。 よろしくおねがいします。

  • 【マクロ】任意の行の下へ行の挿入&選択

    セルA3:DS750の表があります。 1行=1顧客として使用していますが、度々表に行を挿入して顧客を追加しています。 その為、以下のマクロを作ってみたのですが、最後に【挿入した行をActiveにする】事ができません。 ★挿入位置は、都度変わります。 ★一度に行う挿入行数は1行(多くても3行)の為、マクロは1行追加で作成しています。(行数の指定までは力量により出来ませんでした・・) ★1行目にサンプルを(非表示で)置いて、それを任意の行へ挿入させています。 1行目のサンプルを非表示のまま貼り付けると、挿入した行も非表示になってしまったので、一度再表示させてから処理させています。 サンプル行には、条件書式、数式などがところどころ入っています。 処理の最後に【'行を指定して挿入】と同じ行をActiveにする方法が知りたいです。 記録マクロをいじっただけなので見づらいと思いますが、よろしくお願い致します。 -------------------------------- Sub 挿入() '1行目を再表示 Rows("1:1").Select Selection.EntireRow.Hidden = False '1行目をcopy Rows("1:1").Select Selection.Copy '行を指定して挿入 InsertRow = InputBox("何行目の下に挿入しますか?") + 1 Cells(InsertRow, 1).Insert Shift:=xlDown '1行目を非表示 Rows("1:1").Select Selection.EntireRow.Hidden = True '挿入した行をactiveにする ・・・ end Sub -------------------------------- マクロが根本的におかしかったらすみません。。 アプローチ方法が他にある場合にもご指摘いただけると助かります。

  • この場合エクセルVBAでどう書けばいいでしょうか?

    あるシートのH列で、H21からH46のあいだで"False"がある行を非表示にしたいのです。 下記の冗長なマクロでもそうなりますが、For Nextというのを使うともっと簡潔に記述できると思うのですが、初心者のためよくわかりません。ご教示ください。 また、下記の式はシートが保護されていると働きませんが、保護したシートでも動く方法があればそれもあわせて教えていただけると幸いです。 エクセルは95です。 Sub 空白行非表示() G% = Sheets("見積書").Range("H48").Value With Sheets("見積書") Rows("19:47").RowHeight = G% If Range("H21") = False Then Rows("21").EntireRow.Hidden = True End If If Range("H22") = False Then Rows("22").EntireRow.Hidden = True End If If Range("H23") = False Then Rows("23").EntireRow.Hidden = True End If If Range("H24") = False Then Rows("24").EntireRow.Hidden = True End If 途中、繰り返しのため省略 If Range("H42") = False Then Rows("42").EntireRow.Hidden = True End If If Range("H43") = False Then Rows("43").EntireRow.Hidden = True End If If Range("H44") = False Then Rows("44").EntireRow.Hidden = True End If If Range("H45") = False Then Rows("45").EntireRow.Hidden = True End If If Range("H46") = False Then Rows("46").EntireRow.Hidden = True End If End With End Sub

  • 作業グループで空白行の非表示マクロ

    1~40までのシート全てのB7:B36の範囲に空白があれば非表示にするというマクロを作ろうとしています。 Sheets(Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", _ "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", _ "39", "40")).Select Replace:=False Dim rw As Integer Application.ScreenUpdating = False For rw = 7 To 36 If Range("B" & rw) = "" Then Rows(rw).EntireRow.Hidden = True End If Next Application.ScreenUpdating = True というマクロだと、1のシートしか適用しませんでした。1~40のすべてにこのマクロを適用させるにはどうすればいいのでしょうか。教えて下さい。

  • Excel VBAでの定数宣言について

    初心者が書籍とにらめっこしながらマクロを書いています。 お助けください。 複数あるラジオボタンをクリックしたら、そのラジオボタンの種類に応じて、特定の行を表示したり、非表示にしたりしたいと考えています。行の追加や削除で行番号が変わってしまった場合に備えて、この行番号を定数として宣言したいと思ったのですが、うまくいきません。 シートモジュールには、以下のように記述しています。 ============================================================== Private Sub OptionButton1_Click() 'ラジオボタン1を選択 Rows(scope1).EntireRow.Hidden = False 'scope範囲行を表示 Rows(scope2).EntireRow.Hidden = True 'scope範囲行を非表示 End Sub Private Sub OptionButton2_Click() 'ラジオボタン1を選択 Rows(scope1).EntireRow.Hidden = True 'scope範囲行を非表示 Rows(scope2).EntireRow.Hidden = False  'scope範囲行を表示 End Sub ============================================================== 以下の記述で定数を宣言したいのですが、 public const scope1 = "38:48" '38行目~48行目 public const scope2 = "49:52" '49行目~52行目 シートモジュールの最初に書くと、 「コンパイルエラー  定数、固定長文字列、配列、ユーザー定義型およびDeclareステートメントは、オブジェクトモジュールのパブリックメンバとしては使用できません」 とエラーメッセージが表示されてしまいます。 エラーの意味がよく分からないのですが、定数宣言は、どこに記述すればよいのでしょうか? お教えください。よろしくお願いします。

専門家に質問してみよう