Excel VBA質問箱 IV

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

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


39916 / 76738 ←次へ | 前へ→

【41926】Re:データの集計方法について教えて下さい
発言  jun  - 06/8/26(土) 9:45 -

引用なし
パスワード
   ▼かみちゃん さん:
おはようございますresありがとうございます
>
>横から失礼します。
>
>>>>マクロの記録だと範囲は限定されたり色々制限ありますので、
>>>...んん...これを解析するよりピボットベース+ひと工夫。の方がラクな気はしま>>すけど
>>確かにピポットテーブルでもやってみましたがほんの数秒でした。
>>はぁ・・??ただそのひと工夫ががが難しのですよ素人には・・・。
>
>「範囲は限定」とありますが、それは、「マクロの記録」で記録したコードのことでしょうか?
>それであれば、その「範囲」を実行の都度、取得して設定すればいいことになります。
>そちらのほうが楽ですよ。
>なぜなら、手動でしていることがコードになっているだけですから、仕組みはわかりますよね?
>ただ、コードの提示がないから、具体的に修正箇所が説明できません。
>他にピボットテーブルの制限事項とは何でしょうか?

はいあまり深くは考えていませんが、別のケースを想定したり、
まぁ空想の話です。今後その場面があるかどうかはわかりません。

>今回の元々の質問は、行タイトル、列タイトルがあらかじめ固定されているという
>のが要件でした。
>つまり、
>ピボットテーブルや
>Scripting.Dictionary
>では、行タイトル、列タイトルにない要素があれば、期待どおりの結果にならない
>と思います。
いろいろ答えは同じでもやり方がいろいろ考え方もいろいろでしょから
>そういう意味で、junさんのご質問は、行タイトルと列タイトルが固定なのかそうでないのか、
>Scripting.Dictionary
>でしたいのか、クロス集計でしたいのかがよくわかりません。
>いずれにしても、そのようなことがしたいのならば、ピボットテーブルが簡単と
>私も思います。
>
>>Nedに作っていただいたものとまえのものよく比較し、
>>役に立てたいと思います・・・・・
>>寝込みを襲うようで申し訳ないですが↓のほうもよろしくお願いします。
kobasanが紹介している [#28364] に2通りのやり方があり
それを参考に見よう見まねですが下のように改良してみたのですが
思うように結果が出なかったものですからNedさんに無理言って
見て貰いどこを直せばいいのか質問してました。(できれば解説付き)
[#41951]はその2つめです。
その1
Sub test()
  Dim rs As Object
  Dim mysql As String
  
  If open_ado_excel(ThisWorkbook.FullName) = 0 Then
    mysql = "Transform iif(isnull(Count(不良本数)),0,Count(不良内容)) " & _
        "Select ロット,品名 From [Sheet1$] Group By ロット,品名 " & _
        "Pivot 不良内容;"
    If get_exec_sql(mysql, rs) = 0 Then

     With Worksheets("Sheet2")
      .Cells.ClearContents
      .Range("a2").CopyFromRecordset rs
      For idx = 0 To rs.fields.Count - 1
       .Cells(1, idx + 1).Value = rs.fields(idx).Name
       Next
      
      End With
     Call rs_close(rs)
    Else
     MsgBox "rs error"
     End If
     
    Call close_ado
  Else
    MsgBox "cn error"
    End If
   
End Sub
>これは、動かないから検証してほしいということなのでしょうか?
いえ動いています。
ロット    品名    不良内容    不良本数
0001    A    XX    1
0001    A    XY    3
0002    A    YZ    1
0003    B    YY    1
0003    B    XX    2
0003    B    YZ    2
0004    C    ZZ    1
0005    C    YZ    5
手動記録のピポットです。
Sub ぴぽっと()
  ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
    "Sheet1!A1:D20").CreatePivotTable TableDestination:="", TableName:= _
    "ピボットテーブル2", DefaultVersion:=xlPivotTableVersion10
  ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
  ActiveSheet.Cells(3, 1).Select
  With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("ロット")
    .Orientation = xlRowField
    .Position = 1
  End With
  With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("品名")
    .Orientation = xlRowField
    .Position = 2
  End With
  With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("不良内容")
    .Orientation = xlColumnField
    .Position = 1
  End With
  ActiveSheet.PivotTables("ピボットテーブル2").AddDataField ActiveSheet.PivotTables( _
    "ピボットテーブル2").PivotFields("不良本数"), "合計 / 不良本数", xlSum
  Range("A6").Select
  Selection.Delete
  Range("C4:G9").Select
  With Selection
    .HorizontalAlignment = xlCenter
    .VerticalAlignment = xlCenter
    .WrapText = False
    .Orientation = 0
    .AddIndent = False
    .IndentLevel = 0
    .ShrinkToFit = False
    .ReadingOrder = xlContext
    .MergeCells = False
  End With
  Selection.Borders(xlDiagonalDown).LineStyle = xlNone
  Selection.Borders(xlDiagonalUp).LineStyle = xlNone
  With Selection.Borders(xlEdgeLeft)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  With Selection.Borders(xlEdgeTop)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  With Selection.Borders(xlEdgeBottom)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  With Selection.Borders(xlEdgeRight)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  With Selection.Borders(xlInsideVertical)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  With Selection.Borders(xlInsideHorizontal)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  Range("A10").Select
  Selection.Delete
  Range("C5").Select
End Sub

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 お礼

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