
网友需求:

因网友给的需求表格的行数太多,且全英文,这里不再展示。
这个问题我讲过,我讲的是删除列,网友换成行,把完整匹配改成包含,包含用like
https://www.bilibili.com/video/BV1z64y197Ce

视频共两集:

让我想起一件事,我曾经讲过,有N个工作表,从每个工作表的A1单元格取值汇总到一个工作表中,网友学会了,然后网友问我,那我要是从A2单元格取值怎么写代码?

我再讲A2单元格怎么写,并告诉他们换单元格就换个名字就好了,然后还会有人问换成A3和A4单元格怎么写。。。。你回复了,还会有人问,如果我想第一张表是A1单元格,第二张表是B7单元格,第三张表...... 那你写个字典就好了,Key是表名,Value是取哪个单元格。
同样的问题还出在对文件的整理上,FSO对象和DIR函数很多网友只能照搬我的代码,改一点需求都不想动脑子。
原因不是谁聪明的问题,是网友没有时间看系统课程,不花时间成本,只想快速把事情给办了。这是不可能的,付出>=回报 。 回报>付出 那不现实。
回到今天这个问题上,我做了一张中文的表

关键词:18,东城,大桃
解决网友方案1:CDE列,遇到关键词就删除整行
1、我们知道是哪些列,就可以将这些列合并起来
可以用VBA代码做连接,也可以直接在表里用工作表函数做连接

2、判断【合并】列是否包含关健词,包含就删除整行
删除会改变行号,所以要倒着删。这些知识在ExcelVBA第二季里都讲过
Sub 遇关键字就删除整行()
'确定表最大行
最大行 = Range("A1").CurrentRegion.Rows.Count
'从最后一行开始向第二行倒着循环
For i = 最大行 To 2 Step -1
'关键词放数组里
arr = Array("18", "东城", "大桃")
'循环数组
For j = LBound(arr) To UBound(arr)
'如果单元格包含某个关键词
If Range("F" & i) Like "*" & arr(j) & "*" Then
'就删除并退出本次对数组的循环
Range("F" & i).EntireRow.Delete
Exit For
End If
Next
Next
End Sub 如果你的关键词多了,比如有100多个,不适合用array手工写,我们课上讲了创建数组三种方法,可以使用13.7.3通过单元格区域直接创建数组的方法。

例如我有一张表单独存放关键词

Sub 遇关键字就删除整行()
'确定表最大行
最大行 = Range("A1").CurrentRegion.Rows.Count
'从最后一行开始向第二行倒着循环
For i = 最大行 To 2 Step -1
'关键词放数组里
arr = Sheets("关键词").Range("A1:A3")
'循环数组
For j = LBound(arr) To UBound(arr)
'如果单元格包含某个关键词。这样存进来的是二维数组,我们指定第一列arr(j,1)
If Range("F" & i) Like "*" & arr(j, 1) & "*" Then
'就删除并退出本次对数组的循环
Range("F" & i).EntireRow.Delete
Exit For
End If
Next
Next
End Sub 我们刚才做的合并列想删除,只需要在End sub 之前加入一句话,将F1所在的整列删除,完整代码如下
Sub 遇关键字就删除整行()
'确定表最大行
最大行 = Range("A1").CurrentRegion.Rows.Count
'从最后一行开始向第二行倒着循环
For i = 最大行 To 2 Step -1
'关键词放数组里
arr = Sheets("关键词").Range("A1:A3")
'循环数组
For j = LBound(arr) To UBound(arr)
'如果单元格包含某个关键词,这样存进来的是二维数组,我们指定第一列arr(j,1)
If Range("F" & i) Like "*" & arr(j, 1) & "*" Then
'就删除并退出本次对数组的循环
Range("F" & i).EntireRow.Delete
Exit For
End If
Next
Next
'将F1所在的整列删除
Range("F1").EntireColumn.Delete
End Sub 解决网友方案2:某列,遇到关键词就输出
我与网友核对了名词:输出 的意思

准备一个表,把表头复制过来,也可以用代码复制过来

只需要知道汇总表没有使用的那一行行号就可以了。例如现在就一个表头,我们在第二行复制,如果第二行有文字,那就在第三行复制。
这次我们从Sheet1表的第2行开始向最后一行复制
Sub 遇关键字将整行复制到其它工作表()
'确定表最大行
最大行 = Range("A1").CurrentRegion.Rows.Count
'从第2行到最后一行
For i = 2 To 最大行
'关键词放数组里
arr = Sheets("关键词").Range("A1:A3")
'循环数组
For j = LBound(arr) To UBound(arr)
'如果单元格包含某个关键词,这样存进来的是二维数组,我们指定第一列arr(j,1)
If Range("F" & i) Like "*" & arr(j, 1) & "*" Then
'确认汇总表最大行
大 = Sheets("汇总").Range("A1").CurrentRegion.Rows.Count
'将找到关键词的行,复制到汇总表,然后退出本次循环
Range("F" & i).EntireRow.Copy Sheets("汇总").Range("A" & 大 + 1)
Exit For
End If
Next
Next
End Sub 结果如下:

以网友目前对知识掌握的情况,暂时先用循环的方式处理。等系统学会知识后,可以用更“高级”的方法处理该问题。

ExcelVBA合集:https://www.bilibili.com/video/BV1rt4y1a72y