|
D09:fffox上交作业
作业一:- Sub 作业一_a()
- Dim arr, brr(), Dq, Pz
- Dim d_dq, d_pz, d
- Dim i&, j%
- Set d_dq = CreateObject("scripting.dictionary") '地区
- Set d_pz = CreateObject("scripting.dictionary") '品种
- Set d = CreateObject("scripting.dictionary") '数量
- arr = Sheets("作业一").Range("a1").CurrentRegion
- For i = 2 To UBound(arr) '源数组内循环,分别以地区、品种及地区&品种为关键字创建字典
- d_dq(arr(i, 1)) = ""
- d_pz(arr(i, 2)) = ""
- d(arr(i, 1) & arr(i, 2)) = d(arr(i, 1) & arr(i, 2)) + arr(i, 3)
- Next
- Pz = d_pz.Keys
- Dq = d_dq.Keys
- '根据地区、品种字典大小,重新定义结果数组
- ReDim brr(1 To d_dq.Count + 1, 1 To d_pz.Count + 1)
- brr(1, 1) = " 品种" & vbCrLf & "地区"
- For j = 2 To UBound(brr, 2) '标题行
- brr(1, j) = Pz(j - 2)
- Next
- For i = 2 To UBound(brr)
- brr(i, 1) = Dq(i - 2) '地区列
- For j = 2 To UBound(brr, 2)
- brr(i, j) = d(brr(i, 1) & brr(1, j)) '从字典中取数
- Next
- Next
- With Sheets("作业一").Range("f1") '设置格式及数据写入目标区域
- .Resize(Rows.Count, 7).Clear
- .Borders(xlDiagonalDown).LineStyle = 1 '斜线
- .Offset(0, 1).Resize(1, d_pz.Count).HorizontalAlignment = xlCenter '水平距中
- .Offset(1, 0).Resize(d_dq.Count).HorizontalAlignment = xlCenter
- With .Resize(d_dq.Count + 1, d_pz.Count + 1)
- .Value = brr
- .Borders(7).LineStyle = 1 '区域左边的边框
- .Borders(8).LineStyle = 1 '区域顶部的边框
- .Borders(9).LineStyle = 1 '区域底部的边框
- .Borders(10).LineStyle = 1 '区域右边的边框
- .Borders(11).LineStyle = 1 '区域中所有单元格的垂直边框
- .Borders(12).LineStyle = 1 '区域中所有单元格的水平边框
- End With
- End With
- End Sub
- Sub 作业一_b()
- Dim arr, brr(1 To 100, 1 To 100), d_dq, d_pz
- Dim i&, j%, iRow As Byte, iCol As Byte, k_Row%, k_Col%
- Set d_dq = CreateObject("scripting.dictionary")
- Set d_pz = CreateObject("scripting.dictionary")
- arr = Sheets("作业一").Range("a1").CurrentRegion
- k_Row = 1: k_Col = 1
- For i = 2 To UBound(arr)
- If Not d_dq.Exists(arr(i, 1)) Then
- k_Row = k_Row + 1 '数值增加1
- iRow = k_Row '行号
- d_dq(arr(i, 1)) = k_Row '新行号存入字典
- brr(iRow, 1) = arr(i, 1) '地区
- Else
- iRow = d_dq(arr(i, 1)) '从字典中取行号
- End If
- If Not d_pz.Exists(arr(i, 2)) Then
- k_Col = k_Col + 1 '列数值增加1
- iCol = k_Col '列号
- d_pz(arr(i, 2)) = iCol '列号存入字典
- brr(1, iCol) = arr(i, 2) '品种
- Else
- iCol = d_pz(arr(i, 2)) '从字典中取列号
- End If
- brr(iRow, iCol) = brr(iRow, iCol) + arr(i, 3)
- Next
- brr(1, 1) = " 品种" & vbCrLf & "地区"
- With Sheets("作业一").Range("t1")
- .Resize(Rows.Count, 7).Clear
- .Borders(xlDiagonalDown).LineStyle = 1 '斜线
- .Offset(0, 1).Resize(1, d_pz.Count).HorizontalAlignment = xlCenter '水平距中
- .Offset(1, 0).Resize(d_dq.Count).HorizontalAlignment = xlCenter
- With .Resize(d_dq.Count + 1, d_pz.Count + 1)
- .Value = brr
- .Borders(7).LineStyle = 1 '单元格边框线
- .Borders(8).LineStyle = 1
- .Borders(9).LineStyle = 1
- .Borders(10).LineStyle = 1
- .Borders(11).LineStyle = 1
- .Borders(12).LineStyle = 1
- End With
- End With
- End Sub
复制代码 作业二:- Sub 作业二A()
- Dim arr, brr(), d
- Dim i%, j As Byte, iRow%, iCol%, k%
- Const str As String = "草莓苹果葡萄"
-
- Set d = CreateObject("scripting.dictionary")
- arr = Sheets("作业二").Range("a1").CurrentRegion
-
- For i = 2 To UBound(arr)
- '计算结果数组中的列号
- iCol = (Month(arr(i, 1)) - 1) * 4 + (InStr(str, arr(i, 3)) + 1) / 2 + 1
- If Not d.Exists(arr(i, 2)) Then
- k = k + 1
- iRow = k '行号
- d(arr(i, 2)) = k
- ReDim Preserve brr(1 To 50, 1 To k) '重新定义结果数组
- brr(1, k) = arr(i, 2)
- Else
- iRow = d(arr(i, 2))
- End If
- brr(iCol, iRow) = brr(iCol, iRow) + arr(i, 4) '结果数组赋值
- Next
- For i = 1 To k '计算小计及合计
- For j = 1 To 12
- brr(4 * j + 1, i) = brr(4 * j - 2, i) + brr(4 * j - 1, i) + brr(4 * j, i)
- brr(50, i) = brr(50, i) + brr(4 * j + 1, i)
- Next
- Next
- With Sheets("作业二").Range("f3")
- .Resize(1000, 50).ClearContents
- .Resize(k, 50) = WorksheetFunction.Transpose(brr)
- End With
- End Sub
复制代码 作业二:附加,可自动适应月份、品种变化增减标题- Sub 作业二B()
- Dim arr, brr()
- Dim dMon As New Dictionary '创建月份字典
- Dim dDq As New Dictionary '创建地区字典
- Dim dPz As New Dictionary '创建品种字典
- Dim d As New Dictionary '创建数量字典
- Dim x%, y%, z%, k%, str$, ColEnd%, RowEnd%
- Dim Mon, Dq, Pz
- '读入源数据,字典赋值
- arr = Sheets("作业二").Range("a1").CurrentRegion
- For x = 0 To 2
- dPz.Add Array("草莓", "苹果", "葡萄")(x), ""
- Next
- For x = 2 To UBound(arr)
- str = Month(arr(x, 1)) & "月" & arr(x, 2) & arr(x, 3)
- d(str) = d(str) + arr(x, 4)
- dMon(Month(arr(x, 1))) = ""
- dDq(arr(x, 2)) = ""
- If Not dPz.Exists(arr(x, 3)) Then dPz(arr(x, 3)) = ""
- Next
-
- '重新声明结果数组,标题行赋值
- k = dPz.Count + 1
- ColEnd = dMon.Count * k + 2
- RowEnd = dDq.Count + 2
- ReDim brr(1 To RowEnd, 1 To ColEnd)
- For x = 1 To dMon.Count
- brr(1, k * (x - 1) + 2) = dMon.Keys(x - 1) & "月"
- For y = 1 To k - 1
- brr(2, k * (x - 1) + y + 1) = dPz.Keys(y - 1)
- Next
- brr(2, k * (x - 1) + y + 1) = "小计"
- Next
- brr(1, 1) = "省份"
- brr(1, ColEnd) = "合计"
-
- For x = 3 To RowEnd
- brr(x, 1) = dDq.Keys(x - 3)
- For y = 1 To dMon.Count
- For z = 1 To k - 1
- str = brr(1, k * (y - 1) + 2) & brr(x, 1) & brr(2, k * (y - 1) + z + 1)
- brr(x, k * (y - 1) + z + 1) = d(str)
- brr(x, k * y + 1) = brr(x, k * y + 1) + brr(x, k * (y - 1) + z + 1) '小计
- Next
- brr(x, ColEnd) = brr(x, ColEnd) + brr(x, k * y + 1) '合计
- Next
- Next
- '目标区域赋值,格式设置
- With Sheets("作业二")
- .Range("bf1", .Cells(Rows.Count, .Cells(1, Columns.Count).End(xlToLeft).Column)).Clear
- With .Range("bf1")
- .Resize(2, ColEnd).HorizontalAlignment = xlCenter '标题行居中
- .Resize(2, ColEnd).Interior.Color = RGB(255, 204, 153)
- .Resize(RowEnd).HorizontalAlignment = xlCenter '地区列居中
- .Resize(RowEnd).Interior.Color = RGB(255, 204, 153)
- .Resize(2).Merge '单元格合并
- .Offset(0, ColEnd - 1).Resize(2).Merge
- For x = 1 To dMon.Count
- .Offset(0, k * (x - 1) + 1).Resize(1, k).Merge
- Next
- With .Resize(RowEnd, ColEnd)
- .Value = brr
- .Borders(7).LineStyle = 1 '单元格边框
- .Borders(8).LineStyle = 1
- .Borders(9).LineStyle = 1
- .Borders(10).LineStyle = 1
- .Borders(11).LineStyle = 1
- .Borders(12).LineStyle = 1
- End With
- End With
- End With
- End Sub
复制代码 作业三:用了个笨方法实现循环发贴
经测试,IE6,IE8均成功。- Sub 作业三()
- Dim ie
- Dim i%
- For i = 2 To 4
- Set ie = CreateObject("internetexplorer.application")
- With ie
- .Navigate "http://www.excelpx.com/forum-99-1.html" '打开指定的网页
- .Visible = True '显示网页
- Do Until .ReadyState = READYSTATE_COMPLETE '如果IE加载宏完成
- DoEvents
- Loop
- With .Document
- .getElementById("typeid_fast").Click '点击选择主题分类
- .all.tags("li")(1).Click '点击选择文字
- .all("subject").Value = Sheets("作业三").Cells(i, 1).Value
- .all("message").Value = Sheets("作业三").Cells(i, 2).Value
- .forms(2).submit '提交表单
- End With
- While .ReadyState <> 4 Or .Busy
- DoEvents
- Wend
- .Quit
- End With
- Set ie = Nothing
- Application.Wait (Now + TimeValue("0:00:10")) '间隔10秒后再继续
- Next
- End Sub
复制代码 |
评分
-
查看全部评分
|