Excel精英培训网

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

[通知] 统计VBA学习小组正式组的积分帖之作业上交贴(第17周)

  [复制链接]
发表于 2012-5-9 07:57 | 显示全部楼层 |阅读模式
活动类型:
作业上交
开始时间:
2012-5-9 13:42 至 2012-5-15 13:42 商定
活动地点:
VBA学习小组
性别:
不限
已报名人数:
27

本帖最后由 兰色幻想 于 2012-5-15 19:39 编辑

说明:
统计帖每个学员只能跟帖回复一次,也就是在原来回复楼层的基础上点编缉,不要一个链接一层楼,否则不计算积分。

各小组学员上交作业时,一定要点击我要参加注明自己的新组编号和论坛ID如果点击过我要参加但没有跟帖提交作业的,扣该学员5积分;如果跟帖提交了作业,但没有点我要参加的,不给予评分。

请各学员看清上面的说明,免得被扣了分分!
本帖为仅楼主可见帖,直接回复即可!
作业链接:
http://www.excelpx.com/thread-241980-1-1.html

暂未通过 (27 人)

  留言 申请时间
cbg2008 2012-5-15 14:12
liuho1 2012-5-15 13:27
shengxudong 2012-5-15 12:13
zjyxp 2012-5-15 12:00
sliang28 2012-5-15 11:16
ybchxj2010 2012-5-15 10:19
无聊的疯子 2012-5-14 22:06
vbamaster 2012-5-14 21:52
发表于 2012-5-9 15:05 | 显示全部楼层
C12:hrpotter
  1. Sub 筛选()
  2.     Dim ar, br(1 To 10000, 1 To 4)
  3.     Dim i As Integer, j As Integer, k As Integer
  4.     Dim s As String
  5.     s = Range("b2")
  6.     For i = 1 To 3
  7.         ar = Sheets(i).Range("a1").CurrentRegion
  8.         For j = 2 To UBound(ar)
  9.             If ar(j, 2) = s Then
  10.                 k = k + 1
  11.                 br(k, 1) = Sheets(i).Name
  12.                 br(k, 2) = ar(j, 1)
  13.                 br(k, 3) = ar(j, 2)
  14.                 br(k, 4) = ar(j, 3)
  15.             End If
  16.         Next
  17.     Next
  18.     Range("a5:d65536").Clear
  19.     If k > 0 Then Range("a5").Resize(k, 4) = br
  20. End Sub
复制代码
C12-hrpotter-第14课作业.rar (10.43 KB, 下载次数: 20)

评分

参与人数 1金币 +10 收起 理由
兰色幻想 + 10 答案正确

查看全部评分

回复

使用道具 举报

发表于 2012-5-9 16:34 | 显示全部楼层
Sub 筛选()
Dim arr(1 To 100, 1 To 4), i As Integer, j As Integer, sh As Worksheet
Sheets("查询").Range("a5:d100").Clear
j = 1
    For Each sh In ThisWorkbook.Sheets
        If sh.Name <> "查询" Then
            For i = 2 To sh.Range("a" & Rows.Count).End(xlUp).Row
                If sh.Range("b" & i) = Sheets("查询").Range("b2") Then
                    arr(j, 1) = sh.Name
                    arr(j, 2) = sh.Range("a" & i)
                    arr(j, 3) = sh.Range("b" & i)
                    arr(j, 4) = sh.Range("c" & i)
                    j = j + 1
                End If
            Next i
        End If
    Next sh
    Sheets("查询").Range("a5").Resize(j - 1, 4) = arr
End Sub
第14课作业——B19:yl_li.rar (10.6 KB, 下载次数: 8)

评分

参与人数 1金币 +10 收起 理由
兰色幻想 + 10 答案正确

查看全部评分

回复

使用道具 举报

发表于 2012-5-9 18:04 | 显示全部楼层
Sub 筛选()
Dim arr()
Dim x, j, k
Sheets("查询").Range("a5:d" & Sheets("查询").Range("a65536").End(3).Row).ClearContents

For x = 1 To Sheets.Count - 1
  Do
  j = j + 1
   If Sheets(x).Cells(j, 2) = Sheets("查询").[b2] Then
   k = k + 1
   ReDim Preserve arr(1 To 4, 1 To k)
   arr(1, k) = Sheets(x).Name
   arr(2, k) = Sheets(x).Cells(j, 1)
   arr(3, k) = Sheets(x).Cells(j, 2)
   arr(4, k) = Sheets(x).Cells(j, 3)
   End If
  Loop Until j = Sheets(x).Range("a65536").End(3).Row
  j = 0
  Next x
  Sheets("查询").Range("a5").Resize(UBound(arr, 2), 4) = Application.Transpose(arr)
End Sub

评分

参与人数 1金币 +10 收起 理由
兰色幻想 + 10 答案正确

查看全部评分

回复

使用道具 举报

发表于 2012-5-9 20:40 | 显示全部楼层
第14课作业.rar (11.37 KB, 下载次数: 3)

评分

参与人数 1金币 +6 收起 理由
兰色幻想 + 6 数组没有用好

查看全部评分

回复

使用道具 举报

发表于 2012-5-9 21:37 | 显示全部楼层
本帖最后由 我不知道呀 于 2012-5-10 07:11 编辑

Sub 查询()
    Dim sht As Worksheet
    Dim arr, x As Integer, y As Integer, x1 As Integer, x2 As Integer, i As Integer
    Dim arr1(1 To 100, 1 To 4)
    Dim arr2(1 To 100, 1 To 4)
    x1 = 1
    x2 = 1
    For Each sht In Sheets
        If sht.Name <> "查询" Then
            arr = sht.Range("a2:c" & sht.Range("a65536").End(xlUp).Row)
            For x = 1 To UBound(arr)
                For y = 1 To 3
                    arr1(x1, y + 1) = arr(x, y)
                    arr1(x1, 1) = sht.Name
                Next y
                x1 = x1 + 1
            Next x
        End If
        Erase arr
    Next
    For i = 1 To 100
        If arr1(i, 3) = Sheets("查询").Range("b2").Value Then
            For y = 1 To 4
                arr2(x2, y) = arr1(i, y)
            Next y
            x2 = x2 + 1
        End If
    Next i
     Sheets("查询").Range("a5:d100").ClearContents
     Sheets("查询").Range("a5").Resize(UBound(arr2), 4) = arr2
End Sub

评分

参与人数 1金币 +6 收起 理由
兰色幻想 + 6 答案有点麻烦

查看全部评分

回复

使用道具 举报

发表于 2012-5-9 22:18 | 显示全部楼层
E学委:sunjing-zxl 上交第14课作业
第14课作业-E学委-sunjing-zxl.rar (11.96 KB, 下载次数: 6)

评分

参与人数 1金币 +10 收起 理由
兰色幻想 + 10 其实一个循环就可以了

查看全部评分

回复

使用道具 举报

发表于 2012-5-9 23:52 | 显示全部楼层
h22 ls 第14课作业.rar (8.43 KB, 下载次数: 20)

评分

参与人数 1金币 +10 收起 理由
兰色幻想 + 10 答案正确

查看全部评分

回复

使用道具 举报

发表于 2012-5-10 08:36 | 显示全部楼层
Sub 筛选()
Dim arr1, arr2, arr3, arr(), ar()
Dim m, n, i, k, q, H, j As Long
arr1 = Sheets("A店").Range("a2:c" & Sheets("A店").Range("c" & Rows.Count).End(3).Row)
arr2 = Sheets("B店").Range("a2:c" & Sheets("B店").Range("c" & Rows.Count).End(3).Row)
arr3 = Sheets("C店").Range("a2:c" & Sheets("C店").Range("c" & Rows.Count).End(3).Row)
k = UBound(arr1) + UBound(arr2) + UBound(arr3)
ReDim arr(1 To k, 1 To 4)
  For m = 1 To UBound(arr1)
  arr(m, 1) = "A店"
  arr(m, 2) = arr1(m, 1)
  arr(m, 3) = arr1(m, 2)
  arr(m, 4) = arr1(m, 3)
   Next m
  For n = 1 To UBound(arr2)
   arr(m + n - 1, 1) = "B店"
   arr(m + n - 1, 2) = arr2(n, 1)
   arr(m + n - 1, 3) = arr2(n, 2)
   arr(m + n - 1, 4) = arr2(n, 3)
   Next n
   For i = 1 To UBound(arr3)
   arr(m + n + i - 2, 1) = "C店"
   arr(m + n + i - 2, 2) = arr3(i, 1)
   arr(m + n + i - 2, 3) = arr3(i, 2)
   arr(m + n + i - 2, 4) = arr3(i, 3)
   Next i
   H = Application.CountIf(Sheets("A店").Range("B:B"), Range("b2")) + _
       Application.CountIf(Sheets("B店").Range("B:B"), Range("b2")) + _
       Application.CountIf(Sheets("C店").Range("B:B"), Range("b2"))
   ReDim ar(1 To H, 1 To 4)
   
For q = 1 To UBound(arr)

   If arr(q, 3) = Range("b2").Value Then
    j = j + 1
    ar(j, 1) = arr(q, 1)
    ar(j, 2) = arr(q, 2)
    ar(j, 3) = arr(q, 3)
    ar(j, 4) = arr(q, 4)
   End If
  Next q
  Range("a5:d" & Range("d" & Rows.Count).End(xlUp).Row).ClearContents
  Range("A5").Resize(UBound(ar), 4) = ar
  
End Sub

第14课作业.rar

9.57 KB, 下载次数: 6

评分

参与人数 1金币 +5 收起 理由
兰色幻想 + 5 你这方法有点笨了

查看全部评分

回复

使用道具 举报

发表于 2012-5-10 10:52 | 显示全部楼层
Dim arr()
Dim x, j, k
Sheets("查询").Range("a5:d" & Sheets("查询").Range("a65536").End(3).Row).ClearContents
For x = 1 To Sheets.Count - 1
  Do
  j = j + 1
   If Sheets(x).Cells(j, 2) = Sheets("查询").[b2] Then
   k = k + 1
   ReDim Preserve arr(1 To 4, 1 To k)
   arr(1, k) = Sheets(x).Name
   arr(2, k) = Sheets(x).Cells(j, 1)
   arr(3, k) = Sheets(x).Cells(j, 2)
   arr(4, k) = Sheets(x).Cells(j, 3)
   End If
  Loop Until j = Sheets(x).Range("a65536").End(3).Row
  j = 0
  Next x
  Sheets("查询").Range("a5").Resize(UBound(arr, 2), 4) = Application.Transpose(arr)
End Sub

第14课作业.rar (11.13 KB, 下载次数: 9)

评分

参与人数 1金币 +10 收起 理由
兰色幻想 + 10 答案正确

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 06:25 , Processed in 0.308240 second(s), 19 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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