ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 如何用VBA把每日价格分表导入价格汇总表中?

如何用VBA把每日价格分表导入价格汇总表中?

作者:绿色风 分类: 时间:2022-08-18 浏览:117
楼主
herelazy
Q:每天的价格表(如:20110528, 20110529, 20110530....),如何导入价格汇总周表中?
A:
  1. Sub cs()
  2.     Dim arr(), d, i&, p$, a$, n&, dk, j&, dn&, trr, brr(), k&, ddi
  3.     Application.ScreenUpdating = False
  4.     Set d = CreateObject("scripting.dictionary")
  5.     trr = Array("Location", "Date", "Price1", "Price2", "Price3")
  6.     p = ThisWorkbook.Path
  7.     a = Dir(p & "\*.xls")
  8.     Do While a > ""
  9.         If a <> ThisWorkbook.Name Then
  10.             n = n + 1
  11.             ReDim Preserve arr(1 To n)
  12.             Workbooks.Open p & "\" & a
  13.             arr(n) = ActiveWorkbook.Sheets(1).[a1].CurrentRegion
  14.             For i = 2 To UBound(arr(n))
  15.                 If d.exists(arr(n)(i, 1)) Then
  16.                     d(arr(n)(i, 1))(arr(n)(i, 2)) = n & Chr(10) & i
  17.                 Else
  18.                     Set d(arr(n)(i, 1)) = CreateObject("scripting.dictionary")
  19.                     d(arr(n)(i, 1))(arr(n)(i, 2)) = n & Chr(10) & i
  20.                 End If
  21.             Next
  22.             ActiveWorkbook.Close
  23.         End If
  24.         a = Dir
  25.     Loop
  26.     dk = d.keys
  27.     With Sheets(1)
  28.     .Cells.Clear
  29.     .Cells.Font.Name = "Calibri"
  30.     .Cells.Font.Size = 11
  31.     For i = 1 To d.Count
  32.         dn = d(dk(i - 1)).Count
  33.         ddi = d(dk(i - 1)).items
  34.         j = dn + 7 + j
  35.         ReDim Preserve brr(1 To 5, 1 To j)
  36.         For n = 1 To dn + 1
  37.             For k = 1 To 5
  38.                 If n = 1 Then
  39.                     brr(k, j - dn - 7 + 1) = trr(k - 1)
  40.                 Else
  41.                     brr(k, j - dn - 7 + n) = arr(Split(ddi(n - 2), Chr(10))(0) * 1)(Split(ddi(n - 2), Chr(10))(1) * 1, k)
  42.                 End If
  43.             Next
  44.         Next
  45.         .Cells(j - dn - 4, 1).Resize(1, 5).Interior.ColorIndex = 43
  46.         .Cells(j - dn - 4, 1).Resize(dn + 1, 5).Borders.LineStyle = 1
  47.         brr(1, j - 4) = "Average"
  48.         brr(3, j - 4) = "=round(average(C" & j - dn - 3 & ":C" & j - 4 & "),2)"
  49.         brr(4, j - 4) = "=round(average(d" & j - dn - 3 & ":d" & j - 4 & "),2)"
  50.         brr(5, j - 4) = "=round(average(e" & j - dn - 3 & ":e" & j - 4 & "),2)"
  51.         brr(1, j - 3) = "Low"
  52.         brr(3, j - 3) = "=min(C" & j - dn - 3 & ":C" & j - 4 & ")"
  53.         brr(4, j - 3) = "=min(d" & j - dn - 3 & ":d" & j - 4 & ")"
  54.         brr(5, j - 3) = "=min(e" & j - dn - 3 & ":e" & j - 4 & ")"
  55.         brr(1, j - 2) = "Hight"
  56.         brr(3, j - 2) = "=max(C" & j - dn - 3 & ":C" & j - 4 & ")"
  57.         brr(4, j - 2) = "=max(d" & j - dn - 3 & ":d" & j - 4 & ")"
  58.         brr(5, j - 2) = "=max(e" & j - dn - 3 & ":e" & j - 4 & ")"
  59.         .Cells(j - 2, 1).Resize(3, 5).Interior.ColorIndex = 48
  60.         .Cells(j - 2, 1).Resize(3, 5).Borders.LineStyle = 1
  61.     Next
  62.     .[a1] = "WEEEKY PRICE"
  63.     .[a3].Resize(UBound(brr, 2), 5) = Application.Transpose(brr)
  64.     End With
  65.     Set d = Nothing
  66.     Application.ScreenUpdating = True
  67. End Sub


P.S.必须把每日价格表和汇总表放在一个文件夹中,否则将导致“下表越界”。


价格汇总表.rar


2楼
亡者天下
过来学习一下

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap