一个othercat宏脚本实现excel排除筛选

时间:2024-01-26 18:21:17

需求示例:

一个othercat宏脚本实现excel排除筛选_VBA

有上述三列excel表格数据,需在第三列输出与第一列自身分类不同的IP网段,例如C2格需要输出非运维的网段,即10.3.52和10.4.52,C4格输出非机构的IP网段即10.1.55、10.2.124和10.4.52

解决方法:

Excel中没有提供直接的方法或函数,可以一次性将“不属于”某个分类的所有值列出。这需要使用宏VBA脚本。

按 Alt + F11 在 Excel 中打开 VBA 编辑器

在编辑器中选择 插入 > 模块

粘贴以下代码到模块中

Function OtherCat(cat_range As Range, ip_range As Range, cat As Range)
    Dim result As String
    For i = 1 To cat_range.Count
        If cat_range.Cells(i, 1).Value <> cat.Value Then
            result = result & ", " & ip_range.Cells(i, 1).Value
        End If
    Next i
    OtherCat = Mid(result, 3) 
End Function

关闭VBA编辑器

然后就可以在 Excel 中像其它函数一样使用 OtherCat 函数。

假设 "分类" 在 A 列,“IP网段” 在 B 列,“需隔离的网段”在 C 列,可以在单元格 C2 中输入 =OtherCat(A$2:A$5, B$2:B$5, A2),拖动单元格边角填充其它单元格得到相应结果。

函数的解释说明:

这个宏函数名为 OtherCat,它接受三个参数:cat_range(分类范围),ip_range(对应的IP范围)和cat(需要排除的分类)。

该函数的主要目的是将cat_range中除了与cat相等的分类之外的所有IP值合并为一个字符串,并返回这个字符串。

函数先声明了一个变量 result,用于存储合并后的字符串。

然后,使用一个 For 循环遍历 cat_range 中的每个单元格(分类),并通过 If 语句判断当前分类是否等于 cat。

如果不等于,就将对应的IP(ip_range.Cells(i, 1).Value)添加到结果字符串 result 中。

在循环结束后,通过 Mid(result, 3) 去掉结果字符串中开头的逗号和空格,并将最终的结果返回给函数。

简而言之,这个宏函数的作用是从给定的分类范围中排除指定的分类,并将剩余的IP值合并为一个字符串返回。


Mid 是一个字符串函数,用于从一个字符串中提取指定位置的字串。它的语法是:Mid(string, start, length)。

string 是要从中提取字串的源字符串。

start 是要开始提取的起始位置(从1开始计数)。

length 是要提取的字串的长度(可选参数)。如果省略,则会提取从起始位置到源字符串末尾的所有字符。

在这个宏函数中,Mid(result, 3) 是将 result 字符串从第3个字符开始(即去掉了开头的逗号和空格)提取为一个新的字串,并将其作为函数的返回值。

补充:

若无法启用宏可参考:https://blog.51cto.com/gaoweiliang/9426576