アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記は、エクセルのVBAアプリで、ボタンを押すと、B1~B20に記載されている
文字列の名前でシートを順次作成する、という処理です。

Sub シートコピー()
Dim trgt As Range
For Each trgt In Worksheets("abc").Range("B1:B20")
Worksheets.Add After:=Worksheets(1)
ActiveSheet.Name = trgt.Value

しかし、ボタンを2回押すと、すでにシートが存在するので当然エラーになります。
if文で、「シートがすでに存在しないなら」を付け加えたいのですが、
どうしたらいいでしょうか?

質問者からの補足コメント

  • うーん・・・

    もう1点書き忘れました。
    Range("B1:B20")の部分ですが、「B列で空白が出てくるまで」
    という処理も追加したいです。

      補足日時:2016/09/25 22:58

A 回答 (1件)

例えば、こんなスタイルはいかがでしょうか?



Sub シートコピー()
 Dim trgt As Range
 Dim dum As Variant  'ダミーの意味
 On Error Resume Next
 For Each trgt In Worksheets("abc").Range("B1:B20")
  If trgt.Value = "" Then Exit For '空白があったらループは終わり
  dum = Worksheets(trgt.Value).Name 'シート名が返らないならシートを作る
  If dum = "" Then
   Worksheets.Add After:=Worksheets(1)
   ActiveSheet.Name = trgt.Value
  End If
  dum = ""
Next trgt
On Error GoTo 0
End Sub
    • good
    • 0
この回答へのお礼

遅くなってしまい申し訳ありません。
うまくいきました!
ご親切にありがとうございました。m(_ _)m

お礼日時:2016/10/04 23:20

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