Excel VBA質問箱 IV

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

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


39905 / 76732 ←次へ | 前へ→

【41931】Re:データの集計方法について教えて下さい
発言  Ned  - 06/8/26(土) 10:56 -

引用なし
パスワード
   ▼jun さん:
>はぁ・・??
という表現はレス気なくす人もいますから気をつけたほうがいいですよ。
あとヨビステもね。や、冗談やけど^ ^

ほんとはScripting.Dictionaryの前に、配列について理解したほうが良いです。
Sub vntsample()
'yのmatchキーは手抜きでA列のみ
  Dim sh As Worksheet
  Dim i As Long
  Dim n As Long
  Dim v, w, x, y
  Set sh = Sheets("sheet2")
  sh.UsedRange.Clear
  With Sheets("sheet1").Range("A2").CurrentRegion
    .Resize(, 2).AdvancedFilter _
      Action:=xlFilterCopy, CopyToRange:=sh.Range("A1"), Unique:=True
    .Columns(3).AdvancedFilter _
      Action:=xlFilterInPlace, Unique:=True
    .Columns(3).Offset(1).SpecialCells(xlCellTypeVisible).Copy
      sh.Range("C1").PasteSpecial Paste:=xlPasteValues, Transpose:=True
    Application.CutCopyMode = False
    .Worksheet.ShowAllData
    v = .Resize(.Rows.Count - 1).Offset(1).Value
  End With
  With sh.Range("A1").CurrentRegion
    n = .Columns.Count + 1
    w = .Resize(, n).Value
    w(1, n) = "不良合計"
    For i = 1 To UBound(v)
      With Application
        y = .Match(v(i, 1), .Index(w, 0, 1), 0)
        x = .Match(v(i, 3), .Index(w, 1, 0), 0)
      End With
      If Not IsError(y) And Not IsError(x) Then
        w(y, x) = w(y, x) + v(i, 4)
        w(y, n) = w(y, n) + v(i, 4)
      End If
    Next i
    .Resize(, n).Value = w
  End With
  Set sh = Nothing
End Sub

↓これはピボットサンプル。
Sub pvtsample()
  Dim r As Range
  Application.ScreenUpdating = False
  Set r = Sheets("sheet1").Range("A2").CurrentRegion
  With ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _
       SourceData:=r.Address(external:=True)). _
       CreatePivotTable(TableDestination:="")
    .Format xlPTNone
    .AddFields RowFields:=Array(r.Cells(1).Value, r.Cells(2).Value), _
       ColumnFields:=r.Cells(3).Value
    With .PivotFields(r.Cells(4).Value)
      .Orientation = xlDataField
      .Function = xlSum
    End With
    .PivotFields(r.Cells(1).Value).Subtotals(1) = False
    With .TableRange1
      .Copy
      .PasteSpecial Paste:=xlPasteValues
      .Interior.ColorIndex = xlNone
      .Rows(1).Delete
      .BorderAround Weight:=xlThin
      .Borders(xlInsideVertical).Weight = xlThin
      .Borders(xlInsideHorizontal).Weight = xlThin
    End With
  End With
  Set r = Nothing
  Application.ScreenUpdating = True
End Sub

↓これは蛇足。
Sub fncsample()
  Dim sh As Worksheet
  Dim s As String
  Set sh = Sheets("sheet2")
  sh.UsedRange.Clear
  With Sheets("sheet1").Range("A2").CurrentRegion
    .Resize(, 2).AdvancedFilter _
      Action:=xlFilterCopy, CopyToRange:=sh.Range("A1"), Unique:=True
    .Columns(3).AdvancedFilter _
      Action:=xlFilterInPlace, Unique:=True
    .Columns(3).Offset(1).SpecialCells(xlCellTypeVisible).Copy
      sh.Range("C1").PasteSpecial Paste:=xlPasteValues, Transpose:=True
    Application.CutCopyMode = False
    .Worksheet.ShowAllData
    With .Resize(.Rows.Count - 1).Offset(1)
      s = "=SUMPRODUCT((Sheet1!" & .Columns(1).Address & "&Sheet1!" _
        & .Columns(3).Address & "=" & "$A2&C$1)*Sheet1!" & .Columns(4).Address & ")"
    End With
    With sh.Range("A1").CurrentRegion
      With .Resize(.Rows.Count - 1, .Columns.Count - 2).Offset(1, 2)
        .Formula = s
        .Value = .Value
        s = .Rows(1).Address(0, 1)
        With .Resize(, 1).Offset(, .Columns.Count)
          .Formula = "=SUM(" & s & ")"
          .Value = .Value
          .Offset(-1).Resize(1).Value = "不良合計"
        End With
      End With
    End With
  End With
  Set sh = Nothing
End Sub

[#41860]のシートレイアウトでテスト。ただしSheet2はA1起点。
解説は苦手なのでまずは[ローカルウィンドウ]+[ステップ実行]が理解への近道かと。
#ADO+SQLはテストしてないのでレスできません。

0 hits

【41860】データの集計方法について教えて下さい K.K 06/8/24(木) 15:42 質問
【41862】Re:データの集計方法について教えて下さい かみちゃん 06/8/24(木) 15:52 発言
【41863】Re:データの集計方法について教えて下さい K.K 06/8/24(木) 16:19 発言
【41864】Re:データの集計方法について教えて下さい K.K 06/8/24(木) 16:30 発言
【41865】Re:データの集計方法について教えて下さい かみちゃん 06/8/24(木) 16:34 回答
【41866】Re:データの集計方法について教えて下さい K.K 06/8/24(木) 17:07 お礼
【41868】Re:データの集計方法について教えて下さい かみちゃん 06/8/24(木) 17:42 発言
【41869】Re:データの集計方法について教えて下さい kazuo 06/8/24(木) 18:18 発言
【41873】Re:データの集計方法について教えて下さい かみちゃん 06/8/24(木) 19:53 回答
【41874】Re:データの集計方法について教えて下さい かみちゃん 06/8/24(木) 19:57 発言
【41871】Re:データの集計方法について教えて下さい Ned 06/8/24(木) 18:58 発言
【41875】Re:データの集計方法について教えて下さい かみちゃん 06/8/24(木) 19:59 発言
【41876】Re:データの集計方法について教えて下さい Ned 06/8/24(木) 20:32 発言
【41889】Re:データの集計方法について教えて下さい kobasan 06/8/24(木) 23:11 発言
【41892】Re:データの集計方法について教えて下さい k.k 06/8/25(金) 10:54 お礼
【41912】Re:データの集計方法について教えて下さい jun 06/8/26(土) 2:25 質問
【41913】Re:データの集計方法について教えて下さい Ned 06/8/26(土) 2:32 発言
【41914】Re:データの集計方法について教えて下さい jun 06/8/26(土) 2:41 発言
【41915】Re:データの集計方法について教えて下さい Ned 06/8/26(土) 4:06 発言
【41923】Re:データの集計方法について教えて下さい jun 06/8/26(土) 9:09 発言
【41924】Re:データの集計方法について教えて下さい かみちゃん 06/8/26(土) 9:22 発言
【41926】Re:データの集計方法について教えて下さい jun 06/8/26(土) 9:45 発言
【41931】Re:データの集計方法について教えて下さい Ned 06/8/26(土) 10:56 発言
【41932】Re:データの集計方法について教えて下さい jun 06/8/26(土) 11:15 お礼
【41952】Re:データの集計方法について教えて下さい Ned 06/8/26(土) 22:32 発言
【41955】Re:データの集計方法について教えて下さい Ned 06/8/26(土) 23:24 発言
【41969】Re:データの集計方法について教えて下さい ichinose 06/8/27(日) 11:53 発言
【41970】Re:データの集計方法について教えて下さい jun 06/8/27(日) 12:01 お礼

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