EXCEL VBA 以A列、B列、K列、M列为条件,根据C列内容“其他”匹配多行C列结果,以C列每两个“其他”中间内容E列、F列、G列、H列、U列内容提取到第一个“其他”行+1行对应第22个单元格后面增加内容。
时间: 2025-01-12 10:03:26 浏览: 51
好的,以下是一个基于您描述的需求编写的Excel VBA代码示例。该代码会根据A列、B列、K列、M列的内容作为条件,匹配C列中的“其他”,并将每两个“其他”之间的E列、F列、G列、H列、U列的内容提取到第一个“其他”行的下一行对应第22个单元格后面。
```vba
Sub ExtractData()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1") ' 修改为您的表名
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Dim i As Long, j As Long
Dim condition As String
Dim startRow As Long, endRow As Long
Dim insertRow As Long
i = 2 ' 从第二行开始,第一行假设为标题行
While i <= lastRow
' 检查C列是否为“其他”
If ws.Cells(i, "C").Value = "其他" Then
' 获取当前行的条件
condition = ws.Cells(i, "A").Value & "_" & ws.Cells(i, "B").Value & "_" & ws.Cells(i, "K").Value & "_" & ws.Cells(i, "M").Value
' 找到下一个“其他”的行号
j = i + 1
While j <= lastRow And ws.Cells(j, "C").Value <> "其他"
j = j + 1
Wend
' 如果找到下一个“其他”,则提取数据
If j <= lastRow Then
' 提取数据到第一个“其他”行的下一行
insertRow = i + 1
' 复制E列到U列的数据
ws.Cells(insertRow, "W").Value = ws.Cells(i + 1, "E").Value
ws.Cells(insertRow, "X").Value = ws.Cells(i + 1, "F").Value
ws.Cells(insertRow, "Y").Value = ws.Cells(i + 1, "G").Value
ws.Cells(insertRow, "Z").Value = ws.Cells(i + 1, "H").Value
ws.Cells(insertRow, "AA").Value = ws.Cells(i + 1, "U").Value
' 移动插入行
insertRow = insertRow + 1
' 更新行号
i = j
Else
' 如果没有找到下一个“其他”,则退出循环
Exit While
End If
End If
i = i + 1
Wend
End Sub
```
这个代码的主要步骤如下:
1. 遍历每一行,检查C列是否为“其他”。
2. 如果是“其他”,则记录当前行的条件,并找到下一个“其他”的行号。
3. 在每两个“其他”之间,提取E列、F列、G列、H列、U列的内容,并将其复制到第一个“其他”行的下一行对应第22个单元格后面的列中。
请根据您的实际情况修改代码中的表名和列名。希望这个示例对您有所帮助!
阅读全文
相关推荐





