Excel VBA質問箱 IV

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

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


40922 / 76735 ←次へ | 前へ→

【40902】Re:集計表について'
お礼  kobasan  - 06/7/25(火) 22:45 -

引用なし
パスワード
   ichinose さん こんばんは。

>CollectionのItemに直接配列などを指定すると
>書き換えが出来ないため、Removeして再度 Addしなければなりません。

初めて、Collectionで集計しようとすると、まず、この部分で引っかかりましたね。
それで、やむなく、Removeして再度 Addすることに気づいたわけですが、
Collectionの登録順が狂うのも分って、いやでしたが、とりあえず集計させるのが先決
でした。
「Removeして再度 Addすること」の部分はもっと、スマートな方法がないかと思っていました。


>Itemとしてクラスで定義したオブジェクトを登録します。
>こうすると、オブジェクトのプロパティは変更ができます。

この方法、今回勉強させてもらいました。


ichinoseさんのコードを見て、
まず私のコードで、!!vnt(i, 1)!!のところは、CStr(vnt(i, 1))に
直さなければいけないことが分りました。訂正しておきます。

私がやっている仕事程度では、データ数が少ないので、これでも使用に耐えます。
Collectionを使いはじめの人にとっては、分りやすいかな?と思ったりしています。

  On Error Resume Next
  For i = 1 To UBound(vnt, 1)
    'Collectionにkey ,Itemを追加
    MyColl.Add Item:= _
      Array(vnt(i, 1), vnt(i, 2), vnt(i, 3), vnt(i, 4), _
      vnt(i, 5), vnt(i, 6), vnt(i, 7)), key:=!!vnt(i, 1)!!
    If Err.Number <> 0 Then
      '重複のとき
      a = MyColl(!!vnt(i, 1)!!)
      MyColl.Remove !!vnt(i, 1)!!
      a(4) = a(4) + vnt(i, 5)  '集計
      a(5) = a(5) + vnt(i, 6)
      a(6) = a(6) + vnt(i, 7)
      MyColl.Add Item:=a, key:=!!vnt(i, 1)!!
    End If
    Err.Number = 0
  Next
  On Error GoTo 0

==============================

ichinoseさんのコードで、

  On Error Resume Next '
  Set col = New Collection
  For i = 1 To UBound(vnt, 1)
    Err.Clear
    Set chk_exsist = col(CStr(vnt(i, 1)))  <===A
    If Err.Number <> 0 Then
     Set cls = New Class1
     With cls          <==============B    
      .myarray(0) = vnt(i, 1)
      .myarray(1) = vnt(i, 2)
      .myarray(2) = vnt(i, 3)
      .myarray(3) = vnt(i, 4)
       End With
     col.Add cls, CStr(vnt(i, 1))
     End If
    With col(CStr(vnt(i, 1)))   <==============C
     .myarray(4) = .myarray(4) + vnt(i, 5)
     .myarray(5) = .myarray(5) + vnt(i, 6)
     .myarray(6) = .myarray(6) + vnt(i, 7)
     End With
  Next i

の部分のC,Bは、よく見ると、私には、結構時間をかけて、理解しないと行けない部分ですね。(クラスモジュールの方はわかるのですが、標準モジュールで使いまわすのが・・)

この部分が、

>Itemとしてクラスで定義したオブジェクトを登録します。
>こうすると、オブジェクトのプロパティは変更ができます。

にあたるのかな。

Aの部分は、なるほどですね。

今回もたくさん勉強うさせてもらいました。やっぱり投稿してみるもんですね。
また、何かありましたら、よろしくお願いします。有難うございました。

0 hits

【40478】集計表について サン 06/7/14(金) 15:14 質問
【40490】Re:集計表について kobasan 06/7/14(金) 22:25 回答
【40568】Re:集計表について サン 06/7/18(火) 12:16 お礼
【40652】Re:集計表について kobasan 06/7/19(水) 18:48 回答
【40662】Re:集計表について サン 06/7/20(木) 9:55 お礼
【40732】Re:集計表について サン 06/7/21(金) 16:53 質問
【40739】Re:集計表について kobasan 06/7/21(金) 20:43 回答
【40747】Re:集計表について ichinose 06/7/22(土) 8:13 発言
【40755】Re:集計表について kobasan 06/7/22(土) 18:44 発言
【40759】Re:集計表について ichinose 06/7/23(日) 11:20 発言
【40825】Re:集計表について' kobasan 06/7/24(月) 20:16 発言
【40834】Re:集計表について' ichinose 06/7/24(月) 23:12 発言
【40902】Re:集計表について' kobasan 06/7/25(火) 22:45 お礼
【40782】Re:集計表について サン 06/7/24(月) 10:04 お礼
【40491】Re:集計表について Kein 06/7/14(金) 22:31 回答
【40569】Re:集計表について サン 06/7/18(火) 12:24 お礼
【40632】Re:集計表について Kein 06/7/19(水) 14:22 回答
【40633】Re:集計表について サン 06/7/19(水) 14:28 お礼

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