Excel精英培训网

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

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

[复制链接]
发表于 2017-10-11 23:05 | 显示全部楼层 |阅读模式
=INDEX(总表!A:A,SMALL(IF(总表!$F:$F="销售",ROW(总表!$F:$F),65536),ROW(1:1)))&"",见附件,请帮忙用VBA解决,感谢!
最佳答案
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

渔业观众1.zip

13.57 KB, 下载次数: 28

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 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, 2024-4-20 04:13 , Processed in 0.414983 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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