仕事で使っている書式で、A1に「あいうえお」と入力すると、A2「あ」、B2「い」、C2「う」、D2「え」、E2「お」とMID関数で振り分け、入力後、A行を「表示しない」と「再表示」するマクロをボタンで実行するようにしています。
そこで、
この書式には必ず入力しなければならない項目があるので(非表示しない行のセル)、この項目に入力したら行の非表示マクロを実行し、空白なら行の再表示マクロを実行出来るようにしたくて調べているのですが見つかりません。
1クリックの手間を省く方法をご存知の方ご教示ください。
宜しくお願いします。
No.3ベストアンサー
- 回答日時:
記録マクロで作られた物ですね。
下記のようにしてください。
Sub とじるよ()
Range("25:25,32:32,38:38,45:45,52:52,59:59,66:66,70:70,74:74,78:78,85:85") _
.EntireRow.Hidden = True
Range("AL15:CE16").Select'選択不要ならこの行を削除
End Sub
Sub ひらくよ()
Rows("21:87").EntireRow.Hidden = False
Range("AL15:CE16").Select'選択不要ならこの行を削除
End Sub
'上記は標準モジュール
'下記はシート用のモジュールに入れてください。
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Address = "$A$1" Then
If Target.Value = "" Then
Call ひらくよ
Else
Call とじるよ
End If
End If
Application.EnableEvents = True
End Sub
記録マクロというのですか。
ずいぶん長いコードだったのがすんごく短くなったのにしっかり結果が出て、すごいです。
別の書式では、列を非表示にする記録マクロをつくって実行したところ結合したセルまで非表示になってしまって諦めていたのですが、最初に教えていただいたコードではそのようなことがなく使えるのでどちらも使わせていただきます。
ありがとうございました。
No.4
- 回答日時:
こんにちは。
Wendy02です。こんな風にしたらどうかな?
ただし、$A$1などが複数存在している場合は、 Application.EnableEvents のコメントを外してください。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ur As Range
Dim flg As Boolean
''ここを設定↓
If Target.Address <> "$A$1" Then Exit Sub
'Application.EnableEvents = False
If Target.Value <> "" Then
flg = True
Else
flg = False
End If
rngRows ur
ur.EntireRow.Hidden = flg
Range("AL15:CE16").Select
'Application.EnableEvents = True
End Sub
Private Function rngRows(ur As Range)
Dim myRows As Variant
Dim r As Variant
myRows = Array(25, 32, 38, 45, 52, 59, 66, 70, 74, 78, 85)
For Each r In myRows
If ur Is Nothing Then
Set ur = Rows(r)
Else
Set ur = Union(ur, Rows(r))
End If
Next r
End Function
ほんとうにすごいです。
要求どおりの結果が出ました。しっかり使わせていただきます。
VBAは神の領域でしたがこれを期に少し勉強してみようかな。
ありがとうございました。
No.2
- 回答日時:
こんにちは。
私は、設問を何度も何度も読み返してみましたが、意味が良くわかりません。
それとも、私の読み違えなのかもしれません。
>入力後、A行を「表示しない」と「再表示」するマクロ
>A2「あ」、
「A行」? 「A列」振り分けた、文字列まで、表示しないのですか?
>この項目(=A1のことだろうと思います)に入力したら行の非表示マクロを実行し、
>空白なら行の再表示マクロを実行出来るようにしたくて
&
>1クリックの手間を省く方法をご存知の方ご教示ください。
非表示にする側はA1に入れるから、そのイベントのトリガーになるものは分るけれども、A1(または、2行目)が「空白なら、行の再表示」という状態-非表示になったものに対して、再表示させるためのトリガーは分らないですね。(まったく出来ないわけではないけれども、特殊なコードになります。)
通常は、ワークシートのアクション(動作)に対して、トリガーになるのですから、A1の文字を消去した、というなら、ロジックは成り立ちますが、元を非表示にしたり、その消えている状態では、ロジックが成り立たないと思います。もちろん、シートをActivateしたというものに対しては、トリガーになりますが、そうすると、条件とは違ってきます。どこか、設問に間違いがあるのではないでしょうか?
1クリックの手間と言っても、結局は、何かに組み合わせるだけのことなのですね。その元がなくなったら、どうしようもありませんし、目の前から消えたものに対しては、動作しないわけです。
A B C D E
1 あいうえお
2 あ い う え お
↑
この列が非表示になると、残るものは、B2,C2,D2,E2 になります。A1,A2を非表示にするのですか?
この回答への補足
書き方を間違っていました
「列」ではなく「行」でした。
実際には、
Sub とじる1()
Rows("25:25").Select
ActiveWindow.SmallScroll Down:=6
Range("25:25,32:32,38:38").Select
Range("A38").Activate
ActiveWindow.SmallScroll Down:=6
Range("25:25,32:32,38:38,45:45").Select
Range("A45").Activate
ActiveWindow.SmallScroll Down:=9
Range("25:25,32:32,38:38,45:45,52:52").Select
Range("A52").Activate
ActiveWindow.SmallScroll Down:=6
Range("25:25,32:32,38:38,45:45,52:52,59:59").Select
Range("A59").Activate
ActiveWindow.SmallScroll Down:=12
Range("25:25,32:32,38:38,45:45,52:52,59:59,66:66").Select
Range("A66").Activate
ActiveWindow.SmallScroll Down:=6
Range("25:25,32:32,38:38,45:45,52:52,59:59,66:66,70:70,74:74").Select
Range("A74").Activate
ActiveWindow.SmallScroll Down:=12
Range("25:25,32:32,38:38,45:45,52:52,59:59,66:66,70:70,74:74,78:78,85:85"). _
Select
Range("A85").Activate
ActiveWindow.SmallScroll Down:=3
Selection.EntireRow.Hidden = True
ActiveWindow.SmallScroll Down:=-69
Range("AL15:CE16").Select
End Sub
と
Sub ひらく1()
ActiveWindow.SmallScroll Down:=3
Rows("21:87").Select
Selection.EntireRow.Hidden = False
Range("AL15:CE16").Select
End Sub
をボタンで実行しています。
これを「A1」(仮)に入力すると「とじる」、空白なら「ひらく」にしたいのです。
No.1
- 回答日時:
シートタブを右クリックして「コードの表示」で開いた画面に下記を記入してください。
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
'スイッチに使うセル名を絶対参照($A$1)で記入
If Target.Address = "$C$3" Then
If Target.Value = "" Then
'セルが空白の場合、A列を表示
Columns("A:A").EntireColumn.Hidden = False
Else
Columns("A:A").EntireColumn.Hidden = True
End If
End If
Application.EnableEvents = True
End Sub
この回答への補足
ご回答有難うございます。
書き方を間違っていたので訂正します。
「列」ではなく「行」でした。
実際には、
Sub とじる1()
Rows("25:25").Select
ActiveWindow.SmallScroll Down:=6
Range("25:25,32:32,38:38").Select
Range("A38").Activate
ActiveWindow.SmallScroll Down:=6
Range("25:25,32:32,38:38,45:45").Select
Range("A45").Activate
ActiveWindow.SmallScroll Down:=9
Range("25:25,32:32,38:38,45:45,52:52").Select
Range("A52").Activate
ActiveWindow.SmallScroll Down:=6
Range("25:25,32:32,38:38,45:45,52:52,59:59").Select
Range("A59").Activate
ActiveWindow.SmallScroll Down:=12
Range("25:25,32:32,38:38,45:45,52:52,59:59,66:66").Select
Range("A66").Activate
ActiveWindow.SmallScroll Down:=6
Range("25:25,32:32,38:38,45:45,52:52,59:59,66:66,70:70,74:74").Select
Range("A74").Activate
ActiveWindow.SmallScroll Down:=12
Range("25:25,32:32,38:38,45:45,52:52,59:59,66:66,70:70,74:74,78:78,85:85"). _
Select
Range("A85").Activate
ActiveWindow.SmallScroll Down:=3
Selection.EntireRow.Hidden = True
ActiveWindow.SmallScroll Down:=-69
Range("AL15:CE16").Select
End Sub
と
Sub ひらく1()
ActiveWindow.SmallScroll Down:=3
Rows("21:87").Select
Selection.EntireRow.Hidden = False
Range("AL15:CE16").Select
End Sub
をボタンで実行しています。
これを「A1」(仮)に入力すると「とじる」、空白なら「ひらく」にしたいのです。
ご回答いただいたコードを行に変えてやってみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- Excel(エクセル) 【マクロ】リボン、行列、数式・ステータスバを非表示に 4 2022/12/12 07:32
- Excel(エクセル) Excelでnullになるような式のセルをマクロで空白行と認識させるにはどうすればいいですか? 3 2023/03/13 13:42
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2023/01/20 14:36
- Excel(エクセル) ExcelのVBAコードについて教えてください。 1 2022/06/20 09:22
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- Excel(エクセル) セルによって印刷するシートを変える方法 EXCEL-VBA 2 2022/08/01 20:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル初心者です 関数の入れ...
-
【関数】先頭だけにある、半角...
-
エクセル 白黒印刷で白線を印刷...
-
Excelのチェックボックスの使い...
-
【関数】適切な文字数の数字を...
-
Excelのpivotについて質問です
-
Excel ピボットテーブルで日付...
-
LOOKUP関数を使えばいいのでし...
-
エクセル関数を教えてください
-
エクセルのセルに同じ大きさの...
-
UNIQUE関数が使えないバージョ...
-
excelの不要な行の削除ができな...
-
エクセルで「-0.0」と表示さ...
-
時間によってファイル名が変わ...
-
WPS OFFICEでの縦書きについて
-
エクセルの関数について教えて...
-
Aというブックの1というシート...
-
【マクロ】シート名を取得する...
-
VBA Private Sub Worksheet_Cha...
-
VBA、Excelのworkbook.open に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報