Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!

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

  [复制链接]
发表于 2012-5-10 15:17 | 显示全部楼层
16组:libenwen2011   (UID: 514207)

Sub 筛选()
Dim arr(), ar(), k, x, j, I, Y, z, xx
z = 5
I = Sheets("查询").Range("B2")
ar = Array(0, "A店", "B店", "C店")
Range("a5:d17") = " "
For Y = 1 To 3
    j = 1
    Sheets(ar(Y)).Select
    k = Application.CountIf(Sheets(ar(Y)).[B:B], I)
    ReDim arr(1 To k, 1 To 2)
    For x = 2 To Range("b65536").End(xlUp).Row
       If Cells(x, 2) = I Then
         arr(j, 1) = Cells(x, 1)
         arr(j, 2) = Cells(x, 3)
         Sheets("查询").Cells(z, 1) = ar(Y)
         Sheets("查询").Cells(z, 2) = arr(j, 1)
         Sheets("查询").Cells(z, 3) = I
         Sheets("查询").Cells(z, 4) = arr(j, 2)
         j = j + 1
         z = z + 1
       End If
    Next x
Next Y
Sheets("查询").Select
End Sub

第14课作业.rar

9.8 KB, 下载次数: 13

评分

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

查看全部评分

回复

使用道具 举报

发表于 2012-5-10 18:23 | 显示全部楼层

  1. Sub 筛选()
  2. Range("a5:d1000").Clear
  3. Dim sheetcount As Integer, x As Integer, arr(1 To 10000, 1 To 4)
  4. Dim k As Integer
  5. For sheetcount = 1 To 3
  6.      With Sheets(sheetcount)
  7.        For x = 2 To .Range("a65536").End(xlUp).Row
  8.          If .Cells(x, "b") = Range("b2") Then
  9.             k = k + 1
  10.             arr(k, 1) = .Name
  11.             arr(k, 2) = .Cells(x, "a")
  12.             arr(k, 3) = .Cells(x, "b")
  13.             arr(k, 4) = .Cells(x, "c")
  14.          End If
  15.         Next x
  16.      End With
  17. Next sheetcount
  18. Range("a5").Resize(k, 4) = arr
  19. End Sub
复制代码
H19:chenzhi_juan

评分

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

查看全部评分

回复

使用道具 举报

发表于 2012-5-10 19:26 | 显示全部楼层
来交下数组2作业!H组 H15:hactnet

Sub 筛选()
   
    Sheets("查询").Range("A5:D1000") = ""                       '筛选前清空
   
    Dim 店 As Integer
    Dim 店名, 品名
    Dim arr()                                                   '定义数组
    Dim k, X, j, y                                              '定义计数
   
    品名 = Sheets("查询").Range("B2")                           '要筛选的值
   
    For 店 = 1 To Sheets.Count                                  '计算表总数
   
        店名 = Sheets(店).Name                                  '表名赋给变量
        
        If Sheets(店).Name Like "*店" Then                      '判断表名是否含"店"
        
        k = Application.CountIf(Sheets(店).[b:b], 品名)         '统计单内符合条件的品名数
        
        If k = 0 Then                                           '判断K值,防止K值为0时数组出错
            k = k + 1
        Else
            k = k
        End If
        
            j = 1
        ReDim arr(1 To k, 1 To 4)                                   '跟据符合条件的品名数重新定义数组大小
        
            For X = 2 To Sheets(店).Range("A65536").End(xlUp).Row   '循环把符合品名条件的数据赋予数组
                If Sheets(店).Cells(X, 2) = 品名 Then
                    arr(j, 1) = 店名
                    arr(j, 2) = Sheets(店).Cells(X, 1)
                    arr(j, 3) = Sheets(店).Cells(X, 2)
                    arr(j, 4) = Sheets(店).Cells(X, 3)
                    j = j + 1
                End If
            Next X
            y = Sheets("查询").Range("A65536").End(xlUp).Row + 1    '指定数组数据写出位置
            Sheets("查询").Range("A" & y).Resize(k, 4) = arr()      '把数组数据写出到指定位置
        End If
    Next 店

End Sub

VBA入门第14课作业-H15-hactnet.rar

10.71 KB, 下载次数: 6

评分

参与人数 1金币 +9 收起 理由
兰色幻想 + 9 答案正确,稍复杂些

查看全部评分

回复

使用道具 举报

发表于 2012-5-10 22:22 | 显示全部楼层
本帖最后由 byhdch 于 2012-5-11 13:10 编辑

A09:byhdch       请老师批改作业
Sub 筛选()
    Dim arr1(), arr2(), arr3(), arr4()
    Dim rg As Range, i, k As Integer
    Sheets("查询").Select
    For i = 1 To Sheets.Count
        If Sheets(i).Name <> "查询" Then
            With Sheets(i)
                For Each rg In .Range("b2:b" & .Range("b65536").End(xlUp).Row)
                    If rg = Sheets("查询").Range("b2") Then
                        k = k + 1
                        ReDim Preserve arr1(1 To 1, 1 To k)
                        ReDim Preserve arr2(1 To 1, 1 To k)
                        ReDim Preserve arr3(1 To 1, 1 To k)
                        ReDim Preserve arr4(1 To 1, 1 To k)
                        arr1(1, k) = rg.Offset(0, -1)
                        arr2(1, k) = rg
                        arr3(1, k) = rg.Offset(0, 1)
                        arr4(1, k) = Sheets(i).Name
                    End If
                Next rg
            End With
        End If
    Next i
    With Sheets("查询")
        .Range("a5:d" & Range("a65536").End(xlUp).Row) = ""
        .Range("b5").Resize(k) = Application.Transpose(arr1)
        .Range("c5").Resize(k) = Application.Transpose(arr2)
        .Range("d5").Resize(k) = Application.Transpose(arr3)
        .Range("a5").Resize(k) = Application.Transpose(arr4)
    End With
End Sub

第14课作业 A09byhdch.rar (13.36 KB, 下载次数: 6)

评分

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

查看全部评分

回复

使用道具 举报

发表于 2012-5-10 23:03 | 显示全部楼层
我的作业如下,请批改。谢谢! D15兰江自由鱼_第14课作业.rar (10.8 KB, 下载次数: 6)

评分

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

查看全部评分

回复

使用道具 举报

发表于 2012-5-11 22:01 | 显示全部楼层
Sub 筛选()

Dim i As Integer, m As Integer, n As Integer, x As Integer
Dim str As String
Dim arr, arr1(1 To 100000, 1 To 4)

str = ActiveSheet.Range("b2")
n = ActiveSheet.Range("a65536").End(xlUp).Row
Rows("5:" & n).Delete
x = 1
For i = 1 To Sheets.Count

    If Sheets(i).Name <> "查询" Then

        arr = Sheets(i).Range("a1").CurrentRegion

        For m = 2 To UBound(arr, 1)

            If arr(m, 2) = str Then

                arr1(x, 1) = Sheets(i).Name
                arr1(x, 2) = arr(m, 1)
                arr1(x, 3) = str
                arr1(x, 4) = arr(m, 3)
                x = x + 1

            End If

        Next m

    End If

Next i

Sheets("查询").Range("a5").Resize(x, 4) = arr1

End Sub


21组第14课作业.rar

11.28 KB, 下载次数: 6

评分

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

查看全部评分

回复

使用道具 举报

发表于 2012-5-12 16:18 | 显示全部楼层
g17:szczm121 第14课作业SZCZM121.rar (14.97 KB, 下载次数: 2)

评分

参与人数 1金币 +6 收起 理由
兰色幻想 + 6 方法不是太好

查看全部评分

回复

使用道具 举报

发表于 2012-5-12 17:40 | 显示全部楼层
辛苦校长了~~~~~~~~~~

G05-mfksypss.rar

12.53 KB, 下载次数: 16

评分

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

查看全部评分

回复

使用道具 举报

发表于 2012-5-12 23:19 | 显示全部楼层
Sub 筛选()
Dim x As Integer, y As Integer, k, arr(1 To 10000, 1 To 4)
     Range("a5:d1000") = ""
       For x = 1 To Sheets.Count - 1
         With Sheets(x)
           For y = 1 To .Range("a65536").End(xlUp).Row
             If .Cells(y, 2) = Sheets(4).Range("b2") Then
              k = k + 1
              arr(k, 1) = .Name
              arr(k, 2) = .Cells(y, 1)
              arr(k, 3) = .Cells(y, 2)
              arr(k, 4) = .Cells(y, 3)
             End If
           Next y
         End With
       Next x
     Sheets("查询").Range("a5").Resize(k, 4) = arr
End Sub

第14课作业.xls

36.5 KB, 下载次数: 18

评分

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

查看全部评分

回复

使用道具 举报

发表于 2012-5-12 23:24 | 显示全部楼层
[/hide]
校长辛苦了!
[hide]

第14课作业.rar

12.35 KB, 下载次数: 18

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 01:04 , Processed in 0.506219 second(s), 24 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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