前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA示例:查找并分别列出找到的所有值

VBA示例:查找并分别列出找到的所有值

作者头像
fanjy
发布2024-06-04 19:38:06
1540
发布2024-06-04 19:38:06
举报
文章被收录于专栏:完美Excel完美Excel

标签:VBA

如下图1所示,有一系列数据,其中Yl代表“Yellow”,Re代表“Red”,Bl代表“Blue”,Gr代表“Green”。

图1

现在,要查找各颜色对应的数值,并将找到的值列出来,如下图2所示。

图2

可以使用下面的过程:

代码语言:javascript
复制
Sub SeperateVars()
 Dim var As Variant, x As Long
 Dim yl As Long, re As Long, bl As Long, gr As Long
 
 With Application
   ReDim yVar(.CountIf(Range("B:B"), "yl") - 1, 1 To 1)
   ReDim rVar(.CountIf(Range("B:B"), "re") - 1, 1 To 1)
   ReDim bVar(.CountIf(Range("B:B"), "bl") - 1, 1 To 1)
   ReDim gVar(.CountIf(Range("B:B"), "gr") - 1, 1 To 1)
 End With
 var = Range("A2:B" & Range("A" & Rows.Count).End(xlUp).Row).Value
 
 For x = 1 To UBound(var)
   Select Case UCase(var(x, 2))
   Case "YL"
     yVar(yl, 1) = var(x, 1): yl = yl + 1
   Case "RE"
     rVar(re, 1) = var(x, 1): re = re + 1
   Case "BL"
     bVar(bl, 1) = var(x, 1): bl = bl + 1
   Case "GR"
     gVar(gr, 1) = var(x, 1): gr = gr + 1
   End Select
 Next x
 
 Range("G1") = "Yellow": Range("G2").Resize(UBound(yVar) + 1) = yVar
 Range("H1") = "Red": Range("H2").Resize(UBound(rVar) + 1) = rVar
 Range("I1") = "Blue": Range("I2").Resize(UBound(bVar) + 1) = bVar
 Range("J1") = "Green": Range("J2").Resize(UBound(gVar) + 1) = gVar
End Sub

也可以使用下面的过程:

代码语言:javascript
复制
Sub OneVar()
 Dim var As Variant, x As Long
 Dim y As Long, r As Long, b As Long, g As Long
 var = Range("A2:B" & Range("A" & Rows.Count).End(xlUp).Row).Value
 
 With Application
   ReDim oVar(.Max(.CountIf(Range("B:B"), "yl"), _
     .CountIf(Range("B:B"), "re"), _
     .CountIf(Range("B:B"), "bl"), _
     .CountIf(Range("B:B"), "gr")), 1 To 4)
 End With
 
 For x = 0 To 3
   oVar(0, x + 1) = Split("Yellow,Red,Blue,Green", ",")(x)
 Next x
 For x = 1 To UBound(var)
   Select Case UCase(var(x, 2))
   Case "YL"
     y = y + 1: oVar(y, 1) = var(x, 1)
   Case "RE"
     r = r + 1: oVar(r, 2) = var(x, 1)
   Case "BL"
     b = b + 1: oVar(b, 3) = var(x, 1)
   Case "GR"
     g = g + 1: oVar(g, 4) = var(x, 1)
   End Select
 Next x
 
 Range("G1").Resize(UBound(oVar) + 1, UBound(oVar, 2)) = oVar
End Sub

还可以借助于辅助工作表,如下图3所示。

图3

VBA过程如下:

代码语言:javascript
复制
Sub test()
 Dim rng As Range
 Dim CritVar As Variant
 Dim x As Long
 Dim aRng As Range
 
 CritVar = Sheet2.Range("A2:B" & Sheet2.Range("A" & Rows.Count).End(xlUp).Row).Value
 Set rng = Sheet1.Range("A1").CurrentRegion
 If Not Sheet1.AutoFilterMode Then
   rng.AutoFilter
 
   For x = 1 To UBound(CritVar)
     If Application.CountIf(Sheet1.Range("B:B"), CritVar(x, 1)) > 0 Then
     With rng
       .AutoFilter 2, CritVar(x, 1)
       .Offset(1).Resize(.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible).Copy
     End With
     With Sheet3
       Set aRng = .Cells(2, .Cells(1, Columns.Count).End(xlToLeft).Column + 1)
     End With
     With aRng
       .PasteSpecial xlValues
       .Offset(-1).Value = CritVar(x, 2)
     End With
     Application.CutCopyMode = False
   End If
 Next x
 rng.AutoFilter
 Sheet3.Select
End Sub

运行后的结果如下图4所示。

图4

很好的几段程序,有兴趣的朋友可以研究。

可以在完美Excel微信公众号发送消息:

分别查找所有值

获取示例工作簿的下载链接。

或者,直接到知识星球App完美Excel社群下载该示例工作簿。

注:本文示例整理自vbaexpress.com,供有兴趣的朋友参考。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档