Microsoft VBA Excel VBA学习笔记——双重筛选+复制数值1.0

Excel VBA 多条件筛选及汇总统计 在日常工作中,面对Excel表格数据,为了分类进行统计,通过对表格数据筛选获取分类条目,再按条目实行汇总统计。要完成上面的工作,有人工操作和开发程序两种方法,本文通过一个实例,详细介绍这两种方法。 阅读详情

问题场景

CountryProductCLASS 1CLASS 2CLASS 3CLASS 4CLASS 5CLASS 6…
USApple0.3641416030.8918210610.0591451990.7320110290.0509636560.222464259…
USBanana0.2300833330.4027262180.1548836670.2988904860.7802326210.028592635…
CNApple0.7762370470.5075548320.4819787860.9640947100.6356084830.650148065…
CNBanana0.3144161170.8658298270.8387462250.5848036580.6321439380.635900146…
HKApple0.0389550130.5376865470.3968842280.6462837090.9803163570.729927410…
HKBanana0.9296995670.8759146430.8556512890.3495028630.7788271160.056140485…
USOrange0.6372955100.9663994570.1020057510.3453791540.1828123830.255992180…
USStrawberry0.9378938890.1519479060.2347077400.6263084240.8043764390.138557531…
CNOrange0.5897015550.0298215380.3249992020.1384804010.4108181090.181386365…
CNStrawberry0.5870898860.8703348010.0506607110.7121572250.9460111220.286730440…
HKOrange0.8846342430.8961006870.6758443930.3552472620.4981877420.325255134…
HKStrawberry0.6973443940.4232279320.6502033620.5607843270.2981413310.186946272…

简述:

其实很简单的操作,就是两次筛选后复制Item1全部数据到Item2中,两个Item有且只有一行。

草稿1

  1. 打开工作表:通过工作表名称来定位和激活工作表。
  2. 定位筛选判断列:在第一行中找到Product的列,然后进行筛选。
  3. 筛选指定名称:首先筛选出包含 name1 “Apple”和name2“Banana”的行。
  4. **再次筛选Country **:在筛选出的结果中,基于Country (US、HK、CN)进行进一步筛选并复制数据。
Function FilterAndCopyData(sheetName As String, columnName As String, name1 As String, name2 As String)
    Dim ws As Worksheet
    Dim filterColumn As Long
    Dim lastRow As Long
    Dim i As Long
    
    ' 尝试访问工作表
    On Error Resume Next
    Set ws = ThisWorkbook.Worksheets(sheetName)
    On Error GoTo 0
    
    If ws Is Nothing Then
        MsgBox "工作表 '" & sheetName & "' 不存在。", vbExclamation
        Exit Function
    End If
    
    ' 找到筛选判断列
    filterColumn = 0
    For i = 1 To ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
        If ws.Cells(1, i).Value = columnName Then
            filterColumn = i
            Exit For
        End If
    Next i
    
    If filterColumn = 0 Then
        MsgBox "列 '" & columnName & "' 没有找到。", vbExclamation
        Exit Function
    End If
    
    ' 清除现有筛选
    If ws.AutoFilterMode Then ws.AutoFilterMode = False
    
    ' 应用筛选
    ws.Range("A1").AutoFilter Field:=filterColumn, Criteria1:=name1
    ws.Range("A1").AutoFilter Field:=filterColumn, Criteria2:=name2
    
    ' 复制数据
    lastRow = ws.Cells(ws.Rows.Count, filterColumn).End(xlUp).Row
    For i = 2 To lastRow
        If ws.AutoFilter.Range.Rows(i).Hidden = False Then
            If ws.Cells(i, filterColumn).Value = name1 Then
                ' 找到产地并复制数据
                Select Case ws.Cells(i, "A").Value
                    Case "US", "HK", "CN"
                        ' 复制C列以后的数据到Banana对应行
                        ws.Cells(i, "C").Resize(1, ws.Columns.Count - 3).Copy
                        For j = 2 To lastRow
                            If ws.Cells(j, filterColumn).Value = name2 And ws.Cells(j, "A").Value = ws.Cells(i, "A").Value Then
                                ws.Cells(j, "C").PasteSpecial Paste:=xlPasteValues
                            End If
                        Next j
                End Select
            End If
        End If
    Next i
    
    ' 关闭筛选
    If ws.AutoFilterMode Then ws.AutoFilterMode = False
    
    MsgBox "数据复制完成。"
End Function

草稿2

  1. 接受工作表名称、列名称、以及两个筛选值作为参数。
  2. 在指定的工作表上执行筛选操作。
  3. 对筛选后的数据,按国家分类,将指定类别(Apple)的数值复制到另一个类别(Banana)中。
Sub CopyValuesBasedOnClassAndCountry(wsName As String, columnName As String, value1 As String, value2 As String)
    Dim ws As Worksheet
    Dim lastRow As Long, i As Long
    Dim countryCol As Integer, classCol As Integer, col As Integer
    Dim dataRange As Range, cell As Range
    Dim country As String
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")
    
    ' 设置工作表
    Set ws = ThisWorkbook.Worksheets(wsName)
    
    ' 确定总行数
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    
    ' 查找国家和分类列的索引
    For i = 1 To ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
        If ws.Cells(1, i).Value = "Country" Then
            countryCol = i
        ElseIf ws.Cells(1, i).Value = columnName Then
            classCol = i
        End If
    Next i
    
    ' 遍历所有行
    For i = 2 To lastRow
        If (ws.Cells(i, classCol).Value = value1 Or ws.Cells(i, classCol).Value = value2) Then
            country = ws.Cells(i, countryCol).Value
            If Not dict.Exists(country) Then
                Set dict(country) = New Collection
            End If
            dict(country).Add i
        End If
    Next i
    
    ' 复制数值
    For Each key In dict.Keys
        Dim appleRow As Long
        Dim bananaRow As Long
        For Each idx In dict(key)
            If ws.Cells(idx, classCol).Value = "Apple" Then appleRow = idx
            If ws.Cells(idx, classCol).Value = "Banana" Then bananaRow = idx
        Next
        For col = 3 To ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
            ws.Cells(bananaRow, col).Value = ws.Cells(appleRow, col).Value
        Next col
    Next
    
    MsgBox "数据已经根据指定的规则复制完成。"
End Sub

总结

寻找最佳的方案中》》》

Excel Format Painter 深度解析:从格式复制到视觉一致性工程 Format Painter 是 Excel 中实现视觉一致性最基础也最关键的格式复用工具,其本质是‘渲染层视觉属性’的精准快照与投射,涵盖字体、边框、对齐、数字格式等核心呈现要素,但刻意排除公式、条件格式、列宽等逻辑与布局属性,形成格式与数据的安全隔离。这一设计使其成为财务、运营及数据分析人员提升报表标准化效率的核心杠杆,广泛应用于多表统一对齐、跨工作表格式同步、模板化输出等高频场景。掌握其底层行为边界与快捷键链路(如 Alt+H+F+P、选择性粘贴格式),可将重复性格式操作从线性耗时压缩为毫秒级响应,真 阅读详情

相关推荐

Excel去重计数的底层逻辑与五层技术方案

在Excel中统计不重复值,本质是处理数据唯一性判定、类型一致性与上下文边界的问题。其核心原理在于:Excel不直接存储‘唯一性’属性,而是依赖函数对值进行逐项比对与条件过滤,受数据类型(文本/数值/错误值)、空值形态(空白/空字符串/空格)、大小写敏感性及版本能力共同制约。这一机制决定了单一公式无法通吃所有场景——动态数组函数高效但受限于365/2021版;传统数组公式兼容广却易因空值报错;数据透视表零代码但无法嵌入计算流;Power Query擅长脏数据清洗;VBA提供完全控制但面临宏策略限制。典型应用

congtaixiao7151的博客 328

excel中利用VBA实现筛选功能

笔者使用的是excel 2021家庭或学生版。实现功能:在office的excel中,在一张表中,从表中第4行开始,C列、D列、E列、F列(4列)输入的数据在该四列已经输入的数据中已经存在(输入的数据类型多样化,并且允许4列数据中有空值存在)。此时,提示用户这数据已经存在,请勿重复输入,并且该条新增记录不被保存,怎么实现?

造钞 5091

Excel数据处理核心技巧:从公式计算到数据清洗的实战指南

数据处理是现代办公与数据分析的基础,其核心在于高效、准确地转换和利用信息。在众多工具中,Excel凭借其广泛普及性成为数据处理的重要载体。理解其底层原理,如文件存储结构、计算引擎机制和数据类型识别,是提升效率的关键。例如,.xlsx文件本质是ZIP压缩的XML集合,这解释了为何第三方库读取时性能瓶颈常在解析而非传输。掌握单元格格式、引用方式及计算选项等基础概念,能有效避免公式不计算、引用错误等常见问题。这些技术价值体现在能显著优化工作流,减少手动操作时间。在应用场景上,无论是财务分析、运营报表还是市场调研,

weixin_30247781的博客 405

Excel VBA AutoFilter 多字段筛选

Excel VBA中使用Autofilter方法进行多个字段的筛选

m0_62872215的博客 1万+

Excel无分支逻辑:用布尔运算替代IF提升性能与可维护性

无分支逻辑是Excel高级公式设计的核心范式,指通过布尔值自动转数值(TRUE=1/FALSE=0)、算术组合与函数协同,替代传统IF/IFS等条件分支结构。其底层原理源于Excel的隐式类型转换机制和SUMPRODUCT、CHOOSE、INDEX/MATCH等函数的数组友好特性,具备显著的计算性能优势(实测10万行提速5–8倍)、极强的可维护性(关注点分离、参数化驱动)及跨版本兼容性(原生支持Excel 2003起)。该技术广泛应用于财务建模、销售激励计算、实时仪表盘与大规模报表系统中,尤其适合需高频刷新

weixin_30568591的博客 325

Excel TRIM函数详解:精准清理文本空格的底层逻辑与实战应用

TRIM函数是Excel中用于标准化文本空格结构的基础工具,其核心原理是识别并清除ASCII 32空格的首尾冗余、压缩中间连续空格,但不处理全角空格、换行符或非断空格(NBSP)。这种设计保障了函数的确定性、高性能与跨版本兼容性,使其成为数据清洗流水线中承上启下的关键节点。在财务对账、CRM客户匹配、BI维度建模等场景中,TRIM()常与EXACT()、XLOOKUP()、Power Query协同使用,解决‘肉眼一致却匹配失败’这一高频问题。掌握TRIM()不仅关乎公式书写,更体现数据洁癖思维——它是确保

dht91597的博客 456

Excel VBA AutoFilter 多字段筛选_用vba实现任意列包含字符的高级筛选

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】给大家分享一些关于HTML的面试题。上述代码含义是在名为“Data”的工作表中“A2”到“C10000”范围内的第2列筛选出“啤酒”字段的值;一般情况下其余参数可省略。'选择啤酒字段的所有值(Field:=2,Criteria1:="啤酒",Operator:=xlFilterValues)这段代码含义和上一段代码含义和作用一样,那为什么要写得更复杂呢?

2301_82243839的博客 2010

Excel多条件查询替代VLOOKUP的7种实战方案

多条件查询是Excel数据处理的核心能力,指在多个字段(如部门、地区、年份)同时满足条件下精准定位目标值。其底层原理依赖布尔逻辑运算与坐标定位技术,通过INDEX+MATCH组合构建动态匹配机制,突破VLOOKUP单列单值限制,显著提升查询准确性与工程鲁棒性。该技术广泛应用于财务核算、供应链分析、HR薪酬管理等需交叉筛选的业务场景。本文聚焦真实项目验证的高效解法,涵盖兼容旧版的数组公式、免按CSE的SUMPRODUCT方案,以及Excel 365专属的FILTER函数与LAMBDA自定义函数,兼顾性能、可维

weixin_30667649的博客 339

Excel·VBA多条件筛选组合结果

对于一组数据按照一定数量进行组合,按照既定条件筛选符合的结果。专门的函数判断True/False便于条件4指定不定数量的筛选条件时,不用修改代码就可运行,但也必然导致代码运行速度下降,因而固定条件的筛选不必如此使用函数。中的上下限为最终结果的组合元素个数,但在代码中会转换为“非必选名称”的组合元素个数的上下限。中,“必选名称”每个组合结果必须有,因此仅对“非必选名称”进行组合;对于一组数据按照一定数量进行组合,按照既定条件筛选符合的结果。判断组合对应的某几列的中位数是否符合既定条件,单独定义。

hhhhh_51的博客 4533

Excel网格线与边框的区别:显示、打印与移除的底层逻辑

Excel网格线是工作表视图层的UI辅助线,非单元格格式,不参与计算与打印;而边框是可设置粗细颜色的单元格格式属性,真正支持导出和打印。二者分属不同渲染层级,混淆使用会导致打印空白、性能下降与视觉混乱。掌握网格线的显示控制(视图选项卡)、打印启用(页面布局+打印设置)及安全移除(双路径同步关闭)三大机制,是保障报表专业交付的基础能力。尤其在财务报表、审计底稿、跨部门协作等强规范场景中,正确管理网格线直接关系到数据可读性、格式一致性与协作效率。

weixin_34054931的博客 364

Excel通配符实战指南:*、?、~三大符号原理与高效应用

通配符是Excel文本匹配的底层机制,本质是支持模糊搜索的轻量级模式匹配能力。其核心原理基于字符位置与长度的语义控制:星号(*)匹配任意长度子串,问号(?)定位单字符占位,波浪号(~)实现转义防护。这种设计无需正则基础,却能显著提升数据清洗、条件统计和智能筛选效率,广泛应用于财务凭证识别、HR姓名归类、销售编码校验等真实业务场景。掌握通配符,意味着从‘精确字符串比对’跃迁至‘结构化模式识别’,是Excel用户构建数据直觉的第一课。

soyo的专栏 470

Excel VBA自动化实战:从零到精通,告别重复劳动

办公自动化是提升工作效率的核心技术路径,其原理在于通过编程语言控制软件,将重复性、规则性的手动操作转化为自动执行的脚本。在Excel数据处理领域,VBA(Visual Basic for Applications)是实现自动化的关键技术,它深度集成于Office环境,允许用户扩展Excel功能,实现复杂的数据处理、报表生成和系统集成。其技术价值在于显著减少人工错误、解放人力以聚焦于分析决策,并能构建可复用的自动化流程。典型的应用场景包括财务对账、销售数据清洗、定期报告生成以及跨系统数据同步等。本文聚焦于Ex

weixin_30439067的博客 358

Excel瀑布图实战指南:动态归因与过程可视化

瀑布图是一种以累计变化逻辑呈现数值演进过程的专用图表,其核心原理是将起始值、中间增减项与结束值构建成可追溯的资金或指标流向链。相比普通柱状图,它通过颜色编码(正向/负向)、连接线和分层堆叠,实现财务差异归因、预算变动分析等场景下的直观解释力。技术价值在于将离散数据转化为具因果叙事性的视觉路径,广泛应用于利润拆解、成本波动诊断、销售漏斗转化追踪等业务分析环节。本文聚焦Waterfall Chart Excel原生实现,深入解析动态归因机制与过程可视化落地要点。

weixin_34357436的博客 340

Excel数据类型本质:存储规则决定公式与自动化成败

Excel数据类型不是表面格式,而是底层存储机制,直接决定数值精度、文本完整性、日期可计算性等核心能力。其本质是IEEE 754双精度浮点数(数值型)、UTF-16字符串(文本型)、序列号(日期型)等五类原生类型,每种对应特定的内存表示与运算规则。理解这些原理,才能避免身份证号截断、SUMIFS返回0、VLOOKUP匹配失败等高频故障;支撑Power Query清洗、VBA强类型校验、跨系统数据对接等工程实践。本文聚焦Excel数据类型底层逻辑,结合TYPE函数诊断、分列修复、TEXT/VALUE转换等实战

weixin_34124651的博客 435

Excel XLOOKUP多条件查找实战:4种工业级方案详解

XLOOKUP是Excel 365/2021中替代VLOOKUP和INDEX+MATCH的现代化查找函数,其核心能力在于原生支持数组运算与多条件逻辑组合。从技术原理看,多条件查找本质是多个布尔条件的交集运算(A∧B∧C),XLOOKUP通过连接符法、布尔数组法、FILTER嵌套法和LET变量法四种路径实现该数学过程。相比传统方案,它避免了Ctrl+Shift+Enter数组输入、整表扫描性能瓶颈及格式兼容性问题,显著提升财务对账、HR筛选、销售分析等高频场景的准确率与响应速度。本文聚焦真实业务约束下的方案选

weixin_30315723的博客 481

Excel Sparklines实战指南:轻量趋势可视化核心原理与避坑方法

Sparklines是一种嵌入单元格内的微型趋势图,本质是面向表格场景优化的视觉语法系统,其设计根植于像素级空间约束、单次直觉解读和O(n)轻量计算三大原理。它不替代专业图表,而是通过归一化纵轴、相对高度排序和符号逻辑,在极小空间内激发人类对斜率、极值和变化方向的趋势直觉。在销售看板、财务滚动预测、医疗指标追踪等多行同构时间序列分析中,Sparklines以零学习成本、强上下文绑定和原生Excel集成能力,成为BI工具无法替代的‘隐形生产力’组件。本文聚焦Excel原生SPARKLINE函数的底层逻辑、数据

weixin_33709590的博客 437

Excel除法正确写法:为什么用/不用÷及常见错误解决

Excel除法是电子表格最基础的四则运算之一,其本质是基于ASCII字符规范的公式解析过程。原理上,Excel仅识别英文斜杠'/'作为除法运算符,因'÷'不属于7-bit ASCII字符集,无法通过公式引擎校验;同时,参与运算的单元格必须为数值型数据,文本型数字(如带单引号或不可见空格)将触发#VALUE!错误。该机制保障了跨平台兼容性与函数嵌套稳定性,也决定了VBA、Power Query等进阶工具的语法一致性。典型应用场景包括财务单位换算(元→万元)、运营转化率计算、人事人均产值统计等,均需兼顾数据类型

dgoh41514的博客 432

强化学习-动态规划

动态规划(dynamic programming)是程序设计算法中非常重要的内容,能够高效解决一些经典问题,例如背包问题和最短路径规划。动态规划的基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到目标问题的解。动态规划会保存已解决的子问题的答案,在求解目标问题的过程中,需要这些子问题答案时就可以直接利用,避免重复计算。本章介绍如何用动态规划的思想来求解在马尔可夫决策过程中的最优策略。

qq_45481856的博客 2115

Python in Excel实战指南:零代码基础玩转数据分析

Excel是企业最普及的数据处理工具,但面对复杂分析、自动化建模和动态可视化时往往力不从心。Python作为数据科学核心语言,以其pandas数据处理、matplotlib可视化和scikit-learn机器学习能力著称。Python in Excel将二者深度集成,实现‘计算与呈现一体化’——无需切换环境、不依赖本地安装、代码直写单元格,结果实时回填。它基于Azure云沙箱安全执行,预装稳定库组合,兼顾合规性与易用性。适用于财务、HR、市场等非技术岗位,支撑人力仪表盘、销售预测、自然语言驱动分析等典型场景

weixin_30521161的博客 330

从零到一:手把手教你用STM32和WiFi打造智能温室大棚的物联网核心

本文详细介绍了如何利用STM32单片机和WiFi技术从零构建智能温室大棚的物联网核心系统。内容涵盖硬件选型、传感器集成、低功耗WiFi通信、自动控制逻辑及OLED显示,提供实际部署中的优化技巧和故障排查方案,帮助开发者打造稳定可靠的农业自动化解决方案。

c7d8e的博客 180

程序员应用AI大模型创业实现财务自由的100种赚钱方案原理与实战指南

成功的 AI 创业者都遵循着 “技术 + 需求 + 变现” 的铁三角法则。记住:不是要做 “全能大模型”,而是成为某个垂直领域的 “AI 解决方案专家”。现在就开始行动:用周末 2 小时完成第一个 MVP,下周启动种子用户测试,三个月内找到可复制的盈利模式。当你实现第一个 10 万用户时,会发现财务自由的密码藏在持续迭代的每个 0.1 版本更新中。延伸思考:你的技术背景适合切入哪个细分领域?

AI天才研究院 1383
上一篇: Microsoft VBA Excel VBA函数学习笔记——数据切分熟练度+1
下一篇: Excel 常用快捷键与对应 VBA 方法/属性清单
偷心伊普西隆
博客等级 码龄7年 511粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值