Excel VBA質問箱 IV

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

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


19015 / 76734 ←次へ | 前へ→

【63156】Re:全シートを統合したいです
発言  kanabun  - 09/10/11(日) 11:07 -

引用なし
パスワード
   ▼まこっちゃん さん:

>現在、シートが100位あって、各シートには合計はなく、商品もランダムに記載されてます。
>B列には数値化された商品名、C列には数量が下記のように記載されています

>また1行目からデータが記載してあり行数は最大で5000行です

一般機能に その名も「統合」という機能がありますから、これを
使ってみてはいかがでしょう。

たとえば、対象Bookに 統合用シートを追加し
シート名をたとえば「統合」としておいて、
「Sheet1」と「Sheet2」に 提示のような元表があるとして、この
2枚のシートを メニュ−[データ]-[統合...]
から統合する操作のマクロ記録をとってみると、以下のようになります。

Option Explicit

Sub Macro1()
' マクロ記録日 : 2009-10-11 ユーザー名 : kanabun
'
  Sheets("統合").Activate
  Range("A1").Select
  Selection.Consolidate Sources:=Array("[Book1]Sheet1!R1C2:R6C3", _
    "[Book1]Sheet2!R1C2:R6C3"), Function:=xlSum, TopRow:=False, LeftColumn:= _
    True, CreateLinks:=False
End Sub
'これはマクロ記録にあるとおり、統合先の先頭セルをアクティブにしておいて、
統合元範囲のリストに 各シートのB,C列範囲を設定し、
>また1行目からデータが記載してあり
ということなので、【統合の基準】CheckBoxの「上端行(T)」のチェックを外し
て、集計の方法「合計」で 統合をかけたことを表しています。

> シートが100位あって、
ということなので、手操作で 100回も各シートの範囲を指定するのは大変なので、
上のマクロ記録を もすこし汎用的に使えるように修正します。
ポイントは対象Bookの「統合」シートを除くすべてのシートをループして
データ範囲のアドレス(xlR1C1形式)を配列に格納していることです。
実際に統合する部分は Array... の部分を この配列変数に替えるだけで、
マクロ記録がそのまま使えます。

>  For Each ws In ActiveWorkbook.Worksheets
>    If Not ws Is wsT Then  'ws が 「統合」シートでなかったら
>      '範囲アドレスを配列に追加する

Sub Try1_統合()
  Dim ws As Worksheet
  Dim wsT As Worksheet
  Dim Ranges() As String, n As Long
  Set wsT = ActiveWorkbook.Worksheets("統合")
  For Each ws In ActiveWorkbook.Worksheets
    If Not ws Is wsT Then
      n = n + 1
      ReDim Preserve Ranges(1 To n)
      With ws
        Ranges(n) = .Range("B1", .Cells(.Rows.Count, 3).End(xlUp)) _
               .Address(, , xlR1C1, True)
      End With
    End If
  Next
  With wsT
    .UsedRange.ClearContents
    .Range("A1").Consolidate Sources:=Ranges, Function:=xlSum, _
              TopRow:=False, LeftColumn:=True
  End With
End Sub

ただ、100枚ものシートに統合をかけるとなると一呼吸かかるかもしれません。
そういう場合は Dictionaryオブジェクトというものを利用して、
端からVBAでやると高速処理できるでしょう。

4 hits

【63126】全シートを統合したいです まこっちゃん 09/10/9(金) 21:01 質問
【63131】Re:全シートを統合したいです Stich 09/10/10(土) 10:42 質問
【63138】Re:全シートを統合したいです まこっちゃん 09/10/10(土) 13:14 発言
【63154】Re:全シートを統合したいです Stitch 09/10/11(日) 7:04 回答
【63156】Re:全シートを統合したいです kanabun 09/10/11(日) 11:07 発言
【63159】Re:全シートを統合したいです まこっちゃん 09/10/11(日) 19:59 お礼

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