Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9722 / 13644 ツリー ←次へ | 前へ→

【25738】複数シートの参照 MLC 05/6/13(月) 13:24 質問[未読]
【25741】Re:複数シートの参照 小僧 05/6/13(月) 13:49 回答[未読]
【25778】Re:複数シートの参照 MLC 05/6/14(火) 11:24 お礼[未読]
【25779】Re:複数シートの参照 Kein 05/6/14(火) 11:32 発言[未読]
【25780】Re:複数シートの参照 小僧 05/6/14(火) 11:47 発言[未読]
【25781】Re:複数シートの参照 Kein 05/6/14(火) 13:04 発言[未読]
【25810】Re:複数シートの参照 MLC 05/6/15(水) 13:18 お礼[未読]
【25742】Re:複数シートの参照 Kein 05/6/13(月) 13:52 回答[未読]

【25738】複数シートの参照
質問  MLC E-MAIL  - 05/6/13(月) 13:24 -

引用なし
パスワード
   こんにちわ。
シートに2つの表が定位置にあり、このシートが複数あります。
やりたいのは2つの表を縦方向に並べ、さらに複数のシートを
一つに纏める作業です。大体は組めたのですが、
シート数はその時々によって違う為困ってます。
自動的にシート全てを読み込んで処理する方法はありますでしょうか?

Sheets("A").Activate
  Rows("29:31").Select
  Selection.Delete Shift:=xlUp

  ActiveWindow.LargeScroll ToRight:=-1
  Range("j3:q28").Select
  Selection.Cut
  Range("a29").Select
  ActiveSheet.Paste
  
  Sheets("B").Activate
  Rows("29:31").Select
  Selection.Delete Shift:=xlUp

  ActiveWindow.LargeScroll ToRight:=-1
  Range("j3:q28").Select
  Selection.Cut
  Range("a29").Select
  ActiveSheet.Paste
  
このようにA〜Zまでとその時々によって数量が
違うので、自動的にシートを全て読み込む処理
方法あればアドバイスお願いします。

【25741】Re:複数シートの参照
回答  小僧  - 05/6/13(月) 13:49 -

引用なし
パスワード
   ▼MLC さん:
こんにちは。

標準モジュールに以下のコードを貼り付けてイミディエトウィンドウで
確認してみて下さい。

Sub シート検索()
Dim Sht As Worksheet
  For Each Sht In ActiveWorkbook.Sheets
    With Sht
      'ここに処理が入ります
      Debug.Print .Name
    End With
  Next
End Sub

【25742】Re:複数シートの参照
回答  Kein  - 05/6/13(月) 13:52 -

引用なし
パスワード
   A〜Z という名前のシートの j3:q28 の範囲を、新しく追加した集計シートに縦に
並べる、というコードは

Sub Test()
  Dim i As Long
  Dim Sh As Worksheet

  On Error Resume Next
  Set Sh = Worksheets("集計")
  If Err.Number <> 0 Then
   Set Sh = Worksheets.Add(Before:=Worksheets(1))
   Sh.Name = "集計"
   Err.Clear
  End If
  For i = 65 To 90
   Worksheets(Chr(i)).Range("J3:Q28") _
   .Copy Sh.RAnge("A65536").End(xlUp).Offset(2)
  Next i
  On Error GoTo 0
  Set Sh = Nothing
End Sub 

【25778】Re:複数シートの参照
お礼  MLC E-MAIL  - 05/6/14(火) 11:24 -

引用なし
パスワード
   こんにちわ。
早速下記の通り組みましたが上手く機能しないです。
どこか問題あればご指摘お願いします。
Sub シート検索()
Dim Sht As Worksheet
  For Each Sht In ActiveWorkbook.Sheets
    With Sht

  Dim i As Long
  Dim Sh As Worksheet

  On Error Resume Next
  Set Sh = Worksheets("集計")
  If Err.Number <> 0 Then
   Set Sh = Worksheets.Add(Before:=Worksheets(1))
   Sh.Name = "集計"
   Err.Clear
  End If
  For i = 65 To 90
   Worksheets(Chr(i)).Range("J3:Q28") _
   .Copy Sh.RAnge("A65536").End(xlUp).Offset(2)
  Next i
  On Error GoTo 0
  Set Sh = Nothing

      Debug.Print .Name
    End With
  Next
End Sub

【25779】Re:複数シートの参照
発言  Kein  - 05/6/14(火) 11:32 -

引用なし
パスワード
       Debug.Print .Name
    End With
  Next

↑このコードは何ですか ? 私はこんな意味不明のコードを書いた覚えがありませんが。
これではエラーにならない方が不思議ですよ。

【25780】Re:複数シートの参照
発言  小僧  - 05/6/14(火) 11:47 -

引用なし
パスワード
   ▼MLC さん、 Kein さん:
こんにちは。

ちょっと噛み合ってないような気がするので確認です。

自分の提示した

>  For Each Sht In ActiveWorkbook.Sheets
>    With Sht
>      'ここに処理が入ります
>      Debug.Print .Name
>    End With
>  Next

は現在アクティブになったいるブックの全てのシートの名前を
イミディエトウィンドウに表示するコード、

Kein さんのご提示された

>  For i = 65 To 90
>   Worksheets(Chr(i)).Range("J3:Q28") _
>   .Copy Sh.RAnge("A65536").End(xlUp).Offset(2)
>  Next i

の部分は「Chr(65)…"A"」〜「Chr(90)…"Z"」までのシートに対して処理をするコードです。

と言う事で、

1) 「集計」という名前のシートを用意する。
2) 「集計」以外のシートに対して
3) 「Worksheets(Chr(i)).Range("J3:Q28") _
   .Copy Sh.RAnge("A65536").End(xlUp).Offset(2)」
  の様な処理をする。(そのままじゃだめですよ)

という感じの流れのコードになれば良いと思われます。

【25781】Re:複数シートの参照
発言  Kein  - 05/6/14(火) 13:04 -

引用なし
パスワード
   >「集計」以外のシートに対して
ですが、予めそのブックにはA〜Zという名前のシートのみがある、ということなら
問題ないですが、それ以外のシートもあるなら考慮しないといけません。よって私は
Chr(65)〜Chr(90)まで、ループでシートを指定するようにしたのですが・・。

【25810】Re:複数シートの参照
お礼  MLC  - 05/6/15(水) 13:18 -

引用なし
パスワード
   小僧さん、Keinさん
丁寧にアドバイスありがとうございます。なにせ素人で且つ
一人でやっているので、見当違いのこと聞いたりしてすいません。

.Copy Sh.RAnge("A65536").End(xlUp).Offset(2)の部分で出てくるA65536の指定の意味が分からず、どうこのマクロに当てはめて使うべきか見当がつかなくて・・・
すいません・・・・

9722 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free