Excel VBA質問箱 IV

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

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


24203 / 76732 ←次へ | 前へ→

【57880】Re:データ集計の方法
発言  kanabun  - 08/9/18(木) 21:47 -

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

参考まで、Dictionaryを使ったサンプルです。
ちょっと工夫したのは
「NAME + BUSHO + CODE + TYPE」 を連結してキー文字列を作り出す方法です。
上の4列をCopyすると、クリップボードに Tab区切りのテキストとして格納さ
れますから、これをDataObject経由で取得し、各行のKeyとして 使っています

Sub Try1()
 Dim rv()
 Dim r As Range
 Dim dKeys, hdr, vv
 Dim i&, j&, k&, kk&
 Dim ss$
 Dim dic As Object
 Const CLSID_DataObject = "1C3B4210-F441-11CE-B9EA-00AA006B1A69"
 
 Set dic = CreateObject("Scripting.Dictionary")
 With Worksheets("data")
   Set r = .Range(.[A2], .[A65536].End(xlUp)) 'A列データ範囲
   ReDim rv(1 To 6, r.Rows.Count)
   hdr = .[A1].Resize(, 6).Value
   For j = 1 To 6
     rv(j, 0) = hdr(1, j)
   Next
 End With
 vv = r.Resize(, 6).Value
 r.Offset(, 1).Resize(, 4).Copy   '「NAME BUSHO CODE TYPE」列を
 With GetObject("new:" & CLSID_DataObject)  'クリップボードへ送り
   .GetFromClipboard
   dKeys = Split(.GetText(1), vbCrLf)    '結合文字列を作成
   Application.CutCopyMode = True
 End With
 For i = 1 To UBound(vv)
   ss = dKeys(i - 1)
   If dic.Exists(ss) Then
     k = dic(ss)
   Else
     kk = kk + 1         'はじめてのKeyのときは
     dic(ss) = kk        '配列内の行番号を決め
     k = kk
     For j = 1 To 5       '配列に1〜5列のデータを転記
       rv(j, k) = vv(i, j)
     Next
   End If
   rv(6, k) = rv(6, k) + vv(i, 6) 'k番目のKey data 集計
 Next
 Set dic = Nothing
 
' ReDim Preserve rv(1 To 6, kk)
 With Worksheets("data編集").[A1]
   .CurrentRegion.ClearContents
   .Resize(kk + 1, 6).Value = Application.Transpose(rv)
 End With
End Sub
0 hits

【57874】データ集計の方法 MIRURU 08/9/18(木) 16:06 質問
【57876】Re:データ集計の方法 kanabun 08/9/18(木) 16:52 発言
【57878】Re:データ集計の方法 Hirofumi 08/9/18(木) 20:08 回答
【57880】Re:データ集計の方法 kanabun 08/9/18(木) 21:47 発言
【57881】Re:データ集計の方法 kanabun 08/9/18(木) 21:59 発言
【57937】Re:データ集計の方法 MIRURU 08/9/22(月) 11:30 お礼

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