Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2916|回复: 9

[已解决]月均价求助

[复制链接]
发表于 2017-4-26 21:15 | 显示全部楼层 |阅读模式
月均价求助,详见附件,谢谢!!!! 月均价.rar (131.36 KB, 下载次数: 16)
发表于 2017-4-26 22:50 | 显示全部楼层
f3
=AVERAGEIFS(数据库!$J$2:$J$4782,数据库!$F$2:$F$4782,均价!$B3,数据库!$C$2:$C$4782,">=42736",数据库!$C$2:$C$4782,"<=42766")

但2003 估计不支持
42736 为 2017-01-01
42766 为 2017-01-31
回复

使用道具 举报

 楼主| 发表于 2017-4-26 23:31 | 显示全部楼层
砂海 发表于 2017-4-26 22:50
f3
=AVERAGEIFS(数据库!$J$2:$J$4782,数据库!$F$2:$F$4782,均价!$B3,数据库!$C$2:$C$4782,">=42736",数据 ...

用VBA,大哥!
回复

使用道具 举报

发表于 2017-4-27 13:14 | 显示全部楼层
  1. Sub 数组字典计算均价()
  2.     Set d = CreateObject("scripting.dictionary")
  3.     Set d1 = CreateObject("scripting.dictionary")
  4.     Set d2 = CreateObject("scripting.dictionary")
  5.     arr = Sheets("数据库").[a1].CurrentRegion
  6.     For i = 2 To UBound(arr)
  7.         d(arr(i, 6)) = ""   '物品名称
  8.         x = arr(i, 6) & Month(arr(i, 3)) & "数量"
  9.         d1(x) = d1(x) + arr(i, 9)
  10.         x = arr(i, 6) & Month(arr(i, 3)) & "金额"
  11.         d1(x) = d1(x) + arr(i, 11)
  12.     Next
  13.     With Sheets("均价")
  14.         .Rows("3:65536") = ""
  15.         .[b3].Resize(d.Count) = Application.Transpose(d.keys)
  16.         arr = .Range("a1:am" & d.Count + 2)
  17.         For j = 4 To UBound(arr, 2) Step 3
  18.             'If arr(1, j) = "" Then arr(1, j) = arr(1, j - 1)
  19.             For i = 3 To UBound(arr)
  20.                 x = arr(i, 2) & Val(arr(1, j)) & arr(2, j)
  21.                 y = arr(i, 2) & Val(arr(1, j)) & arr(2, j + 1)
  22.                 arr(i, j) = d1(x)
  23.                 arr(i, j + 1) = d1(y)
  24.                 If arr(i, j) > 0 Then arr(i, j + 2) = arr(i, j + 1) / arr(i, j)
  25.             Next
  26.         Next
  27.         .Range("a1:am" & d.Count + 2) = arr
  28.     End With
  29. End Sub
复制代码

月均价.rar

132.76 KB, 下载次数: 15

回复

使用道具 举报

 楼主| 发表于 2017-4-27 13:51 | 显示全部楼层
grf1973 老师:谢谢您!
如果,"均价"中的名称(即B列)是事先给出的,且无序不是"数据库"中的全部,只是一部分,又如何处理?谢谢! 月均价2.rar (134.86 KB, 下载次数: 2)
回复

使用道具 举报

发表于 2017-4-28 14:07 | 显示全部楼层    本楼为最佳答案   
  1. Sub 数组字典计算均价()
  2.     Set d1 = CreateObject("scripting.dictionary")
  3.     arr = Sheets("数据库").[a1].CurrentRegion
  4.     For i = 2 To UBound(arr)
  5.         x = arr(i, 6) & Month(arr(i, 3)) & "数量"
  6.         d1(x) = d1(x) + arr(i, 9)
  7.         x = arr(i, 6) & Month(arr(i, 3)) & "金额"
  8.         d1(x) = d1(x) + arr(i, 11)
  9.     Next
  10.     With Sheets("均价")
  11.         .[c3:am65536] = ""
  12.         arr = .Range("a1:am" & .[b65536].End(3).Row)
  13.         For j = 4 To UBound(arr, 2) Step 3
  14.             For i = 3 To UBound(arr)
  15.                 x = arr(i, 2) & Val(arr(1, j)) & arr(2, j)
  16.                 y = arr(i, 2) & Val(arr(1, j)) & arr(2, j + 1)
  17.                 arr(i, j) = d1(x)
  18.                 arr(i, j + 1) = d1(y)
  19.                 If arr(i, j) > 0 Then arr(i, j + 2) = arr(i, j + 1) / arr(i, j)
  20.             Next
  21.         Next
  22.         .Range("a1:am" & .[b65536].End(3).Row) = arr
  23.     End With
  24. End Sub
复制代码

月均价2.rar

131.71 KB, 下载次数: 10

回复

使用道具 举报

发表于 2017-4-28 14:18 | 显示全部楼层
根据4楼作了个sql法的,期待更好的做法。
QQ截图20170428141648.png

月均价.rar

145.79 KB, 下载次数: 8

回复

使用道具 举报

 楼主| 发表于 2017-4-28 15:47 | 显示全部楼层

辛苦了,谢谢您!
回复

使用道具 举报

 楼主| 发表于 2017-5-19 18:04 | 显示全部楼层

grf1973 老师:如果要将“数据库"中的H列的单位读取到C列,又如何改代码?
回复

使用道具 举报

发表于 2017-8-11 10:58 | 显示全部楼层
学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-17 07:13 , Processed in 0.252718 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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