- ベストアンサー
VBA 表示してあるシートのみ作業グループにしてC3に文字を記入。
VBA 表示してあるシートのみ作業グループにしてC3に文字を記入。 お世話になっております。 VBAにて表示してあるシートのみ作業グループにしてC3に文字を入れるマクロをくみたいのですが 作業グループのところが上手くいきません。 下記のコードに何を加えれば作業グループになるのでしょうか? *注意点* 1)作業グループにするシートはブックによって枚数が違います。 2)シートを非表示にしているものもあります。 宜しくお願い致します。 Worksheets.Select ActivateCells(1, 3).FormulaR1C1 = Format(Date, "m""月分")
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
以下のようにされるとよいでしょう 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
その他の回答 (4)
- mt2008
- ベストアンサー率52% (885/1701)
ANo.2です。 #1さんの回答に1票入れたものの、一応コードの訂正と使用上の注意点を補足しようと思ったのですが、#4さんにコメントつけられていましたね。 フォローありがとうございます>#4さん 念のため記載しますが、コードは以下のように変えてください。 Cells(1, 3).Value = Format(Date, "m""月分") ↓ Cells(1, 3).Select ActiveCell = Format(Date, "m""月分") また、ブックにはグラフシート等の追加がないことが前提です。
お礼
回答有難う御座います。 お手数お掛けしました。 解決いたしました!
- Wendy02
- ベストアンサー率57% (3570/6232)
こういうマクロは、単なるテクニックのみにしか存在しません。ループしていれたところで、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 しか入りません。
お礼
回答有難う御座います。 解決いたしました!
- mt2008
- ベストアンサー率52% (885/1701)
あ、わざわざ表示シートを全部セレクト状態にする事もなかったですね。 No.1の答えに一票
お礼
有難う御座います。
- mt2008
- ベストアンサー率52% (885/1701)
表示となっているシートを探して、それらシートだけをセレクトして、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
お礼
回答有難う御座います。 お手数お掛けしました。 解決いたしました!
お礼
回答有難う御座います。 解決いたしました!