Excel VBA質問箱 IV

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

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


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

【31126】質問です。 らんらん 05/11/11(金) 22:17 質問[未読]
【31127】Re:質問です。 Kein 05/11/11(金) 22:32 回答[未読]
【31128】Re:質問です。 らんらん 05/11/11(金) 22:52 質問[未読]
【31131】Re:質問です。 Kein 05/11/11(金) 23:04 発言[未読]
【31132】Re:質問です。 Kein 05/11/11(金) 23:09 発言[未読]
【31133】Re:質問です。 らんらん 05/11/11(金) 23:19 お礼[未読]

【31126】質問です。
質問  らんらん  - 05/11/11(金) 22:17 -

引用なし
パスワード
   VBAの質問です。
ワークシートがSheet1からSheet3まであるときにSheet4を追加したいのですが、そのときすでにSheet4が作成された後であればSheet4を作らないようにしたいと思っています。そのときにすでにSheet4が作られているかを確認できる方法を教えていただけませんか?
例えば、
もしSheet4がなければシートの作成を呼び出してSheet4を作成する
もしSheet4があればSheet4を消してシートの作成を呼び出す
ということをしたいのですが、わかる方教えてください。お願いします。

【31127】Re:質問です。
回答  Kein  - 05/11/11(金) 22:32 -

引用なし
パスワード
   Sub S_ADD()
  Dim Sh As Worksheet

  Application.DisplayAlerts = False
  On Error Resume Next
  Set Sh = Worksheets("Sheet4")
  If Err.Number = 0 Then
   Sh.Cells.Clear: Sh.Activate
  Else
   Worksheets.Add(After:=Worksheets("Sheet3")) _
   .Name = "Sheet4"
   Err.Clear
  End If
  On Error GoTo 0: Set Sh = Nothing
  Application.DisplayAlerts = True
End Sub

というようなコードになります。
>もしSheet4があればSheet4を消してシートの作成を呼び出す
というやり方は、同じシート名のものを削除してからまた挿入する、という無駄が
あるので、単に全てのセルをクリアして使いまわすようにすれば良い、ということです。
 

【31128】Re:質問です。
質問  らんらん  - 05/11/11(金) 22:52 -

引用なし
パスワード
   お返事ありがとうございます。
今実際にプログラムを実行してみたらうまくいったのですが、初心者なのでコードの意味が少しわかりにくいので、できれば少し解説していただけたらうれしいのですがよろしいですか?

【31131】Re:質問です。
発言  Kein  - 05/11/11(金) 23:04 -

引用なし
パスワード
   Sub S_ADD()
  Dim Sh As Worksheet

  Application.DisplayAlerts = False
  'Excelが自動的に出すメッセージを出させなくする

  On Error Resume Next
  'これ以降にエラーが発生したとき、デバッグせずに次の行に移る

  Set Sh = Worksheets("Sheet4")
  'オブジェクト変数に Sheet4 を格納しようとする

  If Err.Number = 0 Then
  'もしエラーが出なかったら
  '(つまり実際に Sheet4 が存在したことを証明したことになる)

   Sh.Cells.Clear: Sh.Activate
   'Sheet4 の全セルをクリアし、アクティブにする

  Else
  'エラーが出ている場合は(存在しなければ Set Sh 〜 がエラーになる)

   Worksheets.Add(After:=Worksheets("Sheet3")) _
   .Name = "Sheet4"
   '新規シートを Sheet3 の後ろに挿入し、Sheet4 と名前を付ける

   Err.Clear
   'これは無くてもいいけど、いちおうエラー値を 0 にしている

  End If
  On Error GoTo 0: Set Sh = Nothing
  'エラートラップを解除し、変数とオブジェクトの関係を断つ

  Application.DisplayAlerts = True
  '最後にメッセージが普通に出せるように、設定を元に戻す
End Sub

・・ということになりますが、理解されましたか ?

【31132】Re:質問です。
発言  Kein  - 05/11/11(金) 23:09 -

引用なし
パスワード
   あー・・すいません。
>Application.DisplayAlerts = False
>Application.DisplayAlerts = True
↑のコードは、無くても結構でした。シート削除を頭に置いていたので、つい
それをした時に出てくるメッセージを出させなくすることを考えていたのでした。
なんせExcelが自動的に出すメッセージと言えども、そこでコードが止まって
しまうのは困りますから、ちょっと神経質になっていたようです。

【31133】Re:質問です。
お礼  らんらん  - 05/11/11(金) 23:19 -

引用なし
パスワード
   どうもありがとうございました。
とっても丁寧な解説でよくわかりました。
またわからないことがあれば質問させていただきたいのでその時はよろしくお願いします。

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