Excel精英培训网

 找回密码
 注册

QQ登录

只需一步,快速开始

你正在寻找更好的Excel学习教程吗?Excel技巧80集+数据透视表+函数初中高全套+VBA80集,想学的这儿全都有
查看: 92|回复: 7

[已解决] [已解决]用INDEX和SMALL数组函数运行太慢,请高手帮忙用VBA解决问题,感谢!

[复制链接]
发表于 2017-10-11 23:05 | 显示全部楼层 |阅读模式
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
=INDEX(总表!A:A,SMALL(IF(总表!$F:$F="销售",ROW(总表!$F:$F),65536),ROW(1:1)))&"",见附件,请帮忙用VBA解决,感谢!

渔业观众1.zip

13.57 KB, 下载次数: 8

上清宫主发布于 2017-10-13 09:14 |显示全部回帖
改自帮助中的示例程序
Sub test()
Sheets("销售").Select
Rows("2:1000").Clear
r% = 1
With Worksheets("总表")
    Set c = .Range("g:g").Find("销售", LookIn:=xlValues, lookat:=xlWhole)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            r = r + 1
            .Range("a" & c.Row & ":g" & c.Row).Copy Cells(r, 1)         
            Set c = .Range("g:g").FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With
End Sub
发表于 2017-10-12 09:16 | 显示全部楼层
=SUMIFS(总表!F$1:F$1000,总表!A$1:A$1000,A2,总表!G$1:G$1000,G2)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-12 21:34 | 显示全部楼层
MRnightf 发表于 2017-10-12 09:16
=SUMIFS(总表!F$1:F$1000,总表!A$1:A$1000,A2,总表!G$1:G$1000,G2)

用了,不行,解决不了问题。最好是用VBA,非常感谢!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-12 21:36 | 显示全部楼层
clb1210 发表于 2017-10-12 21:34
用了,不行,解决不了问题。最好是用VBA,非常感谢!

我需要引用总表F列有“销售”两个字的整行数据。
回复 支持 反对

使用道具 举报

发表于 2017-10-13 09:14 | 显示全部楼层    本楼为最佳答案   
改自帮助中的示例程序
Sub test()
Sheets("销售").Select
Rows("2:1000").Clear
r% = 1
With Worksheets("总表")
    Set c = .Range("g:g").Find("销售", LookIn:=xlValues, lookat:=xlWhole)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            r = r + 1
            .Range("a" & c.Row & ":g" & c.Row).Copy Cells(r, 1)         
            Set c = .Range("g:g").FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With
End Sub
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-13 20:57 | 显示全部楼层
上清宫主 发表于 2017-10-13 09:14
改自帮助中的示例程序
Sub test()
Sheets("销售").Select

太好用了,非常感谢!如果能给解释就更好了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-13 21:04 | 显示全部楼层
clb1210 发表于 2017-10-13 20:57
太好用了,非常感谢!如果能给解释就更好了。

还有一点,如果“总表“工作表数据有改动时,”销售“工作的数据不能自动更新,需要手动运行VBA才能更新,这点能帮忙改良一下吗!谢谢!
回复 支持 反对

使用道具 举报

发表于 2017-10-16 08:54 | 显示全部楼层
高级筛选更适合些:
Sheets("销售").Cells.Clear
Sheets("总表").Select
Application.CutCopyMode = False
Range("AA1:AA2") = [{"单位类型";"销售"}]
Range("a1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "AA1:AA2"), CopyToRange:=Sheets("销售").Range("a1"), Unique:=False
Range("AA1:AA2").Clear

要自动的话加入到单元格事件中去吧
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2017-10-18 00:52 , Processed in 0.078000 second(s), 23 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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