Excel精英培训网

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

[已解决]需要做一个简单的筛选功能

[复制链接]
发表于 2015-11-13 08:12 | 显示全部楼层 |阅读模式
本帖最后由 爱疯 于 2015-11-13 09:02 编辑

各位高手好,
      小弟需要做一个简单的筛选功能:
      1,在EXCEl中已形成了透视表,目的:可以选择供应商编码进行筛选内容;但其他供应商可以看到相互的内容所以我想只有
在输入供应商编码一栏(下面右边)里输入对应的编码才能相应筛选后看到对应的信息(如下格式)。否则看不到任何信息。各位是否可以帮忙编个小程序?谢谢大家了。


                                                        
供应商编码         301004                        输入供应商编码:        301004        <------在这个格子里输入编码,左面出现相应的编码后进行筛选。        
                                                        
最佳答案
2015-11-14 11:13
本帖最后由 神隐汀渚 于 2015-11-14 11:38 编辑

才学的 可能比较慢 {:16:} 1.gif
  1. Sub 供应商信息查询()
  2. Dim i As String, arr(), sht As Worksheet
  3.     Range("a2:u300").Clear
  4.     i = Application.InputBox("请输入供应商编号", , , , , , , 1)
  5.     Dim t As Single
  6.         t = Timer
  7.     If i = False Then Exit Sub
  8.     Set sht = Sheets("物料信息总表")
  9.     If WorksheetFunction.CountIf(sht.Range("c1:c1000"), i) = 0 Then
  10.         MsgBox "此物料编号不存在"
  11.         Exit Sub
  12.     End If
  13.     arr = sht.Range("a2:u" & sht.Range("a1").End(xlDown).Row)
  14. Dim j As Long, brr(1 To 3000), k As Long
  15.     k = 0
  16.     For j = 1 To UBound(arr)
  17.         If arr(j, 3) = i Then
  18.             k = k + 1
  19.             brr(k) = sht.Range("a" & j + 1 & ":u" & j + 1)
  20.         Range("a" & k + 2 & ":u" & k + 2) = brr(k)
  21.         Range("a" & k + 2 & ":u" & k + 2).Select
  22.         End If
  23.     Next j
  24.     Range("a2:u2") = sht.Range("a1:u1").Value
  25.     Dim crr(), m As Integer, s As Integer, sums As Double, x As Integer
  26.         crr = Range("f3:u" & Range("a2").End(xlDown).Row)
  27.         x = Range("a2").End(xlToRight).Column - 4
  28.         Application.ScreenUpdating = False
  29.         For m = x To 1 Step -1
  30.             sums = 0
  31.             For s = 1 To Range("a3").End(xlDown).Row - 2
  32.                 sums = sums + crr(s, m)
  33.             Next s
  34.             If sums = 0 Then
  35.                 Columns(Chr(69 + m) & ":" & Chr(69 + m)).Select
  36.                 Selection.Delete Shift:=xlToLeft
  37.                 Else: GoTo 1
  38.             End If
  39. 1:
  40.         Next m
  41.     Application.ScreenUpdating = True
  42.     Range("a2").CurrentRegion.Select
  43.         Cells.EntireColumn.AutoFit
  44.         Cells.EntireRow.AutoFit
  45.         With Selection.Font
  46.             .Name = "宋体"
  47.             .Size = 10
  48.         End With
  49.         With Selection.Borders
  50.             .LineStyle = xlContinuous
  51.         End With
  52.         With Selection
  53.         .HorizontalAlignment = xlCenter
  54.         .VerticalAlignment = xlCenter
  55.         End With
  56.     MsgBox (Format(Timer - t, "0.00000s"))
  57. End Sub

复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2015-11-13 12:19 | 显示全部楼层
谢谢各位了!

计划.zip

92.13 KB, 下载次数: 9

回复

使用道具 举报

发表于 2015-11-14 11:13 | 显示全部楼层    本楼为最佳答案   
本帖最后由 神隐汀渚 于 2015-11-14 11:38 编辑

才学的 可能比较慢 {:16:} 1.gif
  1. Sub 供应商信息查询()
  2. Dim i As String, arr(), sht As Worksheet
  3.     Range("a2:u300").Clear
  4.     i = Application.InputBox("请输入供应商编号", , , , , , , 1)
  5.     Dim t As Single
  6.         t = Timer
  7.     If i = False Then Exit Sub
  8.     Set sht = Sheets("物料信息总表")
  9.     If WorksheetFunction.CountIf(sht.Range("c1:c1000"), i) = 0 Then
  10.         MsgBox "此物料编号不存在"
  11.         Exit Sub
  12.     End If
  13.     arr = sht.Range("a2:u" & sht.Range("a1").End(xlDown).Row)
  14. Dim j As Long, brr(1 To 3000), k As Long
  15.     k = 0
  16.     For j = 1 To UBound(arr)
  17.         If arr(j, 3) = i Then
  18.             k = k + 1
  19.             brr(k) = sht.Range("a" & j + 1 & ":u" & j + 1)
  20.         Range("a" & k + 2 & ":u" & k + 2) = brr(k)
  21.         Range("a" & k + 2 & ":u" & k + 2).Select
  22.         End If
  23.     Next j
  24.     Range("a2:u2") = sht.Range("a1:u1").Value
  25.     Dim crr(), m As Integer, s As Integer, sums As Double, x As Integer
  26.         crr = Range("f3:u" & Range("a2").End(xlDown).Row)
  27.         x = Range("a2").End(xlToRight).Column - 4
  28.         Application.ScreenUpdating = False
  29.         For m = x To 1 Step -1
  30.             sums = 0
  31.             For s = 1 To Range("a3").End(xlDown).Row - 2
  32.                 sums = sums + crr(s, m)
  33.             Next s
  34.             If sums = 0 Then
  35.                 Columns(Chr(69 + m) & ":" & Chr(69 + m)).Select
  36.                 Selection.Delete Shift:=xlToLeft
  37.                 Else: GoTo 1
  38.             End If
  39. 1:
  40.         Next m
  41.     Application.ScreenUpdating = True
  42.     Range("a2").CurrentRegion.Select
  43.         Cells.EntireColumn.AutoFit
  44.         Cells.EntireRow.AutoFit
  45.         With Selection.Font
  46.             .Name = "宋体"
  47.             .Size = 10
  48.         End With
  49.         With Selection.Borders
  50.             .LineStyle = xlContinuous
  51.         End With
  52.         With Selection
  53.         .HorizontalAlignment = xlCenter
  54.         .VerticalAlignment = xlCenter
  55.         End With
  56.     MsgBox (Format(Timer - t, "0.00000s"))
  57. End Sub

复制代码

计划-48814.rar

99.13 KB, 下载次数: 11

评分

参与人数 1 +1 收起 理由
corient + 1 很给力

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2015-11-14 23:25 | 显示全部楼层
神隐汀渚 发表于 2015-11-14 11:13
才学的 可能比较慢

非常感谢神隐汀渚大侠你的帮助,受益匪浅。能否再请教一个问题:是否可以让E列筛选后不显示出来?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-21 06:23 , Processed in 0.395590 second(s), 18 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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