• ベストアンサー

VBA 表示してあるシートのみ作業グループにしてC3に文字を記入。

VBA 表示してあるシートのみ作業グループにしてC3に文字を記入。 お世話になっております。 VBAにて表示してあるシートのみ作業グループにしてC3に文字を入れるマクロをくみたいのですが 作業グループのところが上手くいきません。 下記のコードに何を加えれば作業グループになるのでしょうか? *注意点* 1)作業グループにするシートはブックによって枚数が違います。 2)シートを非表示にしているものもあります。 宜しくお願い致します。 Worksheets.Select ActivateCells(1, 3).FormulaR1C1 = Format(Date, "m""月分")

質問者が選んだベストアンサー

  • ベストアンサー
  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

以下のようにされるとよいでしょう Sub macro() Dim C As Worksheet For Each C In Worksheets If C.Visible = xlSheetVisible Then C.Cells(1, 3).FormulaR1C1 = Format(Date, "m月分") End If Next C End Sub

loveless-05410
質問者

お礼

回答有難う御座います。 解決いたしました!

その他の回答 (4)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.5

ANo.2です。 #1さんの回答に1票入れたものの、一応コードの訂正と使用上の注意点を補足しようと思ったのですが、#4さんにコメントつけられていましたね。 フォローありがとうございます>#4さん 念のため記載しますが、コードは以下のように変えてください。 Cells(1, 3).Value = Format(Date, "m""月分") ↓ Cells(1, 3).Select ActiveCell = Format(Date, "m""月分") また、ブックにはグラフシート等の追加がないことが前提です。

loveless-05410
質問者

お礼

回答有難う御座います。 お手数お掛けしました。 解決いたしました!

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こういうマクロは、単なるテクニックのみにしか存在しません。ループしていれたところで、1秒の差ほどもないはずです。なお、 .Visible = True に余計なツッコミを入れたい人もいるとは思いますが、.Visible の戻り値がトライステート型であっても、True の、-1は変わりません。最後に、作業グループの外し方ですが、1 や Worksheets.Count は、引数には使うのは完全だといえません。最初や最後のシートが表示になっていたら、エラーが発生するはずです。それから、Sheets コレクションは使えません。グラフシートやDialogSheetなどがありますから、それに値を入れようとしたら、エラーが発生するはずです。 Sub TestMacro()  Dim i As Long  Dim j As Long  For i = 1 To Worksheets.Count   With Worksheets(i)    If .Visible = True Then     If j <= 0 Then j = .Index     .Select False    End If   End With  Next i  Cells(1, 3).Select  Selection = Format$(Date, "m月分")  Worksheets(j).Select End Sub シートをSelect した後に、ActiveSheetのセルをSelectしてから、値を入れます シートをSelect しただけでは、ActiveSheet しか入りません。

loveless-05410
質問者

お礼

回答有難う御座います。 解決いたしました!

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

あ、わざわざ表示シートを全部セレクト状態にする事もなかったですね。 No.1の答えに一票

loveless-05410
質問者

お礼

有難う御座います。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

表示となっているシートを探して、それらシートだけをセレクトして、Cellsを使って値を入れます。 Sub test01()   Dim sh As Worksheet   Dim sa() As Long '表示シート用配列   i = 0   For Each sh In Sheets     If sh.Visible = xlSheetVisible Then       ReDim Preserve sa(i)       sa(i) = sh.Index       i = i + 1     End If   Next sh   Sheets(sa).Select   Cells(1, 3).Value = Format(Date, "m""月分") End Sub

loveless-05410
質問者

お礼

回答有難う御座います。 お手数お掛けしました。 解決いたしました!

関連するQ&A