プロが教えるわが家の防犯対策術!

仕事で使っている書式で、A1に「あいうえお」と入力すると、A2「あ」、B2「い」、C2「う」、D2「え」、E2「お」とMID関数で振り分け、入力後、A行を「表示しない」と「再表示」するマクロをボタンで実行するようにしています。

そこで、

この書式には必ず入力しなければならない項目があるので(非表示しない行のセル)、この項目に入力したら行の非表示マクロを実行し、空白なら行の再表示マクロを実行出来るようにしたくて調べているのですが見つかりません。

1クリックの手間を省く方法をご存知の方ご教示ください。
宜しくお願いします。

A 回答 (4件)

記録マクロで作られた物ですね。


下記のようにしてください。


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
    • good
    • 0
この回答へのお礼

記録マクロというのですか。
ずいぶん長いコードだったのがすんごく短くなったのにしっかり結果が出て、すごいです。

別の書式では、列を非表示にする記録マクロをつくって実行したところ結合したセルまで非表示になってしまって諦めていたのですが、最初に教えていただいたコードではそのようなことがなく使えるのでどちらも使わせていただきます。

ありがとうございました。

お礼日時:2005/10/01 20:18

こんにちは。

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
    • good
    • 0
この回答へのお礼

ほんとうにすごいです。

要求どおりの結果が出ました。しっかり使わせていただきます。

VBAは神の領域でしたがこれを期に少し勉強してみようかな。

ありがとうございました。

お礼日時:2005/10/01 20:28

こんにちは。



私は、設問を何度も何度も読み返してみましたが、意味が良くわかりません。
それとも、私の読み違えなのかもしれません。

>入力後、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」(仮)に入力すると「とじる」、空白なら「ひらく」にしたいのです。

補足日時:2005/09/30 12:37
    • good
    • 0

シートタブを右クリックして「コードの表示」で開いた画面に下記を記入してください。



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」(仮)に入力すると「とじる」、空白なら「ひらく」にしたいのです。

ご回答いただいたコードを行に変えてやってみます。

補足日時:2005/09/30 12:38
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!