Excel精英培训网

 找回密码
 注册
查看: 3082|回复: 9

[通知] 【VBA字典数组201301班】C组-第五讲作业上交贴

[复制链接]
发表于 2013-12-6 09:42 | 显示全部楼层 |阅读模式
本帖最后由 无聊的疯子 于 2013-12-16 14:22 编辑

【VBA字典数组201301班】C组 - 第五讲作业上交专用,其它成员忽入

作业要求:
    1.要求使用字典完成
    2.所有的代码均写在按钮指定的过程中
    3.要求代码缩进
    4.要求有注释(关键代码处)
    5.要求强制声明

   3-5要求一共占6分,每点2分,2道题最多扣6分

作业上交截止时间:2013年12月11日  20:00
原则上未评分和未开贴前上交均视为有效,不能按时上交的请提前告知!!




excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-12-8 10:52 | 显示全部楼层
本帖最后由 雪舞子 于 2013-12-8 17:10 编辑
  1. Sub 作业一()
  2.     Dim dic As Object, arr, arr1, arr2, brr(), crr(), i&, j%, n&, s$
  3.     Set dic = CreateObject("scripting.dictionary")
  4.     arr = Range("a2").CurrentRegion      '源数据入数组
  5.     For i = 2 To UBound(arr)
  6.         dic(arr(i, 1)) = ""              '"地区"去重
  7.     Next
  8.     arr1 = dic.Keys                      '"地区"去重后入数组
  9.     dic.RemoveAll
  10.     For i = 2 To UBound(arr)
  11.         dic(arr(i, 2)) = ""              '"品种"去重
  12.     Next
  13.     arr2 = dic.Keys                      '"品种"去重后入数组
  14.     dic.RemoveAll
  15.         For i = 2 To UBound(arr)
  16.             s = arr(i, 1) & "-" & arr(i, 2)          '"地区品种"唯一
  17.             
  18.                 If Not dic.exists(s) Then            '字典中不存在
  19.                     n = dic.Count + 1                '字典递加
  20.                     dic(s) = n                       '递加后存入条目
  21.                     ReDim Preserve brr(1 To n)       '"地区品种"brr数组随之递增
  22.                 Else
  23.                     n = dic(s)                       '字典中存在取出字典序号
  24.                 End If
  25.             brr(n) = brr(n) + arr(i, 3)
  26.             '对应数量累加并存回数组.这里的n即数组下标,也是上面的字典序号,它们是一一对应的
  27.             
  28.         Next
  29.     ReDim crr(UBound(arr1) + 1, UBound(arr2) + 1)    '根据"地区品种"数量重新定义结果数组crr
  30.     For i = 0 To UBound(arr1)
  31.         For j = 0 To UBound(arr2)
  32.         
  33.             crr(i, j) = brr(dic(arr1(i) & "-" & arr2(j)))
  34.             '字典序号与brr数组标号一一对应,字典序号存在条目里,与地区品种(key值)一一对应,将其取出依次存入结果数组crr
  35.             
  36.             crr(i, UBound(arr2) + 1) = crr(i, UBound(arr2) + 1) + crr(i, j) '行总计
  37.         Next
  38.     Next
  39.     With Range("f1")
  40.         .CurrentRegion.Offset(1).ClearContents
  41.         .CurrentRegion.Offset(, 1).ClearContents
  42.         .Offset(, UBound(arr2) + 2) = "总计"                                '"品种"最后一个偏移位置写上"总计"
  43.         .Offset(1).Resize(UBound(arr1) + 1) = Application.Transpose(arr1)   '写"地区"
  44.         .Offset(, 1).Resize(, UBound(arr2) + 1) = arr2                      '写"品种"
  45.         .Offset(1, 1).Resize(UBound(arr1) + 1, UBound(arr2) + 2) = crr      '输出数据
  46.     End With
  47.    
  48.     MsgBox "作业一完成!" & Chr(13) & Chr(13) & "结果可与透视表一对照", , "友情提示"
  49.    
  50. End Sub


  51. Sub 作业二()
  52.     Dim dic As Object, arr1, arr2, arr3, brr(), crr, i&, j%, k%, m&, n&, s$
  53.     Set dic = CreateObject("scripting.dictionary")
  54.     arr1 = Sheets("作业二").Range("a1").CurrentRegion.Value
  55.    
  56.    
  57.     For i = 2 To UBound(arr1)
  58.             dic(arr1(i, 2)) = ""              '"地区"去重
  59.     Next
  60.     arr2 = dic.Keys                      '"地区"去重后入数组
  61.     dic.RemoveAll
  62.     For i = 2 To UBound(arr1)
  63.         dic(arr1(i, 3)) = ""              '"品种"去重
  64.     Next
  65.     arr3 = dic.Keys                      '"品种"去重后入数组
  66.     dic.RemoveAll

  67.     For i = 2 To UBound(arr1)
  68.     m = Month(arr1(i, 1))

  69.         s = m & "-" & arr1(i, 2) & "-" & arr1(i, 3)       '"月份地区品种"唯一
  70.         
  71.             If Not dic.exists(s) Then            '字典中不存在
  72.                 n = dic.Count + 1                '字典递加
  73.                     dic(s) = n                       '递加后存入条目
  74.                 ReDim Preserve brr(1 To n)       '"月份地区品种"brr数组随之递增
  75.             Else
  76.                 n = dic(s)                       '字典中存在取出字典序号
  77.             End If
  78.         brr(n) = brr(n) + arr1(i, 4)
  79.         '对应数量累加并存回数组.这里的n即数组下标,也是上面的字典序号,它们是一一对应的
  80.         
  81.     Next
  82.     ReDim crr(UBound(arr2), (UBound(arr3) + 2) * m + 1)
  83.    
  84.    
  85.     For i = 0 To UBound(arr2)
  86.         For k = 1 To m
  87.             For j = 0 To UBound(arr3)
  88.                 If dic.exists(k & "-" & arr2(i) & "-" & arr3(j)) Then
  89.                     crr(i, (k - 1) * 4 + j) = brr(dic(k & "-" & arr2(i) & "-" & arr3(j)))
  90.                     '字典序号与brr数组标号一一对应,字典序号存在条目里,与地区品种(key值)一一对应,将其取出依次存入结果数组crr
  91.                 End If
  92.                 crr(i, (UBound(arr3) + 2) * k - 1) = crr(i, (UBound(arr3) + 2) * k - 1) + crr(i, (k - 1) * 4 + j)  '行总计
  93.             Next
  94.             crr(i, (UBound(arr3) + 2) * m) = crr(i, (UBound(arr3) + 2) * m) + crr(i, (UBound(arr3) + 2) * k - 1)
  95.         Next
  96.     Next
  97.    
  98.     With Sheets("作业二答案").Range("a1")
  99.         .CurrentRegion.Clear
  100.         
  101.     For i = 1 To m
  102.         .Offset(, i * 4 - 3) = i & "月"
  103.         .Offset(, i * 4 - 3).Resize(, 4).HorizontalAlignment = xlCenterAcrossSelection
  104.         .Offset(1, (i - 1) * 3 + i).Resize(, UBound(arr3) + 1) = arr3
  105.         .Offset(1, (i - 1) * 3 + i + 3) = "小计"
  106.     Next
  107.         .Offset(0) = "省份"
  108.         .Offset(1, (UBound(arr3) + 2) * m + 1) = "总计"                               '"品种"最后一个偏移位置写上"总计"
  109.         .Offset(2).Resize(UBound(arr2) + 1) = Application.Transpose(arr2)             '写"地区"
  110.         .Offset(2, 1).Resize(UBound(arr2) + 1, (UBound(arr3) + 2) * m + 1) = crr      '输出数据
  111.         .Offset(, (UBound(arr3) + 2) * m + 1).Resize(2, 1).Merge
  112.         .Resize(2, 1).Merge
  113.         .CurrentRegion.Select
  114.     End With
  115.     With Selection.Borders                                               '画表格线
  116.         .LineStyle = xlContinuous
  117.         .Weight = xlThin
  118.         .ColorIndex = xlAutomatic
  119.    
  120.     End With
  121.     Cells.EntireColumn.AutoFit
  122.     [r19].Select
  123.    
  124.     MsgBox "作业二完成!" & Chr(13) & Chr(13) & "结果可与透视表二对照", , "友情提示"
  125.    
  126.         
  127.    
  128. End Sub

  129. Sub 自动登录论坛()

  130.     Dim ie As Object, tt&, i&, k%
  131.     Set ie = CreateObject("internetexplorer.application")
  132.     On Error Resume Next
  133.    
  134.     With ie
  135.         For k = 1 To 3
  136.         .Navigate "http://www.excelpx.com/forum-99-1.html"
  137.         .Visible = True   '显示网页
  138.         Do Until ie.ReadyState = 4
  139.             DoEvents     '在窗体加载时转交操作权
  140.         Loop
  141.         If InStr(.document.all.tags("td")(0).innerText, "用户名") Then     '检测是否登录状态
  142.             .document.Forms(0).all("username").Value = "论坛ID"           '填写论坛登录用户名
  143.             .document.Forms(0).all("password").Value = "登录密码"          '填写论坛登录密码
  144.             .document.Forms(0).submit
  145.         End If
  146.          tt = Timer
  147.                 Do Until Timer > tt + 1                                    '延迟1秒
  148.                
  149.                     DoEvents
  150.                 Loop
  151.     Do Until .document.all.tags("td")(0).innerText = ""
  152.         DoEvents
  153.     Loop
  154.     If InStr(.document.all("um").innerText, "论坛ID") Then                     '填写论坛ID,再次检测登录成功则发帖
  155.             .document.all("subject").Value = Sheets("作业三").Cells(k + 1, 1)   '标题
  156.             .document.all("message").Value = Sheets("作业三").Cells(k + 1, 2)   '内容
  157.             .document.getElementById("typeid_fast").Value = 242                 '类别
  158.             .document.Forms(2).submit
  159.             tt = Timer
  160.                 Do Until Timer > tt + 1                                         '延迟1秒
  161.                
  162.                     DoEvents
  163.                 Loop
  164.                                                                         
  165.                  Do Until Timer > tt + 15                                       '第二次发帖需间隔15秒
  166.                     DoEvents
  167.                 Loop
  168.         
  169.    
  170.     End If
  171.     Next k
  172.    .Quit                                                                                '关闭打开的网页
  173.     End With
  174.    
  175.     Set ie = Nothing
  176.    
  177. End Sub
复制代码

评分

参与人数 1金币 +16 收起 理由
无聊的疯子 + 16 作业二最后的循环缩进不对,少做了一个题

查看全部评分

回复

使用道具 举报

发表于 2013-12-8 10:58 | 显示全部楼层
本帖最后由 hrpotter 于 2013-12-8 12:03 编辑

C03:hrpotter
  1. Option Explicit
  2. Sub 作业一()
  3.     Dim arr, brr, d1, d2
  4.     Dim i As Long
  5.     Set d1 = CreateObject("scripting.dictionary")
  6.     Set d2 = CreateObject("scripting.dictionary")
  7.     arr = Range("a1").CurrentRegion
  8.     For i = 2 To UBound(arr)
  9.         If Not d1.exists(arr(i, 1)) Then d1(arr(i, 1)) = d1.Count + 1    '将地区加入字典,作为行标题
  10.         If Not d2.exists(arr(i, 2)) Then d2(arr(i, 2)) = d2.Count + 1    '将品种加入字典,作为列标题
  11.     Next
  12.     ReDim brr(1 To d1.Count, 1 To d2.Count)    '定义汇总数据的结果数组
  13.     For i = 2 To UBound(arr)
  14.         brr(d1(arr(i, 1)), d2(arr(i, 2))) = brr(d1(arr(i, 1)), d2(arr(i, 2))) + arr(i, 3)
  15.         '用字典取出行列位置,并进行累加
  16.     Next
  17.     Range("f2").Resize(d1.Count) = Application.Transpose(d1.keys)    '写入行标题
  18.     Range("g1").Resize(1, d2.Count) = d2.keys    '写入列标题
  19.     Range("g2").Resize(UBound(brr), UBound(brr, 2)) = brr    '写入汇总的结果数组
  20. End Sub
  21. Sub 作业二()
  22.     Dim arr, brr(1 To 10000, 1 To 49) As Long, d1, d2
  23.     Dim i As Long, j As Long, k As Long, l As Long
  24.     Set d1 = CreateObject("scripting.dictionary")
  25.     Set d2 = CreateObject("scripting.dictionary")
  26.     arr = Range("a1").CurrentRegion
  27.     d2("草莓") = 1
  28.     d2("苹果") = 2
  29.     d2("葡萄") = 3  '将列标题品种加入字典
  30.     For i = 2 To UBound(arr)
  31.         If Not d1.exists(arr(i, 2)) Then
  32.             d1(arr(i, 2)) = d1.Count + 1    '将地区加入字典,item为行位置
  33.         End If
  34.         j = d1(arr(i, 2))    '取出行位置
  35.         k = (Month(arr(i, 1)) - 1) * 4 + d2(arr(i, 3))    '计算出列位置
  36.         l = Month(arr(i, 1)) * 4    '计算出小计的列位置
  37.         brr(j, k) = brr(j, k) + arr(i, 4)    '汇总累加
  38.         brr(j, l) = brr(j, l) + arr(i, 4)    '小计累加
  39.         brr(j, 49) = brr(j, 49) + arr(i, 4)  '合计累加
  40.     Next
  41.     Range("f3").Resize(10000, 50).ClearContents    '清空数据区域
  42.     Range("f3").Resize(d1.Count) = Application.Transpose(d1.keys)    '写入行标题
  43.     Range("g3").Resize(d1.Count, 49) = brr    '写入汇总数据
  44. End Sub
  45. Sub 作业二附加()
  46.     Dim arr, brr, crr, d1, d2
  47.     Dim i As Long, j As Long, k As Long, l As Long
  48.     Set d1 = CreateObject("scripting.dictionary")
  49.     Set d2 = CreateObject("scripting.dictionary")
  50.     arr = Range("a1").CurrentRegion
  51.     For i = 2 To UBound(arr)
  52.         If Not d1.exists(arr(i, 2)) Then d1(arr(i, 2)) = d1.Count + 1    '将地区加入字典,作为行标题
  53.         If Not d2.exists(arr(i, 3)) Then d2(arr(i, 3)) = d2.Count + 1    '将品种加入字典,作为列标题
  54.     Next
  55.     ReDim brr(1 To 2, 1 To d2.Count * 12 + 14)
  56.     brr(1, 1) = "省份"
  57.     brr(1, UBound(brr, 2)) = "合计"
  58.     crr = d2.keys
  59.     For i = 1 To 12
  60.         For j = 1 To d2.Count
  61.             k = (i - 1) * (d2.Count + 1) + j
  62.             brr(2, k + 1) = crr(j - 1)
  63.         Next
  64.         brr(1, (i - 1) * (d2.Count + 1) + 2) = i & "月"
  65.         brr(2, i * (d2.Count + 1) + 1) = "小计"             '设置标题
  66.     Next
  67.     ReDim crr(1 To d1.Count, 1 To UBound(brr, 2) - 1) As Long
  68.     For i = 2 To UBound(arr)
  69.         j = d1(arr(i, 2))    '取出行位置
  70.         k = (Month(arr(i, 1)) - 1) * (d2.Count + 1) + d2(arr(i, 3))  '计算出列位置
  71.         l = Month(arr(i, 1)) * (d2.Count + 1)    '计算出小计的列位置
  72.         crr(j, k) = crr(j, k) + arr(i, 4)    '汇总累加
  73.         crr(j, l) = crr(j, l) + arr(i, 4)    '小计累加
  74.         crr(j, UBound(crr, 2)) = crr(j, UBound(crr, 2)) + arr(i, 4)    '合计累加
  75.     Next
  76.     With Range("f1")
  77.         .Resize(50, 100).Clear
  78.         .Resize(2, UBound(brr, 2)) = brr    '写入列标题
  79.         .Offset(2).Resize(d1.Count) = Application.Transpose(d1.keys)    '写入行标题
  80.         .Offset(2, 1).Resize(UBound(crr), UBound(crr, 2)) = crr    '写入汇总数据区域
  81.         .Resize(2, 1).MergeCells = True    '以下设置汇总表格式
  82.         .Offset(, UBound(crr, 2)).Resize(2, 1).MergeCells = True
  83.         For i = 1 To 12
  84.             .Offset(, (d2.Count + 1) * (i - 1) + 1).Resize(, d2.Count + 1).MergeCells = True
  85.         Next
  86.         With .Resize(2, UBound(brr, 2))
  87.             .HorizontalAlignment = xlCenter
  88.             .VerticalAlignment = xlCenter
  89.         End With
  90.         With .Resize(d1.Count + 2)
  91.             .HorizontalAlignment = xlCenter
  92.             .VerticalAlignment = xlCenter
  93.         End With
  94.         .Resize(d1.Count + 2, UBound(brr, 2)).Borders.LineStyle = xlContinuous
  95.     End With
  96. End Sub
  97. Sub 作业三()
  98.     Dim arr
  99.     Dim i As Long, t
  100.     Dim ie As New InternetExplorer    '创建一个IE对象
  101.     arr = Range("a1").CurrentRegion
  102.     For i = 2 To UBound(arr)
  103.         With ie
  104.             .Navigate "http://www.excelpx.com/forum.php?mod=post&action=newthread&fid=99"  'Navigate方法可以打开指定的网页
  105.             .Visible = True    '打开后要显示网页
  106.             Do Until ie.ReadyState = READYSTATE_COMPLETE    '如果IE加载宏完成
  107.                 DoEvents    '在窗体加载时转交操作权
  108.             Loop
  109.             .Document.all("typeid").Value = "242"    '主题分类选择文字
  110.             .Document.all("subject").Value = arr(i, 1)    '标题
  111.             .Document.all("message").Value = arr(i, 2)    '内容
  112.             .Document.all("topicsubmit").Click    '提交
  113.             t = Timer
  114.             Do While Timer < t + 20    '设定20秒的间隔
  115.                 DoEvents
  116.             Loop
  117.             .Quit '关闭网页
  118.         End With
  119.         Set ie = Nothing
  120.     Next
  121. End Sub
复制代码

评分

参与人数 1金币 +20 收起 理由
无聊的疯子 + 20 很给力!

查看全部评分

回复

使用道具 举报

发表于 2013-12-8 16:55 | 显示全部楼层

  1. Option Explicit
  2. Sub 作业一()
  3.     Dim i As Long, j As Long, s As String
  4.     Dim Arr, Arr1, Arr2()
  5.     Dim d1 As New Dictionary, d2 As New Dictionary, d3 As New Dictionary
  6.     Range("G1", Cells(1, Columns.Count).End(2)).ClearContents
  7.     Range("F2:L" & Cells(Rows.Count, 1).End(3).Row).ClearContents
  8.     Arr = Range("A2:C" & Cells(Rows.Count, 1).End(3).Row).Value
  9.     '分别生成不重复地区和品种,并对不重复的地区品种的数量进行统计
  10.     For i = LBound(Arr) To UBound(Arr)
  11.         If Not d1.Exists(Arr(i, 1)) Then d1.Add Arr(i, 1), ""
  12.         If Not d2.Exists(Arr(i, 2)) Then d2.Add Arr(i, 2), ""
  13.         s = Arr(i, 1) & "#" & Arr(i, 2)
  14.         d3(s) = d3(s) + Arr(i, 3)
  15.     Next
  16.     Arr1 = d1.Keys
  17.     '调整数组大小存放汇总结果
  18.     ReDim Arr2(1 To d1.Count, 1 To d2.Count + 1)
  19.     '    行循环
  20.     For i = 1 To d1.Count
  21.         Arr2(i, 1) = Arr1(i - 1)    'D1.keys(i-1)
  22.         For j = 2 To d2.Count + 1
  23.             '数组的第2到最后列,第1列为地区
  24.             s = Arr1(i - 1) & "#" & d2.Keys(j - 2)  '地区#品种
  25.             If d3.Exists(s) Then Arr2(i, j) = d3(s)
  26.         Next j
  27.     Next i
  28.     Range("G1").Resize(, d2.Count) = d2.Keys
  29.     Range("F2").Resize(i - 1, j - 1).Value = Arr2
  30. End Sub


  31. Sub 作业二()
  32.     Dim i As Long, j As Long, str As String
  33.     Dim xj As Long, hj As Long
  34.     Dim m As Byte, n As Byte, p As Byte
  35.     Dim Arr, Arr1, Arr2()
  36.     Dim d1 As New Dictionary
  37.     Dim d2 As New Dictionary
  38.     Dim d3 As New Dictionary
  39.     Application.ScreenUpdating = False
  40.    
  41.     Arr = Range("A1").CurrentRegion.Value
  42.     For i = 2 To UBound(Arr)
  43.         If Not d1.Exists(Arr(i, 2)) Then d1.Add Arr(i, 2), ""
  44.         If Not d2.Exists(Arr(i, 3)) Then d2.Add Arr(i, 3), ""
  45.         str = Format(Arr(i, 1), "m月") & Arr(i, 2) & Arr(i, 3)
  46.         d3(str) = d3(str) + Arr(i, 4)
  47.     Next i
  48.     '删除并生成新的月份和品种的标题,清空原有数据
  49.     m = d2.Count
  50.     Range(Cells(1, 7), Cells(2, 7 + (m + 1) * 12)).UnMerge
  51.     Range(Cells(1, 7), Cells(2, 7 + (m + 1) * 12)).ClearContents
  52.     Range(Cells(3, 6), Cells(Rows.Count, 7 + (m + 1) * 12)).ClearContents
  53.     For i = 1 To 12
  54.         With Cells(1, 7 + (m + 1) * (i - 1)).Resize(, m + 1)
  55.             .Merge
  56.             .HorizontalAlignment = xlCenter
  57.             .VerticalAlignment = xlCenter
  58.             .Value = i & "月"
  59.         End With
  60.         Cells(2, 7 + (m + 1) * (i - 1)).Resize(, m) = d2.Keys
  61.         Cells(2, 10 + (m + 1) * (i - 1)) = "小计"
  62.     Next i
  63.     With Range(Cells(1, 7 + (m + 1) * 12), Cells(2, 7 + (m + 1) * 12))
  64.         .Merge
  65.         .HorizontalAlignment = xlCenter
  66.         .VerticalAlignment = xlCenter
  67.         .Value = "合计"
  68.     End With
  69.    
  70.     Arr1 = d1.Keys
  71.     '调整数组大小存放汇总结果
  72.     ReDim Arr2(1 To d1.Count, 1 To (m + 1) * 12 + 2)
  73.     '行循环
  74.     For i = 1 To d1.Count
  75.         Arr2(i, 1) = Arr1(i - 1)    'D1.keys(i-1)
  76.         For j = 2 To (m + 1) * 12 + 2
  77.             '数组的第2到最后列,第1列为地区
  78.             p = (j - 1) Mod (m + 1)
  79.             If p <> 0 Then
  80.                 n = (j - 1) \ (m + 1) + 1
  81.                 str = n & "月" & Arr1(i - 1) & d2.Keys(p - 1) '月份地区品种
  82.                 If d3.Exists(str) Then Arr2(i, j) = d3(str)
  83.                 xj = xj + Arr2(i, j)
  84.             Else
  85.                 Arr2(i, j) = xj
  86.                 hj = hj + xj
  87.                 xj = 0
  88.             End If
  89.         Next j
  90.         Arr2(i, j - 1) = hj
  91.         hj = 0
  92.     Next i
  93.     Range("F3").Resize(i - 1, j - 1).Value = Arr2
  94.     Application.ScreenUpdating = True
  95. End Sub
复制代码

评分

参与人数 1金币 +8 收起 理由
无聊的疯子 + 8 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2013-12-10 05:17 | 显示全部楼层
  1. Sub 作业1()

  2. Dim arr1, arr2(1 To 1000, 1 To 10)
  3. Dim d1 As New Dictionary
  4. Dim d2 As New Dictionary
  5. Dim d3 As New Dictionary
  6. Dim i%, j%, k%
  7.     arr1 = Range("a1").CurrentRegion    '将数据区域赋值给数组
  8.     For i = 2 To UBound(arr1)           '循环数组
  9.         If d1.Exists(arr1(i, 1)) = 0 Then   '如有新出现的地区标识赋值给字典
  10.             j = j + 1
  11.             d1(arr1(i, 1)) = j      '记录地区的行号
  12.         End If
  13.         If d2.Exists(arr1(i, 2)) = 0 Then   '如有新出现的品种赋值给字典
  14.             k = k + 1
  15.             d2(arr1(i, 2)) = k      '记录品种出现的列号
  16.         End If
  17.         
  18.         arr2(d1(arr1(i, 1)), d2(arr1(i, 2))) = arr2(d1(arr1(i, 1)), d2(arr1(i, 2))) + arr1(i, 3)    '统计地区及品种标识下的销量
  19.     Next
  20.    
  21.         Range("f2").Resize(d1.Count, 1) = Application.Transpose(d1.Keys)    '输出数据
  22.         Range("g1").Resize(1, d2.Count) = d2.Keys
  23.         Range("g2").Resize(d1.Count, d2.Count) = arr2
  24.    
  25.    
  26. End Sub


  27. Sub 作业2()
  28. Dim arr, arr1(1 To 100, 1 To 49)
  29. Dim i%, k%, n%, j%, m%
  30. Dim d1 As New Dictionary
  31. Dim d2 As New Dictionary    '省
  32. Dim d3 As New Dictionary    '产品
  33. arr = Range("a1").CurrentRegion     '获取表格数据
  34. For i = 2 To UBound(arr)    '从表格第二行开始循环
  35. '以地区+品种+销售月份 汇总销售数量
  36.     d1(arr(i, 2) & arr(i, 3) & Month(arr(i, 1)) & "月") = d1(arr(i, 2) & arr(i, 3) & Month(arr(i, 1)) & "月") + arr(i, 4)
  37.     If d2.Exists(arr(i, 2)) = 0 Then    '获取唯一地区标识给字典D2
  38.         k = k + 1   '生成数组的行号
  39.         d2(arr(i, 2)) = k
  40.     End If
  41.     If d3.Exists(arr(i, 3)) = 0 Then d3(arr(i, 3)) = ""     '获取品种唯一值给字典D3
  42.    
  43.     Next

  44.     For j = 0 To d2.Count - 1   '按地区及月份嵌套循环赋值给数组ARR1
  45.     For i = 1 To 12
  46.         On Error Resume Next    '如果超过字典下标退出循环,月份为12个月,数据区域只有11月
  47.         
  48.         arr1(j + 1, (i - 1) * 4 + 1) = d1(d2.Keys(j) & d3.Keys(1) & i & "月")   '将草莓销售量赋值给数组
  49.         arr1(j + 1, (i - 1) * 4 + 2) = d1(d2.Keys(j) & d3.Keys(2) & i & "月")   ''将苹果销售量赋值给数组
  50.         arr1(j + 1, (i - 1) * 4 + 3) = d1(d2.Keys(j) & d3.Keys(0) & i & "月")      '将葡萄销售量赋值给数组
  51.         n = arr1(j + 1, (i - 1) * 4 + 1) + arr1(j + 1, (i - 1) * 4 + 2) + arr1(j + 1, (i - 1) * 4 + 3)  '统计三个品种销售量给变量
  52.         If n <> 0 Then arr1(j + 1, (i - 1) * 4 + 4) = n         '如果销量小计不等于0则将销售量赋值给小计列
  53.         m = m + arr1(j + 1, (i - 1) * 4 + 4)        '统计第月的小计和
  54.     Next
  55.         If m <> 0 Then arr1(j + 1, 49) = m          '将12个月的小计和赋值给总计所在的数组位置
  56.         m = 0           '总计归0
  57.     Next
  58.    


  59.     Range("f3").Resize(d2.Count, 1) = Application.Transpose(d2.Keys)    '输出各地区列表
  60.     Range("g3").Resize(d2.Count, 49) = arr1             '输出统计销售量



  61. End Sub
复制代码

评分

参与人数 1金币 +8 收起 理由
无聊的疯子 + 8 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2013-12-10 09:33 | 显示全部楼层
只做了二个,先交了吧
  1. Option Explicit

  2. Sub 作业1()
  3.     Dim arr, brr
  4.     Dim d1 As New Dictionary, d2 As New Dictionary
  5.     Dim i%
  6.     With Sheets("作业一")
  7.         arr = .Range("a1").CurrentRegion.Value
  8.          '定义一个数组,用来放统计的结果
  9.         ReDim brr(1 To 40, 1 To 20)
  10.         For i = 2 To UBound(arr)
  11.             'd1字典用来放地区,确定地区的位置
  12.             'd2字典用来放品种,确定品种的位置
  13.             If Not d1.exists(arr(i, 1)) Then d1(arr(i, 1)) = d1.Count + 1
  14.             If Not d2.exists(arr(i, 2)) Then d2(arr(i, 2)) = d2.Count + 1
  15.             '通过二个字典获得数组的标号,进行统计
  16.             brr(d1(arr(i, 1)), d2(arr(i, 2))) = brr(d1(arr(i, 1)), d2(arr(i, 2))) + arr(i, 3)
  17.         Next i
  18.         '将统计结果写入指定单元格
  19.         .Range("f2:f6000").ClearContents
  20.         .Range("g:l").ClearContents
  21.         .Range("f2").Resize(d1.Count) = Application.Transpose(d1.Keys)
  22.         .Range("g1").Resize(1, d2.Count) = d2.Keys
  23.         .Range("g2").Resize(d1.Count, d2.Count) = brr
  24.     End With
  25.     '===释放对象
  26.     Set d1 = Nothing
  27.     Set d2 = Nothing
  28.     MsgBox "数据整理完成!", vbInformation + vbOKOnly
  29. End Sub


  30. Sub 作业2通用()
  31.     Dim arr, brr
  32.     Dim d1 As New Dictionary, d2 As New Dictionary
  33.     Dim i%, j%, x%, y%, m As Byte
  34.     With Sheets("作业二")
  35.         arr = .Range("a1").CurrentRegion.Value
  36.         
  37.          '===第一次循环,建立二个字典
  38.         For i = 2 To UBound(arr)
  39.             'd1字典用来放地区,确定地区的位置
  40.             'd2字典用来放品种,确定品种的位置
  41.             If Not d1.exists(arr(i, 2)) Then d1(arr(i, 2)) = d1.Count + 1
  42.             If Not d2.exists(arr(i, 3)) Then d2(arr(i, 3)) = d2.Count + 1
  43.         Next i
  44.         '===
  45.         
  46.          '定义一个数组,用来放统计的结果。行数是省份数量,列数是(品种数+小计)*12个月+合计
  47.         ReDim brr(-1 To d1.Count, 1 To (d2.Count + 1) * 12 + 1)
  48.         
  49.         '===
  50.         '确定表头的内容
  51.         For i = 1 To UBound(brr, 2) - 1 Step d2.Count + 1
  52.             brr(-1, i) = (i \ (d2.Count + 1) + 1) & "月"
  53.             For j = 0 To d2.Count - 1
  54.                 brr(0, i + j) = d2.Keys(j)
  55.             Next j
  56.             brr(0, i + d2.Count) = "小计"
  57.         Next i
  58.         brr(0, (d2.Count + 1) * 12 + 1) = "合计"
  59.         '===
  60.         
  61.         '===第二次循环,进行数据统计
  62.         For i = 2 To UBound(arr)
  63.             m = Month(arr(i, 1)) '月份
  64.             x = d1(arr(i, 2)) '省份的位置,即数组的行标
  65.             y = d2(arr(i, 3)) + (d2.Count + 1) * (m - 1) '每月品种的位置,即数组的列标
  66.             brr(x, y) = brr(x, y) + arr(i, 4) '各月各品种统计
  67.             brr(x, m * (d2.Count + 1)) = brr(x, m * (d2.Count + 1)) + arr(i, 4) '各月的小计
  68.             brr(x, (d2.Count + 1) * 12 + 1) = brr(x, (d2.Count + 1) * 12 + 1) + arr(i, 4) '合计
  69.         Next i
  70.         '===
  71.         
  72.         '===在指定单元格写入数据及设置格式
  73.         .Range("f:fz").Clear
  74.         .Range("f1") = "省份"
  75.         .Range("f3").Resize(d1.Count) = Application.Transpose(d1.Keys)
  76.         .Range("g1").Resize(UBound(brr) - LBound(brr) + 1, UBound(brr, 2)) = brr
  77.          
  78.          '===设置格式
  79.         .Range("f1:f2").Merge
  80.         For i = 7 To 7 + UBound(brr, 2) - 2 Step d2.Count + 1
  81.             .Cells(1, i).Resize(1, d2.Count + 1).Merge
  82.         Next i
  83.         .Range("f1").Offset(, UBound(brr, 2)).Resize(2).Merge
  84.         With .Range("f1").Resize(UBound(brr) - LBound(brr) + 1, UBound(brr, 2) + 1)
  85.             .Borders.LineStyle = xlContinuous
  86.             .HorizontalAlignment = xlCenter
  87.             .VerticalAlignment = xlCenter
  88.         End With
  89.     End With
  90.     '===释放对象
  91.     Set d1 = Nothing
  92.     Set d2 = Nothing
  93.     MsgBox "数据整理完成!", vbInformation + vbOKOnly
  94. End Sub
复制代码

评分

参与人数 1金币 +8 收起 理由
无聊的疯子 + 8 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2013-12-10 23:41 | 显示全部楼层
本帖最后由 xdragon 于 2013-12-11 18:09 编辑

C08:xdragon
  1. Sub 作业一()

  2.   Dim arr, brr(), crr(), drr(), d1 As Object, d2 As Object, i&, cnt1&, cnt2 As Byte
  3.   arr = Range("A2:C" & Cells(Rows.Count, 1).End(3).Row).Value
  4.   Set d1 = CreateObject("scripting.dictionary")
  5.   Set d2 = CreateObject("scripting.dictionary")
  6.   ReDim brr(1 To UBound(arr), 1 To 1) '设置一个足够行数的数组
  7.   
  8.   For i = 1 To UBound(arr)
  9.     If Not d1.exists(arr(i, 1)) Then '如果地区不存在则添加入字典d1
  10.       cnt1 = cnt1 + 1
  11.       ReDim Preserve crr(1 To cnt1 + 1)
  12.       d1(arr(i, 1)) = cnt1
  13.     End If
  14.     If Not d2.exists(arr(i, 2)) Then '如果品种不存在则添加入字典d2
  15.       cnt2 = cnt2 + 1
  16.       ReDim Preserve brr(1 To UBound(arr), 1 To cnt2)
  17.       ReDim Preserve drr(1 To cnt2 + 1)
  18.       d2(arr(i, 2)) = cnt2
  19.     End If
  20.     brr(d1(arr(i, 1)), d2(arr(i, 2))) = brr(d1(arr(i, 1)), d2(arr(i, 2))) + arr(i, 3) '对相同地区、品种的数量进行累计
  21.     crr(d1(arr(i, 1)) + 1) = crr(d1(arr(i, 1)) + 1) + arr(i, 3) '行合计
  22.     drr(d2(arr(i, 2)) + 1) = drr(d2(arr(i, 2)) + 1) + arr(i, 3) '列合计
  23.   Next
  24.   crr(1) = "合计": drr(1) = "合计"
  25.   
  26.   Dim rng As Range '导出区域设置,导出相关数据
  27.   Set rng = Range("F1")
  28.   With rng
  29.     .CurrentRegion.ClearContents
  30.     .Value = "    品种" & Chr(10) & "地区"
  31.     .Offset(1, 0).Resize(cnt1) = Application.Transpose(d1.keys) '地区
  32.     .Offset(0, 1).Resize(1, cnt2) = d2.keys '品种
  33.     .Offset(1, 1).Resize(cnt1, cnt2) = brr '数量
  34.     .Offset(cnt1 + 1).Resize(1, cnt2 + 1) = drr '列合计
  35.     .Offset(0, cnt2 + 1).Resize(cnt1 + 1, 1) = Application.Transpose(crr) '行合计
  36.     .Offset(cnt1 + 1, cnt2 + 1) = Application.Sum(rng.Offset(cnt1 + 1, 1).Resize(1, cnt2)) '总计
  37.   End With
  38.   
  39. End Sub

  40. Sub 作业二()
  41.   Dim arr, brr(), crr()
  42.   Dim i As Integer, tmp
  43.   Dim cnt2 As Integer, cnt3 As Integer, str As String
  44.   Dim d2 As Object, d3 As Object
  45.   Dim rng As Range
  46.   '数据源导入数组中
  47.   arr = Range("A2:D" & Cells(Rows.Count, 1).End(3).Row).Value
  48.   
  49.   Set d2 = CreateObject("scripting.dictionary")
  50.   Set d3 = CreateObject("scripting.dictionary")
  51.   
  52.   crr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
  53.   For i = 1 To UBound(arr)
  54.     '统计行高
  55.     If Not d2.exists(arr(i, 2)) Then cnt2 = cnt2 + 1: d2(arr(i, 2)) = cnt2
  56.     '统计品种不同的数量
  57.     If Not d3.exists(arr(i, 3)) Then cnt3 = cnt3 + 1: d3(arr(i, 3)) = cnt3
  58.   Next
  59.   '根据d1,d2,d3设置导出数组大小
  60.   ReDim brr(1 To d2.Count, 1 To (d3.Count + 1) * 12 + 1)
  61.   
  62.   For i = 1 To UBound(arr)
  63.     tmp = (crr(Month(arr(i, 1)) - 1) - 1) * (d3.Count + 1) + d3(arr(i, 3))
  64.     brr(d2(arr(i, 2)), tmp) = brr(d2(arr(i, 2)), tmp) + arr(i, 4) '累计各月各品种产品各地区的数量
  65.     tmp = (tmp \ (d3.Count + 1) + 1) * (d3.Count + 1)
  66.     brr(d2(arr(i, 2)), tmp) = brr(d2(arr(i, 2)), tmp) + arr(i, 4) '计算各月小计
  67.     brr(d2(arr(i, 2)), UBound(brr, 2)) = brr(d2(arr(i, 2)), UBound(brr, 2)) + arr(i, 4) '计算各月总计
  68.   Next
  69.   
  70.   Erase arr
  71.   ReDim arr(1 To 2, 1 To UBound(brr, 2))
  72.   tmp = d3.keys
  73.   '设置第一行与第二行列标签

  74.   For i = 1 To UBound(arr, 2) - 1
  75.     If i Mod (UBound(tmp) + 2) = 1 Then arr(1, i) = crr(i \ (UBound(tmp) + 2)) & "月"
  76.     If i Mod (UBound(tmp) + 2) = 0 Then
  77.       arr(2, i) = "小计"
  78.     Else
  79.       arr(2, i) = tmp(i Mod (UBound(tmp) + 2) - 1)
  80.     End If
  81.   Next
  82.   arr(1, UBound(arr, 2)) = "合计"
  83.   Erase tmp
  84.   '设置结果导出区域,导出各处理结果
  85.   Set rng = [f1]
  86.   With rng
  87.     .CurrentRegion.UnMerge
  88.     .CurrentRegion.Clear
  89.     .Value = "省份"
  90.     .Offset(2, 0).Resize(d2.Count) = Application.Transpose(d2.keys)
  91.     .Offset(0, 1).Resize(2, UBound(arr, 2)) = arr
  92.     .Offset(2, 1).Resize(d2.Count, UBound(brr, 2)) = brr
  93.     .Resize(2 + d2.Count, 1 + UBound(brr, 2)).Borders.LineStyle = 1
  94.     '设置标题行与标题列的背景颜色
  95.     .Resize(2 + d2.Count).Interior.ThemeColor = xlThemeColorAccent6
  96.     .Resize(2, 1 + UBound(brr, 2)).Interior.ThemeColor = xlThemeColorAccent6
  97.     '合并单元格设置
  98.     For i = 1 To UBound(arr, 2) - 1 Step d3.Count + 1
  99.        .Offset(0, i).Resize(1, d3.Count + 1).Merge
  100.        .Offset(0, i).Resize(1, d3.Count + 1).HorizontalAlignment = xlCenter
  101.     Next
  102.     .Resize(2).Merge
  103.     .Offset(0, UBound(arr, 2)).Resize(2).Merge
  104.   End With
  105.   
  106.   d2.RemoveAll
  107.   d3.RemoveAll
  108.   
  109. End Sub

  110. Sub 作业三()
  111.     Dim username As String, password As String, i As Integer
  112.    
  113.     With CreateObject("internetexplorer.application")
  114.         .Visible = False
  115.         .navigate "http://www.excelpx.com/forum-99-1.html"
  116.         
  117.         Do Until .readystate = 4
  118.           DoEvents
  119.         Loop
  120.         
  121.         On Error Resume Next
  122.         username = InputBox("请输入登录用户名(若为自动登录请点击取消)", "提示")
  123.         If username = "" Then GoTo messagesend
  124.         password = InputBox("请输入登录密码", "提示")
  125.         With .document.forms(0)
  126.           .all("username").Value = username
  127.           .all("password").Value = password
  128.           .submit
  129.         End With
  130.         Do Until .readystate = 4
  131.           DoEvents
  132.         Loop
  133.         
  134. messagesend:
  135.         For i = 2 To Cells(Rows.Count, 1).End(3).Row
  136.            message i
  137.         Next
  138.     End With
  139.    
  140. End Sub

  141. Sub message(i As Integer)
  142.     With CreateObject("internetexplorer.application")
  143.         .Visible = False
  144.         .navigate "http://www.excelpx.com/forum-99-1.html"
  145.         Do Until .readystate = 4
  146.           DoEvents
  147.         Loop
  148.         With .document
  149.             .getelementbyid("typeid_fast").Click
  150.             .all.tags("li")(1).Click
  151.             .forms(2).all("subject").Value = Cells(i, 1)
  152.             .forms(2).all("message").Value = Cells(i, 2)
  153.             .forms(2).submit
  154.         End With
  155.         Do Until .readystate = 4
  156.           DoEvents
  157.         Loop
  158.         .Quit
  159.         If i = Cells(Rows.Count, 1).End(3).Row Then Exit Sub
  160.     End With
  161.     Application.Wait Now + TimeValue("00:00:25")
  162. End Sub
复制代码
作业三时间仓促,没有最终测试了。。。万一死机了,见谅啊。。。。。

评分

参与人数 1金币 +15 收起 理由
无聊的疯子 + 15 作业3没有代码说明,扣一分

查看全部评分

回复

使用道具 举报

发表于 2013-12-11 14:27 | 显示全部楼层
本帖最后由 无聊的疯子 于 2013-12-14 21:28 编辑

C01:sayloveyou2010(小妮子)

  1. Sub 作业一()
  2.     Dim dic As New Dictionary, dic1 As New Dictionary, arr(), brr(), x% '定义相关变量
  3.     arr = Range("A1").CurrentRegion.Offset(1).Value '把数据源装入数组arr
  4.     ReDim brr(1 To UBound(arr), 1 To UBound(arr)) '重新定义结果数组brr
  5.     For x = 1 To UBound(arr) '循环arr一维
  6.         If Not dic.Exists(arr(x, 1)) Then '判断地区是否存在
  7.             dic(arr(x, 1)) = dic.Count + 1 '不存在创建字典,并记录item值
  8.         End If
  9.         If Not dic1.Exists(arr(x, 2)) Then '判断品种是否存在
  10.             dic1(arr(x, 2)) = dic1.Count + 1 '不存在创建字典,并记录item值
  11.         End If
  12.         brr(dic(arr(x, 1)), dic1(arr(x, 2))) = brr(dic(arr(x, 1)), dic1(arr(x, 2))) + arr(x, 3) '累加数量
  13.     Next x
  14.     [F2].Resize(dic.Count, 1) = Application.Transpose(dic.Keys) '读出地区
  15.     [G1].Resize(1, dic1.Count) = dic1.Keys '读出品种
  16.     [G2].Resize(dic.Count - 1, dic1.Count - 1) = brr '读出数量
  17.     Set dic = Nothing: Set dic1 = Nothing
  18.     Erase arr, brr
  19. End Sub
  20. Sub 作业二()
  21.     Dim dic As New Dictionary, dic1 As New Dictionary, arr(), brr(), x%, MyD$ '定义相关变量
  22.     arr = Range("A1").CurrentRegion.Offset(1).Value '把区域装入数组
  23.     ReDim brr(1 To UBound(arr), 1 To UBound(arr)) '重新定义结果数组
  24.     For x = 1 To UBound(arr) '循环数据源数组一维
  25.         If Not dic.Exists(arr(x, 2)) Then '判断不存在
  26.             dic(arr(x, 2)) = dic.Count + 1 '创建字典,并记录item
  27.         End If
  28.     Next x
  29.     For x = 1 To 12
  30.         dic1(x & "月" & vbTab & "草莓") = dic1.Count + 1 '创建水果字典,并记录item
  31.         dic1(x & "月" & vbTab & "苹果") = dic1.Count + 1
  32.         dic1(x & "月" & vbTab & "葡萄") = dic1.Count + 1
  33.         dic1(x & "月" & vbTab & "小计") = dic1.Count + 1
  34.     Next x
  35.     dic1("合计") = 1
  36.     For x = 1 To UBound(arr) - 1 '循环Arr一维
  37.         MyD = Month(arr(x, 1)) & "月" & vbTab & arr(x, 3) '联合
  38.         brr(dic(arr(x, 2)), dic1(MyD)) = brr(dic(arr(x, 2)), dic1(MyD)) + arr(x, 4)   '数量累加
  39.         brr(dic(arr(x, 2)), dic1(Month(arr(x, 1)) & "月" & vbTab & "小计")) = brr(dic(arr(x, 2)), dic1(Month(arr(x, 1)) & "月" & vbTab & "小计")) + arr(x, 4) '计算小计
  40.         brr(dic(arr(x, 2)), dic1.Count) = brr(dic(arr(x, 2)), dic1.Count) + arr(x, 4) '计算合计
  41.     Next x
  42.     [G3].Resize(dic.Count + 1, dic1.Count) = brr '读出结果数组
  43.     Set dic = Nothing: Set dic1 = Nothing
  44.     Erase arr, brr
  45. End Sub
  46. Sub 作业二附加题()
  47.     Dim dic As New Dictionary, dic1 As New Dictionary, dic2 As New Dictionary, arr(), brr(), x%, MyD$, Z% '定义相关变量
  48.     Application.DisplayAlerts = False
  49.     Range("F1:ZZ10000").Clear '清除内容
  50.     arr = Range("A1").CurrentRegion.Offset(1).Value '把区域装入数组
  51.     ReDim brr(1 To UBound(arr), 1 To UBound(arr)) '重新定义结果数组
  52.     For x = 1 To UBound(arr)  '循环数据源数组一维
  53.         If Not dic.Exists(arr(x, 2)) Then '判断不存在
  54.             dic(arr(x, 2)) = dic.Count + 1 '创建地区字典,并记录item
  55.         End If
  56.     Next x
  57.     For x = 1 To UBound(arr)  '循环数据源数组一维
  58.         If Not dic.Exists(arr(x, 3)) Then '判断不存在
  59.             dic2(arr(x, 3)) = dic2.Count + 1 '创建水果字典,并记录item
  60.         End If
  61.     Next x
  62.     For x = 1 To 12
  63.         For Z = 1 To dic2.Count
  64.             dic1(x & "月" & vbTab & dic2.Keys(Z - 1)) = dic1.Count + 1 '创建水果字典,并记录item
  65.         Next Z
  66.         dic1(x & "月" & vbTab & "小计") = dic1.Count + 1
  67.     Next x
  68.     dic1("合计") = 1
  69.     For x = 1 To UBound(arr) - 1 '循环Arr一维
  70.         MyD = Month(arr(x, 1)) & "月" & vbTab & arr(x, 3) '联合
  71.         brr(dic(arr(x, 2)) + 2, dic1(MyD)) = brr(dic(arr(x, 2)) + 2, dic1(MyD)) + arr(x, 4) '数量累加
  72.         brr(dic(arr(x, 2)) + 2, dic1(Month(arr(x, 1)) & "月" & vbTab & "小计")) = brr(dic(arr(x, 2)) + 2, dic1(Month(arr(x, 1)) & "月" & vbTab & "小计")) + arr(x, 4) '计算小计
  73.         brr(dic(arr(x, 2)) + 2, dic1.Count) = brr(dic(arr(x, 2)) + 2, dic1.Count) + arr(x, 4) '计算合计
  74.     Next x
  75.     [F3].Resize(dic.Count, 1) = Application.Transpose(dic.Keys) '读出地区
  76.     Cells(1, 6) = "省份"
  77.     For x = 1 To dic1.Count - 1
  78.         brr(1, x) = VBA.Split(dic1.Keys(x - 1), vbTab)(0) '月份
  79.         brr(2, x) = VBA.Split(dic1.Keys(x - 1), vbTab)(1) '水果
  80.     Next x
  81.     [G1].Resize(dic.Count + 1, dic1.Count) = brr '读出结果数组
  82.     For x = 4 To dic1.Count - 1 Step dic2.Count + 1 '循环月份
  83.         Range(Cells(1, x + dic2.Count), Cells(1, x + 2 * dic2.Count)).Merge   '设置格式月份合并
  84.         Range(Cells(1, x + dic2.Count), Cells(1, x + 2 * dic2.Count)).HorizontalAlignment = xlCenter   '月份居中
  85.     Next x
  86.     Range(Cells(1, dic2.Count + 3), Cells(2, dic2.Count + 3)).Merge: Range(Cells(1, dic2.Count + 3), Cells(2, dic2.Count + 1)).HorizontalAlignment = xlCenter '省份
  87.     Range(Cells(1, dic1.Count + 6), Cells(2, dic1.Count + 6)).Merge: Range(Cells(1, dic1.Count + 6), Cells(2, dic1.Count + 6)).HorizontalAlignment = xlCenter '合计
  88.     Cells(1, dic1.Count + 6).Value = "合计"
  89.     Range("F1").CurrentRegion.Select: Selection.Borders.LineStyle = 1: Columns("F:ZZ").EntireColumn.AutoFit '添加边框,自动适合列宽
  90.     Application.DisplayAlerts = True
  91.     Set dic = Nothing: Set dic1 = Nothing
  92.     Erase arr, brr
  93. End Sub

  94. Sub 作业三()
  95.     Dim IE As Object, readystate_complete
  96.     Set IE = CreateObject("Internetexplorer.Application") '创建IE对象
  97.     With IE
  98.         .navigate "http://www.excelpx.com/forum-99-1.html" '打开精英培训网聊天室网页
  99.         .Visible = True '可见
  100.         Do Until IE.ReadyState = 4 '如果加载完成
  101.         Loop
  102.             .document.all("username").Value = "usedname" '输入用户名
  103.             .document.all("password").Value = "passward" '输入密码
  104.             .document.forms(0).submit '登陆
  105.     End With
  106.     Set IE = Nothing
  107. End Sub
复制代码

评分

参与人数 1金币 +18 收起 理由
无聊的疯子 + 18 作业3给个参与奖2分吧,居然还把自己的用户.

查看全部评分

回复

使用道具 举报

发表于 2013-12-12 08:07 | 显示全部楼层
  1. Option Explicit
  2. Sub 作业一()
  3. Dim arrData, arrRes(1 To 1000, 1 To 100)
  4. Dim i, 行, 列
  5. Set 行 = CreateObject("scripting.dictionary")
  6. Set 列 = CreateObject("scripting.dictionary")
  7. Sheet2.Select      '选择工作表
  8. arrRes(1, 1) = Range("f1")
  9. arrData = Range("a1").CurrentRegion.Offset(1)
  10. For i = 1 To UBound(arrData)
  11.     If arrData(i, 1) <> "" Then
  12.         If Not 行.exists(arrData(i, 1)) Then 行(arrData(i, 1)) = 行.Count + 1
  13.         If Not 列.exists(arrData(i, 2)) Then 列(arrData(i, 2)) = 列.Count + 1
  14.         arrRes(行(arrData(i, 1)) + 1, 1) = arrData(i, 1)
  15.         arrRes(1, 列(arrData(i, 2)) + 1) = arrData(i, 2)
  16.         arrRes(行(arrData(i, 1)) + 1, 列(arrData(i, 2)) + 1) = arrRes(行(arrData(i, 1)) + 1, 列(arrData(i, 2)) + 1) + arrData(i, 3)
  17.     End If
  18. Next
  19. Range("f1").CurrentRegion.ClearContents
  20. Range("f1").Resize(1000, 100) = arrRes
  21. End Sub
  22. Sub 作业二()
  23. Dim arrData, arrRes()
  24. Dim i, j, d, bytMon(1 To 12), bytTemp, bytTemp2
  25. Set d = CreateObject("scripting.dictionary")
  26. Sheets("作业二").Select
  27. For i = 1 To UBound(bytMon)
  28.     bytMon(i) = i & "月"
  29. Next
  30. arrData = Range("a1").CurrentRegion
  31. For i = 2 To UBound(arrData)
  32.     d(arrData(i, 3)) = ""
  33. Next
  34. bytTemp = d.Count
  35. d.RemoveAll  '重新利用,低碳生活
  36. ReDim arrRes(1 To 1000, 1 To (bytTemp + 1) * 12 + 2)
  37. bytTemp = 0
  38. For i = 2 To UBound(arrData)
  39.     If i = 2 Then
  40.         arrRes(1, 1) = "省份"
  41.         For j = 2 To UBound(arrRes, 2)
  42.             If (j - 1) Mod ((UBound(arrRes, 2) - 2) / 12) = 1 Then arrRes(1, j) = (j - 1) \ ((UBound(arrRes, 2) - 2) / 12) + 1 & "月"
  43.             If j Mod ((UBound(arrRes, 2) - 2) / 12) = 1 Then arrRes(2, j) = "小计"
  44.             If j = UBound(arrRes, 2) Then arrRes(1, j) = "总计"
  45.         Next
  46.     End If
  47.     If Not d.exists(arrData(i, 3)) Then
  48.         bytTemp = bytTemp + 1
  49.         d(arrData(i, 3)) = bytTemp
  50.         For j = 2 To UBound(arrRes, 2)
  51.         
  52.             If (j - 1) Mod 4 = bytTemp Then arrRes(2, j) = arrData(i, 3)
  53.         Next
  54.     End If
  55.     If Not d.exists(arrData(i, 2)) Then
  56.         bytTemp2 = bytTemp2 + 1
  57.         d(arrData(i, 2)) = bytTemp2
  58.         arrRes(bytTemp2 + 2, 1) = arrData(i, 2)
  59.     End If
  60.     arrRes(d(arrData(i, 2)) + 2, (Val(Month(arrData(i, 1))) - 1) * ((UBound(arrRes, 2) - 2) / 12) + d(arrData(i, 3)) + 1) = _
  61.     arrRes(d(arrData(i, 2)) + 2, (Val(Month(arrData(i, 1))) - 1) * ((UBound(arrRes, 2) - 2) / 12) + d(arrData(i, 3)) + 1) + arrData(i, 4)
  62.     arrRes(d(arrData(i, 2)) + 2, (Val(Month(arrData(i, 1))) - 1) * (UBound(arrRes, 2) - 2) / 12 + (UBound(arrRes, 2) - 2) / 12 + 1) = _
  63.     arrRes(d(arrData(i, 2)) + 2, (Val(Month(arrData(i, 1))) - 1) * (UBound(arrRes, 2) - 2) / 12 + (UBound(arrRes, 2) - 2) / 12 + 1) + arrData(i, 4)
  64.     arrRes(d(arrData(i, 2)) + 2, UBound(arrRes, 2)) = arrRes(d(arrData(i, 2)) + 2, UBound(arrRes, 2)) + arrData(i, 4)
  65. Next
  66. Range("F1:BC1000").ClearContents
  67. Range("F1").Resize(1000, UBound(arrRes, 2)) = arrRes
  68. End Sub

  69. Sub 作业三()
  70. Dim i
  71. For i = 2 To 4
  72.     If i > 2 Then
  73.         Application.Wait (Now + TimeValue("0:00:15"))   '两次发帖时间要间隔15秒
  74.     End If
  75.         With CreateObject("internetexplorer.application")
  76.                 .Visible = True
  77.                 .Navigate "http://www.excelpx.com/forum-99-1.html"
  78.                 Do Until .ReadyState = 4
  79.                     DoEvents
  80.                 Loop
  81.                 .Document.All.tags("li")(1).Click
  82.                 .Document.getElementById("subject").Value = Sheet1.Cells(i, 1).Value
  83.                 .Document.getElementById("fastpostmessage").Value = Sheet1.Cells(i, 2).Value
  84.                 .Document.getElementById("fastpostsubmit").Click
  85.         End With
  86.         
  87. Next
  88. End Sub
复制代码

点评

交作业时间在讲作业之后,代码无说明,给个安慰奖~~  发表于 2013-12-14 21:43

评分

参与人数 1金币 +6 收起 理由
无聊的疯子 + 6 安慰奖

查看全部评分

回复

使用道具 举报

发表于 2013-12-15 21:06 | 显示全部楼层
作业三才做好

  1. Sub 作业3()
  2.     Dim ie As New InternetExplorer '创建一个IE对象
  3.     Dim arr, i
  4.     Dim myname$, mykey$
  5.     myname = "VBA小菜菜"
  6.     mykey = "123456"
  7.     arr = ThisWorkbook.Sheets("作业三").Range("a1").CurrentRegion.Value
  8.     For i = 2 To UBound(arr)
  9.         With ie
  10.             .Navigate "http://www.excelpx.com/forum-99-1.html" 'T
  11.             .Visible = True '打开后要显示网页
  12.             Do Until ie.ReadyState = READYSTATE_COMPLETE '如果IE加载宏完成
  13.                 DoEvents '在窗体加载时转交操作权
  14.             Loop
  15.             With .Document
  16.                 If InStr(1, .body.innertext, "注册") > 0 Then '判断是否已登录
  17.                     .all("username").Value = myname 'Document.All("元素名称或ID") 可以引用某个元素
  18.                     .all("password").Value = mykey '在密码框内输入密码
  19.                     .forms(0).submit 'submit方法可以提交表单内容到服务器,froms(0)表示当前doc中第一个表单
  20.                 End If
  21.                 Application.Wait Now + TimeValue("0:00:05") '等待页面加载完全
  22.                     .all("typeid").Value = "242" '选择主题分类
  23.                     .all("subject").Value = arr(i, 1) '输入标题
  24.                     .all("message").Value = arr(i, 2) '输入内容
  25.                     .all("topicsubmit").Click '提交帖子
  26.             End With
  27. '            .Quit
  28.             Application.Wait Now + TimeValue("0:00:15") '间隔15秒发帖
  29. '            Stop
  30.         End With
  31.     Next i
  32.     Set ie = Nothing
  33. End Sub
复制代码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 11:21 , Processed in 0.466112 second(s), 19 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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