• ベストアンサー

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

  • VBAで文字を反映させると255文字の制限になってしまいます。

    VBAで文字を反映させると255文字制限に引っかかってしまいます。 最大で700文字程度反映できるようにしたいのですが、どのように設定すればよろしいでしょうか? 現在、 Worksheets("sheet1").Cells(47, 42).FormulaR1C1 = Worksheets("sheet2").Cells([i] + 2, 43).FormulaR1C1 とこのように設定しています。 コードを区切ってしまえばきちんと表示させることができるのですが、変数を使って繰り返し表示させようと思っているので区切らないほうが理想です。 すべてのコードは長めです。 教えてください。

  • EXCEL VBA(作業グループの解除)

    EXCEL VBAについての質問です。 複数のシートをコピーして別ブックに保存した後、元のブックが作業グループになってしまいます。 これを解除するコードを伝授いただけませんでしょうか? Sheets(Array("1", "2", "3")).Select Sheets(Array("1", "2", "3")).Copy

  • エクセルVBA 非表示シートがあるとエラー

    VBA初心者です。 エクセル2007を使用しております。 同一ブック内にある全てのシートで特定のマクロ(下記の例では×××)を実行するようにVBAマクロを個人用マクロブック上に作成しております。 Sub シート一括処理() Dim Sht As Worksheet For Each Sht In Worksheets Sht.Select Call ××× Next Sht End Sub ブック内に非表示シートがあった場合、エラーとなります。 ===================== 実行時エラー'1004' 'select'メソッドは失敗しました: ===================== 下記のような要件を満たすにはどのように修正すればよいでしょうか。 ・非表示シートに対しても、×××マクロは適応したい。 ・非表示シートは暫定的に表示してもよいが、最終的には非表示の状態にしたい。 よろしくお願いします。

  • Excel VBA 複数のSheet の合計

    Excel VBA  超超 初心者です。見よう見まねで、複数のSheet の L11:Q1000 ,T1:AW100 セル範囲にある文字 "~" を計算できたのですが、 更に各Sheet で計算された合計をしたいのですが、さっぱり判りません。Sheet 名は、バラバラです。合計は、最初か最後のsheet のどこかのセルに表示させたいです。どなたかヒントをてください。よろしくお願いします。 Sub すべてのシートでマクロ実行() Application.ScreenUpdating = False Dim シート As Worksheet For Each シート In Worksheets シート.Select Range("H3").Select ActiveCell.FormulaR1C1 = "=COUNTIF(R[8]C[4]:R[997]C[9],""*~*"")" Range("I3").Select ActiveCell.FormulaR1C1 = "=COUNTIF(R[-2]C[11]:R[997]C[40],""*~*"")" Range("I4").Select Next Application.ScreenUpdating = True End Sub

  • VBAのグループ化について

    VBAのグループ化について教えてほしいことがあります。 複数の行をグループ化していくVBAのコードがあるのですが、集計行を詳細データの上に表示させたいと思っています。 ただ作業がいくつものブックにわかれているので、一回一回コードを走らす前に、[アウトライン]-[詳細データの下]のチェックを外していくことになるのですが、これを手動でなく、VBAの方でできないでしょうか? 「できねーよ、バーカ」などの返信でも構いませんので、よろしくお願いします。

  • VBA シート名とセル位置の指定

    VBA(エクセル2007使用)にて、シート名とセルの位置を指定する場合の コードの書き方を教えて頂きたいです。 連続した置換をしたいと思っているのですが、 置換前・置換後の文字を上手く記載することができません。 やろうとしていることの詳細は以下でございます。 ■マクロ実行前の作業 (1)置換前・置換後の文字をエクセルに直接入力し、コピーする。 (2)置換対象範囲を選択しておく。 ■マクロで作業する内容 (3)新規シート(シート名”置換用")を追加し、(1)をA1に貼り付ける (4)置換前の文字の個数を数える(何回置換の作業が必要かを数える) (5)(2)の範囲内を置換していく ◇(5)の置換する作業の際に、別シートのセルを指定して置換していきたいのですが、   シート名とセルをどうのように記載すればよいかがわからず困っています。 かなり初歩的な質問かと思いますが、ご回答の程何卒宜しくお願い致します。 以下、作成したコードです。 -------------------------------------------------- Sub Macro4() '元のシートに戻るための宣言”Sh1” Dim Sh1 As Object Set Sh1 = ActiveSheet '置換用データ貼り付けシートの追加 Worksheets.Add(After:=Worksheets(Worksheets.Count)) _ .Name = Format("置換用") Sheets("置換用").Select '置換用データの張り付け Cells(1, 1).Select ActiveSheet.Paste '何回置換すればいいかの”KAISU” Dim KAISU As Long 'KAISU用の関数(単純に何個あるかカウント) Cells(1, 3).Select ActiveCell.FormulaR1C1 = "=COUNTA(R1C1:R100C1)" KAISU = Cells(1, 3) '元のシートに戻る Sh1.Select '置換開始 For i = 1 To KAISU '↓ここをきちんと指定できれば上手く行くのではと思っています。。。 Selection.Replace What:=(sheets("置換用")cells(i,1)), Replacement:=(sheets("置換用")cells(i,2)), LookAt:=xlWhole, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Next i End Sub

  • エクセルVBAでボタンを作ったシートとVBAを実行するシートを変えたい

    シート1にボタンを作成し、 そのボタンを押すと実行するVBAを作成しました。 そこで、VBAを実行するシートの指定はできるのでしょうか。 例えば、ボタンを押すと、 10行から20行まではシート2で実行させ、 30行から40行まではシート3で実行させたいと考えています。 可能でしょうか。 どうぞ宜しくお願いします。 *********************************************** 作成したVBA。ボタンはシート1にあります。 *********************************************** Private Sub CommandButton1_Click() *********************************************** ここからはシート2で実行させたい *********************************************** Range("E2").Select ActiveCell.FormulaR1C1 = "10" Range("E2").Select Selection.AutoFill Destination:=Range("E2:E101"), Type:=xlFillDefault Range("E2:E101").Select *********************************************** ここからはシート3で実行させたい *********************************************** Range("A2").Select ActiveCell.FormulaR1C1 = "100" Range("A2").Select Selection.AutoFill Destination:=Range("E2:E101"), Type:=xlFillDefault Range("A2:A101").Select End Sub

  • VBA 存在しないシートを選択した時にエラーメッセージを表示するには?

    マクロのコードに Sheets("AAA").Select と記述していますが、あるブックに対しマクロを実行したとき、AAAというシートがないときは、AAAというシートがないというダイアログを表示したいのですが、そのようなことが出来ますか? 存在しないシートを選択した時にエラーメッセージを表示するには?

  • VBA 別のシートから文字列参照して全て表示

    ExcelのVBAでSheet1のA3に5文字の文字列(大文字、小文字を区別しない)を入力してSheet2のC列にあるA3の文字列から始まるデータ(10文字以上)をすべてを参照してSheet2のD列を含めSheet1のA5,B5から下にすべて表示させる。 宜しくお願い致します。 Sub macro1() Dim V2 As Variant V1 = Sheets("sheet1").Cell("A3").Value '文字列を取得 V2 = Application.InStr(Sheets("sheet2").Range("C:C"), V1) '検索するテーブルでC列の文字列を探す 'みつけたら、その行、無かったら、エラーのコードが変数に入る If IsError(V2) Then 'テーブルに無かったらなにもしない Else str0 = Worksheets("Sheet2").Cells(V2, 7).Value str1 = Worksheets("Sheet2").Cells(V2, 8).Value str2 = Worksheets("Sheet2").Cells(V2, 9).Value Worksheets("sheet1").Cells(i, 2).Value = str0 Worksheets("sheet1").Cells(i, 3).Value = str1 Worksheets("sheet1").Cells(i, 4).Value = str2 End If End Sub

  • エクセルVBA全シートのC:C列のセルに色を

    Windows 6 64bit, Excel 2007 を使っています。 現在開いているブックのすべてのシートのC列(C:C)のセルに薄い緑をつけるマクロを考えていますが、どうしたらよいかわかりません。 開いているブックのすべてのシートをループさせて、書くシートのC:Cのセルを薄い緑にする、というのが流れだとは思うのですが・・・ 具体的なVBAの書き方をご存じの方、教えていただけないでしょうか。

専門家に質問してみよう