- ベストアンサー
シートの再表示について
いつも知恵を貸して頂きありがとうございました。 またまた、お知恵を拝借させて頂きたいのですが、 現在、5つのシートを作成しているとします。 通常は1つのシートだけを表示して、 残りの4シートは非表示にしたとします。 この時に、指定のセルにデータが入力されたら、 自動的にシートを表示させる方法って無いでしょうか? 入力フォームの最後の行に入力されたら、 自動で次のフォームが出てくるブックを作りたいです。 宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.1です。 >例えば、Sheet1のA1にデータが表示されたら、 >Sheet2を再表示し、Sheet2のA1にデータが表示されたら、 >Sheet3を開くといった具合です。 >また、セルには関数を入力しており、 >返す値がない場合には空白を表示するようにしています。 に関して・・・ 数式によって表示されている場合はChangeイベントは使えませんので別の方法です。 Sheet名はSheet1・Sheet2・Sheet3・・・となっているとします。 それぞれのシートモジュールにコツコツコードを記載するのが間違いないと思います。 まずSheet1のシートモジュールに Private Sub Worksheet_Calculate() If Range("A1") <> "" Then Worksheets("Sheet2").Visible = True End If End Sub 次にSheet2のシートモジュールに Private Sub Worksheet_Calculate() If Range("A1") <> "" Then Worksheets("Sheet3").Visible = True End If End Sub のようにSheet2~最終Sheetの一つ前のシートモジュールにコードを記載すれば A1セルに空白以外のデータが表示された場合に、次のSheetが表示されます。 >あと、非表示のコードも書いて頂いているのですが、 >どのような条件で非表示になるのでしょうか? これは何かの変化で実行されるコードではなく、ご自身でマクロを実行する必要があります。 標準モジュールに前回のコードがあるとすると Alt+F8キー → マクロ → マクロ実行です。 この操作はSheet1以外のSheetを非表示にしたいときにご自身で操作してください。m(_ _)m
その他の回答 (3)
- keithin
- ベストアンサー率66% (5278/7941)
あなたのご相談は「指定のセルにデータを入力したら」です。数式のお話じゃありませんでしたね。 あなたの「具体的な」エクセルの内容が何一つご相談に書かれていないので、 >該当するセルには関数を入れている状態で、 >返す値がない場合には空白を返して、返す値がある場合には数字を表示するようにしています。 >この場合には、どのようにコードを変更したらよいでしょうか? 問題の数式セルの計算結果が数字になったり空白になったりする時には、かならず対応するどこかのセルに手で何かを記入したり消したりしてるハズですよね。 あなたが見てる数式セルじゃなく、その数式セルの表示を出したり消したりする入力セルをチェックするよう、回答したマクロを書き換えてください という答えしか返すことができません。 #参考【二度手間三度手間は御免なので、下記を参考にして自力で適切に応用してください】 「具体的な」エクセルの説明とは、こういう事です: シート1のA列に何かを記入すると、B列の上から下までずらっと埋めてある数式が数字を計算する A列のデータを消去するとB列が空白になる →マクロでヤリタイ事は、結局こういう事になります シート1のA列最終行にデータを入力すると、該当のB列の数式が数字を表示するので、その時にシート2を表示する 手順: シート1のシート名タブを右クリックしてコードの表示を選ぶ 現れたシートに記入されている内容を全て消去する 改めて下記をコピー貼り付ける private sub Worksheet_Change(byval Target as excel.range) if target.column <> 1 then exit sub worksheets("Sheet2").visible = (target.row = range("A65536").end(xlup).row) end sub ファイルメニューから終了してエクセルに戻る ↓ シート1のA列最終行にデータを記入するとシート2が表示される
お礼
私の説明不足で気を悪くされたようですみません。 ありがとうございました。
- keithin
- ベストアンサー率66% (5278/7941)
シート1のシート名タブを右クリックしてコードの表示を選ぶ 現れたシートに下記をコピー貼り付ける private sub Worksheet_Change(byval Target as excel.range) worksheets("Sheet2").visible = (target.row = range("A65536").end(xlup).row) end sub ファイルメニューから終了してエクセルに戻る >指定のセルにデータが入力されたら、 >自動的にシートを表示させる シート1のA列最終行にデータを入力するとシート2を表示する
お礼
回答頂きありがとうございます。 セルに関数を入れていない状態では、 問題なく表示されました。 ただ、該当するセルには関数を入れている状態で、 返す値がない場合には空白を返して、返す値がある場合には数字を表示するようにしています。 この場合には、どのようにコードを変更したらよいでしょうか? また、該当するセルの表示が消えたら、 自動的にシートを非表示にしたいのですが、 それも可能でしょうか?
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! >入力フォームの最後の行に入力されたら、 >自動で次のフォームが出てくるブックを作りたいです。 の部分が具体的にどのようにしたいのか判らないので、 とりあえずSheet1のA1セルにデータ入力があれば、すべてのSheetを「再表示」にする! というコードです。 Sheet1のシートモジュールとして↓のコードをコピー&ペーストしてA1セルにデータを入力してみてください。 Private Sub Worksheet_Change(ByVal Target As Range) Dim k As Long If Target.Address = "$A$1" Then For k = 1 To Worksheets.Count Worksheets(k).Visible = True Next k End If End Sub 尚、非表示の操作も必要になると思いますので余計なお世話かもしれませんが、 Sheet名が「Sheet1」以外の場合のSheetを非表示にするコードです。 標準モジュールとしてコピー&ペーストしてください。 Sub Sheet非表示() Dim k As Long For k = 1 To Worksheets.Count If Worksheets(k).Name <> "Sheet1" Then '←「Sheet1」は常に表示しておきたいシート名に! Worksheets(k).Visible = False End If Next k End Sub ※ 再表示のコードのセル番地は実状に合わせて適宜変更してください。m(_ _)m
お礼
回答頂きありがとうございます。 情報提供不足で申し訳ございません。 開きたいシートは1つずつで、 一気に全てのシートを開くわけではありません。 例えば、Sheet1のA1にデータが表示されたら、 Sheet2を再表示し、Sheet2のA1にデータが表示されたら、 Sheet3を開くといった具合です。 また、セルには関数を入力しており、 返す値がない場合には空白を表示するようにしています。 なので、関数が入っていても、 値が入っていなければ、Sheetは再表示されないコードがあれば 教えて頂きたいです。 あと、非表示のコードも書いて頂いているのですが、 どのような条件で非表示になるのでしょうか? 標準モジュールにコピペしても非表示にならなかったので、 何か条件があるのであれば、そちらも教えて頂きたいです。 よろしくお願いします。
お礼
回答頂きありがとうございました。 私の説明不足で気を悪くされた方も居たのに、 細かく教えてくださり、本当に助かりました。 早速、このコードを使ってファイルの作成をしようと思います。 本当にありがとうございました!