ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4149|回复: 11

[求助] 数据分析(不使用数据透视表)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-12-2 16:46 | 显示全部楼层 |阅读模式
各位老师:
原始数据如附件,区域为 A2:D160,第一步要达到的数据处理结果是 E2:F26,第二步到达到的数据结果是 G2:AP26, 第一步可以根据gvntw 版主的VBA字典方法完成,代码如下:
20081018A.rar (10.76 KB, 下载次数: 75)
Sub test()
   Set d = CreateObject("Scripting.Dictionary")
   For i = 2 To [A65536].End(xlUp).Row
        d(Cells(i, 1).Value) = d(Cells(i, 1).Value) + 1
    Next
    [F3].Resize(d.Count) = Application.Transpose(d.keys)
    [G3].Resize(d.Count) = Application.Transpose(d.items)
    Set d = Nothing
End Sub
如何完成根据E2:F26的数据得到G2:AP26的数据结果的代码呢?

谢谢!

TA的精华主题

TA的得分主题

发表于 2008-12-2 19:18 | 显示全部楼层
没看清您的要求用了数据透视表故删除

[ 本帖最后由 smhf_6 于 2008-12-2 19:21 编辑 ]

TA的精华主题

TA的得分主题

发表于 2008-12-2 20:36 | 显示全部楼层
Sub yy()
Dim Myre%, x%, aa$, k, t, i%
Dim d, xx, fsad, r1, n
Myre = [e65536].End(xlUp).Row
For x = 2 To Myre
    aa = Cells(x, 5)
    With Range("a:a")
    Set r1 = .Find(aa)
    fsad = r1.Address
    xx = Cells(r1.Row, 2)
    Set d = CreateObject("scripting.dictionary") '定义字典
        If Not d.exists(xx) Then
            d.Add xx, 1
        Else
            d(xx) = d(xx) + 1
            
        End If
    Do
        Set r1 = .FindNext(r1)
        n = r1.Address
        If n <> fsad Then
            xx = Cells(r1.Row, 2)
            If Not d.exists(xx) Then
                d.Add xx, 1
            Else
                d(xx) = d(xx) + 1
            
            End If
        End If
    Loop While r1.Address <> fsad
    End With
    k = d.keys
    t = d.items
    For i = 0 To UBound(k)
        Cells(x, 2 * i + 7) = k(i)
        Cells(x, 2 * i + 8) = t(i)
    Next i
    Set d = Nothing
Next x
End Sub

TA的精华主题

TA的得分主题

发表于 2008-12-2 21:26 | 显示全部楼层
Sub fig8()

Set x = CreateObject("ADODB.CONNECTION")


x.Open = "Provider = MSDataShape;data provider=microsoft.jet.oledb.4.0;EXTENDED PROPERTIES='EXCEL 8.0;HDR=YES;';data source=" & ThisWorkbook.FullName

Set y1 = x.Execute(" shape (shape {select * from [Report$A1:D888]} as cc compute any(cc.CRD) as MMM,count(cc.CRD) as NNN ,CC  by Defect ,[Detection Router],CRD  ) as dd")

Set y = x.Execute("shape (shape {select * from [Report$A1:D888]}  append (dd relate Defect to Defect) as vv) as aa compute any(aa.Defect) as mm,count(aa.CRD) as nn,aa by Defect")
i = 2
Do While Not y.EOF
Cells(i, 5) = y!mm
Cells(i, 6) = y!nn
Set y2 = y!aa.Value
Set y3 = y2!vv.Value
j = 7
Do While Not y3.EOF
Cells(i, j) = y3!MMM
Cells(i, j + 1) = y3!NNN
y3.MOVENEXT
j = j + 2
Loop
y.MOVENEXT
i = i + 1
Loop
End Sub

[ 本帖最后由 figfig 于 2008-12-2 21:28 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-12-3 08:26 | 显示全部楼层
非常感谢3楼、4楼两位老师的帮助!
还有一个问题:E2:F26,G2:AP26 区数据没有按照Qty 的大小从大至小排序,能否再加些代码?

[ 本帖最后由 praijna 于 2008-12-3 08:28 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-12-4 10:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
各位老师:
麻烦你抽空帮忙看看,好吗?



谢谢!

TA的精华主题

TA的得分主题

发表于 2008-12-4 17:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 praijna 于 2008-12-3 08:26 发表
非常感谢3楼、4楼两位老师的帮助!
还有一个问题:E2:F26,G2:AP26 区数据没有按照Qty 的大小从大至小排序,能否再加些代码?

Sub fig8()

Set x = CreateObject("ADODB.CONNECTION")


x.Open = "Provider = MSDataShape;data provider=microsoft.jet.oledb.4.0;EXTENDED PROPERTIES='EXCEL 8.0;HDR=YES;';data source=" & ThisWorkbook.FullName

Set y1 = x.Execute(" shape (shape {select * from [Report$A1:D888]} as cc compute any(cc.CRD) as MMM,count(cc.CRD) as NNN ,CC  by Defect ,[Detection Router],CRD  ) as dd")

Set y = x.Execute("shape (shape {select * from [Report$A1:D888]}  append ( dd relate Defect to Defect) as vv) as aa compute any(aa.Defect) as mm,count(aa.CRD) as nn,aa by Defect")
i = 2
y.Sort = "nn desc"
Do While Not y.EOF
Cells(i, 5) = y!mm
Cells(i, 6) = y!nn
Set y2 = y!aa.Value
Set y3 = y2!vv.Value
y3.Sort = "NNN desc"
j = 7
Do While Not y3.EOF
Cells(i, j) = y3!MMM
Cells(i, j + 1) = y3!NNN
y3.MOVENEXT
j = j + 2
Loop
y.MOVENEXT
i = i + 1
Loop
End Sub

TA的精华主题

TA的得分主题

发表于 2008-12-5 00:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
countif 函数也可以哦,似乎可以不用代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-12-5 08:38 | 显示全部楼层
figfig:
早上好!
非常感谢您的帮助!


谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-12-10 09:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
各位老师:
在使用 figfig 的代码时,发现有一个小小的错误,因为一时间没有能够联系上 figfig ,因此再次将这个问题反映到论坛上来:
2008-12-10_085135.jpg
黄色填充区域即为 figfig 代码的结果。
Defect Report.rar (14.09 KB, 下载次数: 40)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-26 18:37 , Processed in 0.056157 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表