如何使用Google Apps Script过滤Google Sheets单列中的所有值
解决方案
以下分别提供Excel和Google Sheets两个场景下的可用脚本,均可实现H列数值变动时自动重新筛选,仅保留指定值、隐藏其他所有内容的需求。
Excel 端VBA脚本
操作步骤
- 按下
Alt+F11打开VBA编辑器 - 在左侧项目面板双击你需要生效的对应工作表
- 将下方代码粘贴到代码编辑区,修改
targetValue为你需要保留的指定值后保存,将文件另存为.xlsm启用宏的格式即可生效
Private Sub Worksheet_Change(ByVal Target As Range) ' 仅H列内容变更时触发逻辑 If Not Intersect(Target, Me.Columns("H")) Is Nothing Then Dim ws As Worksheet Set ws = Me ' 替换为你需要保留的指定值 Const targetValue As String = "你要保留的内容" ' 清除原有筛选避免冲突 If ws.AutoFilterMode Then ws.AutoFilterMode = False End If ' 应用筛选仅保留指定值 ws.Range("H:H").AutoFilter Field:=1, Criteria1:=targetValue End If End Sub
Google Sheets端Apps Script脚本
操作步骤
- 打开目标表格,点击顶部菜单「扩展程序」>「Apps Script」
- 清空默认代码,粘贴下方代码,修改
targetValue为你需要保留的指定值后保存项目 - 刷新表格即可生效
function onEdit(e) { const activeSheet = e.source.getActiveSheet(); const editedCol = e.range.getColumn(); // 仅H列(第8列)内容变更时触发逻辑 if (editedCol !== 8) return; // 替换为你需要保留的指定值 const targetValue = "你要保留的内容"; const lastRow = activeSheet.getLastRow(); // 清除原有筛选 if (activeSheet.getFilter()) { activeSheet.getFilter().remove(); } // 新建全H列筛选规则 const filterRange = activeSheet.getRange(1, 8, lastRow, 1); const newFilter = filterRange.createFilter(); const filterRule = SpreadsheetApp.newFilterCriteria() .whenTextEqualTo(targetValue) .build(); newFilter.setColumnFilterCriteria(1, filterRule); }
注意事项
- 如果你的表格带表头,可自行调整代码中筛选范围的起始行,避免表头被筛选隐藏
- 如果需要支持大小写不敏感匹配,可修改对应筛选规则的匹配逻辑即可
内容的提问来源于stack exchange,提问作者Nagaram92
相关产品推荐
相关产品推荐

