重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

A列にYesかNo
B列に名前
が入力されています。
A列がYesだったら、B列の名前を付けたシートを作成したいです。
下記のコードを実行すると、ひとつ目のYesはシートが作成されるのですが、
ふたつ目以降は追加されずに終わってしまいます。
どうしたら良いのでしょうか。
シート名の重複はチェックしています。


Sub シート追加()
Dim i As Long
For i=2 to 11
If Cells(i,"a")="Yes" Then
Worksheets.Add.Name = Cells(i,"b").Value
End if
Next
End Sub

  • 画像を添付する (ファイルサイズ:10MB以内、ファイル形式:JPG/GIF/PNG)
  • 今の自分の気分スタンプを選ぼう!
あと4000文字

A 回答 (1件)

こんにちは



ご提示のコードのように
 > Cells(i,"a")
という記述法の場合、暗黙的にアクティブなシートのセルを意味します。

実行した際に、一つ目のシートを追加すると追加されたシートがアクティブになっていますよね?
ですので、ループの次からは追加されたシートのセルを読みに行きます。
(追加されたシートは新しいので、何も記入されていません)
これにより、
 >ふたつ目以降は追加されずに終わってしまいます。
ということになります。

>どうしたら良いのでしょうか。
参照するデータのあるシートを固定するようにすれば良いでしょう。
具体的には、省略形で Cells(i,"a") のような指定をせずに、シートから指定するとか、あるいは、最初にRangeオブジェクトを取得しておいて、そこからの相対位置でセルを参照するなどの方法にすれば、同じシートの連続セルを参照することができるでしょう。
    • good
    • 0
この回答へのお礼

ありがとう

そういうことなんですね!
分かりやすく教えていただきありがとうございました。
シートを指定するようにしたら、できました!!!

お礼日時:2025/05/22 13:39

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