|
▼かみちゃん さん:
おはようございます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
|
|