Excel VBA質問箱 IV

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

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


9979 / 13646 ツリー ←次へ | 前へ→

【24445】ファイル同士の集計方法 ポポ 05/4/22(金) 13:37 質問[未読]
【24446】Re:ファイル同士の集計方法 G-Luck 05/4/22(金) 13:45 発言[未読]
【24449】Re:ファイル同士の集計方法 ポポ 05/4/22(金) 13:57 質問[未読]
【24453】Re:ファイル同士の集計方法 G-Luck 05/4/22(金) 14:09 発言[未読]
【24456】Re:ファイル同士の集計方法 ポポ 05/4/22(金) 14:25 質問[未読]
【24459】Re:ファイル同士の集計方法 G-Luck 05/4/22(金) 14:40 発言[未読]
【24461】Re:ファイル同士の集計方法 ウッシ 05/4/22(金) 14:42 回答[未読]
【24466】Re:ファイル同士の集計方法 G-Luck 05/4/22(金) 14:55 発言[未読]
【24472】Re:ファイル同士の集計方法 ポポ 05/4/22(金) 16:40 お礼[未読]
【24462】Re:ファイル同士の集計方法 m2m10 05/4/22(金) 14:48 発言[未読]
【24471】Re:ファイル同士の集計方法 ポポ 05/4/22(金) 16:35 質問[未読]
【24448】Re:ファイル同士の集計方法 m2m10 05/4/22(金) 13:50 発言[未読]
【24451】Re:ファイル同士の集計方法 ポポ 05/4/22(金) 14:05 質問[未読]

【24445】ファイル同士の集計方法
質問  ポポ  - 05/4/22(金) 13:37 -

引用なし
パスワード
   はじめまして。
マクロは初心者で、自動記録にもっぱら頼りっぱなしです。
ここでは、色々と勉強させていただいております。
今日は初めて投稿します。

同じフォーマットのファイルがいくつかあり、そのファイルを集計しなくてはいけません。すごくたくさんあるのでマクロで出来たらいいなと思っています。
できれば、いろいろな方が見るファイルなので、どのパソコンでみてもエラーが出ないようしていきたいです。
なので、ファイルの名前を使ってマクロを組むのではなく、変数などでマクロが組めたら一番いいですね。

自分で自動記録でやってみて、編集したりしてみたんですが、デバックがでたりで、なかなか前に進めません。

フォルダにあるすべてのファイルを開くことは出来ましたが、集計がなかなか出来ません。
下にある同じようなレスを読んでもさっぱり分かりませんでした。
面倒ですが、丁寧に教えていただけませんでしょうか?
ご教示くださいませ。
よろしくお願いいたします。

【24446】Re:ファイル同士の集計方法
発言  G-Luck  - 05/4/22(金) 13:45 -

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

>自分で自動記録でやってみて、編集したりしてみたんですが、デバックがでたりで、なかなか前に進めません。

集計といってもいろいろなものがあると思いますので、
まずは、ご自分が書かれたプログラムを提示していただけないですか?

【24448】Re:ファイル同士の集計方法
発言  m2m10  - 05/4/22(金) 13:50 -

引用なし
パスワード
   どんな

 Excelブック名(共通の名前部分が有るのか、無いか)で
 シートの名前(シート数)
 集計したい ホーマット

  を どんな集計をしたいか
 
   等も必要ですね。

【24449】Re:ファイル同士の集計方法
質問  ポポ  - 05/4/22(金) 13:57 -

引用なし
パスワード
   ▼G-Luck さん:

ご指摘ありがとうございます。
そうですね、集計といっても色々ありますよね。

Set myWb32 = Workbooks(2).Worksheets(3)
Set myWb33 = Workbooks(3).Worksheets(3)
Set myWb34 = Workbooks(4).Worksheets(3)
Set myWb35 = Workbooks(5).Worksheets(3)
Set myWb36 = Workbooks(6).Worksheets(3)
Set myWb37 = Workbooks(7).Worksheets(3)

'各項目データ集計
Workbooks(1).Worksheets(3).Activate

Range("I7").Select
ActiveCell.Formula = myWb32.RC+ myWb33.RC + myWb34.RC + myWb35.RC + myWb36.RC+ myWb37.RC

With Range("I7").Select
  Selection.AutoFill Destination:=Range("I7:I42"), Type:=xlFillDefault
   Range("I7:I42").Select
  Selection.AutoFill Destination:=Range("I7:U42"), Type:=xlFillDefault
   Range("I7:U42").Select
End With

このマクロだと、ActiveCell.Fomulaの部分が黄色に塗られ、デバックが出ます。
With Rangeの部分は、正常に動きます。
フォローお願いいたします。

【24451】Re:ファイル同士の集計方法
質問  ポポ  - 05/4/22(金) 14:05 -

引用なし
パスワード
   ▼m2m10 さん:
ご丁寧にありがとうございます。
教える側に立って、スレを立てず、申し訳ございません。

> Excelブック名(共通の名前部分が有るのか、無いか)
ブックの名前は共通部分はありますが、すごく長いです。

> シートの名前(シート数)
シート数は、5枚。
名前は全部共通です。

> 集計したい ホーマット
A        WT    計画        
            実績        
        FT    計画        
            実績
        
B        WT    計画        
            実績        
        FT    計画        
            実績        

C        WT    計画        
            実績        
        FT    計画        
            実績        

合計        WT    計画        
            実績        
        FT    計画        
            実績        

全てのファイルが同じフォーマットです。
項目が多く、とてもややこしいです。

よろしくお願いいたします。

【24453】Re:ファイル同士の集計方法
発言  G-Luck  - 05/4/22(金) 14:09 -

引用なし
パスワード
   ▼ポポ さん:

順番に解決していきましょう。

> Workbooks(1).Worksheets(3).Activate
>
> Range("I7").Select
> ActiveCell.Formula = myWb32.RC+ myWb33.RC + myWb34.RC + myWb35.RC + myWb36.RC+ myWb37.RC

ここでは、何をしたいのですか?
RCとは何をイメージしています?

> With Range("I7").Select
>  Selection.AutoFill Destination:=Range("I7:I42"), Type:=xlFillDefault
>   Range("I7:I42").Select
>  Selection.AutoFill Destination:=Range("I7:U42"), Type:=xlFillDefault
>   Range("I7:U42").Select
> End With

ここは、I7をI7:U42にフィルしたいのであれば
Range("I7").AutoFill Destination:=Range("I7:I42"), Type:=xlFillDefault
Range("I7:I42").AutoFill Destination:=Range("I7:U42"), Type:=xlFillDefault
だけでいいですよ。

【24456】Re:ファイル同士の集計方法
質問  ポポ  - 05/4/22(金) 14:25 -

引用なし
パスワード
   ▼G-Luck さん:
>> Workbooks(1).Worksheets(3).Activate
>> Range("I7").Select
>> ActiveCell.Formula = myWb32.RC+ myWb33.RC + myWb34.RC + myWb35.RC + myWb36.RC+ myWb37.RC
>ここでは、何をしたいのですか?
>RCとは何をイメージしています?

ここでは、全て同じフォーマットのもので、同じ位置にあるセルの値を集計していきたいのです。
I7ならば、すべてのワークシート1にあるI7の値を加算したいのです。
RCはR1C1形式の”RC”なんですが、使い方が違うのでしょうか?

>ここは、I7をI7:U42にフィルしたいのであれば
>Range("I7").AutoFill Destination:=Range("I7:I42"), Type:=xlFillDefault
>Range("I7:I42").AutoFill Destination:=Range("I7:U42"), Type:=xlFillDefault
>だけでいいですよ。
そうなんですね。
ありがとうございます。
参考になります。

引き続きお願いいたします。

【24459】Re:ファイル同士の集計方法
発言  G-Luck  - 05/4/22(金) 14:40 -

引用なし
パスワード
   ▼ポポ さん:
>▼G-Luck さん:
>>> Workbooks(1).Worksheets(3).Activate
>>> Range("I7").Select
>>> ActiveCell.Formula = myWb32.RC+ myWb33.RC + myWb34.RC + myWb35.RC + myWb36.RC+ myWb37.RC
>>ここでは、何をしたいのですか?
>>RCとは何をイメージしています?
>
>ここでは、全て同じフォーマットのもので、同じ位置にあるセルの値を集計していきたいのです。
>I7ならば、すべてのワークシート1にあるI7の値を加算したいのです。
>RCはR1C1形式の”RC”なんですが、使い方が違うのでしょうか?

Formulaは、数式を入力する時に利用するのですが、少々ややこしくなるので、今回は値を入力するものとします。数式の方がいい場合は言ってください。

そうであるならば、せっかく上部で、ワークシートをセットしていますが、それを使わずに、ブックのIndexを有効に利用して

mySum = 0
For i = 2 to 7
  mySum = mySum + Workbooks(i).Worksheets(3).Range("I7").Value
Next i
Range("I7").Value = mySum

でどうでしょう?

【24461】Re:ファイル同士の集計方法
回答  ウッシ  - 05/4/22(金) 14:42 -

引用なし
パスワード
   こんにちは

  Workbooks(1).Worksheets(3).Range("I7").Formula _
    = "=" & myWb32.Range("I7").Address(0, 0, xlA1, True) & "+" & _
        myWb33.Range("I7").Address(0, 0, xlA1, True) & "+" & _
        myWb34.Range("I7").Address(0, 0, xlA1, True) & "+" & _
        myWb35.Range("I7").Address(0, 0, xlA1, True) & "+" & _
        myWb36.Range("I7").Address(0, 0, xlA1, True) & "+" & _
        myWb37.Range("I7").Address(0, 0, xlA1, True)

こんな感じですけど、Indexは使わない方がいいのでは?
「PERSONAL.XLS」とか有るとずれますし、
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=24429;id=excel
にも書いたのですがループして名前で判断してもいいですし。

あと、「Consolidate」(統合)も使えますのでリンク先見てみて下さい。

【24462】Re:ファイル同士の集計方法
発言  m2m10  - 05/4/22(金) 14:48 -

引用なし
パスワード
   有る程度解るみたいなので、
ファイルをオープンし、集計のサンプル。。
SUB ルーチングの 
 Sub m2m10_SUB(MyName) の部分を修正すれば、

 ファイルの数は関係有りません。


Public sh1 As Object
Public sh2 As Object
Public cnt As Integer

Sub DIR_Get()

 Dim MyPath As String, MyName As String
 Set sh1 = Workbooks(1)
 
 MyPath = ThisWorkbook.Path ' 参照のホルダーになります
 MyName = Dir(MyPath & "\*.xls")
 Do While MyName <> ""
   Workbooks.Open Filename:=MyPath & "\" & MyName
  
   Set sh2 = Workbooks(2)
   
   Call m2m10_SUB(MyName)
   sh2.Close
   MyName = Dir
 Loop
 End Sub
 
Sub m2m10_SUB(MyName)
 Dim 計 As Long
  計 = 0
 Dim WS As Worksheet

  For Each WS In sh2.Worksheets

  計 = sh2.Sheets(WS.Name).Range("B6") + 計 '******集計****

 Next

 cnt = 1 + cnt
 sh1.Sheets("Sheet1").Range("A" & cnt) = MyName
 sh1.Sheets("Sheet1").Range("b" & cnt) = 計


End Sub

【24466】Re:ファイル同士の集計方法
発言  G-Luck  - 05/4/22(金) 14:55 -

引用なし
パスワード
   ▼ウッシ さん:
個人的にお礼
「Consolidate」
すばらしい、これがうわさの串刺し計算ですね。
ブックをまたぐことも出来るのですね。
かなり応用が利きますね。

【24471】Re:ファイル同士の集計方法
質問  ポポ  - 05/4/22(金) 16:35 -

引用なし
パスワード
   ▼m2m10 さん:

ありがとうございます。

>SUB ルーチングの 
> Sub m2m10_SUB(MyName) の部分を修正すれば、
>
> ファイルの数は関係有りません。

どこを?って感じなんですが。
ファイルの数が関係ないのが、とっても嬉しいです。
だけど、もうすこし説明を加えていただきませんでしょうか?
お手数おかけしますがよろしくお願いいたします。

【24472】Re:ファイル同士の集計方法
お礼  ポポ  - 05/4/22(金) 16:40 -

引用なし
パスワード
   ▼ウッシ さん、G-LUCKさん:

串刺し計算って言うんですね。
ちょっとトライしてみます。
いろいろ親切に分かりやすく教えて頂きありがとうございました。

自分にあったマクロを探して、提出したいと思います。
ありがとうございました。

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