赞
踩
- Sub FindRowsWithPipeToArray()
- Dim ws As Worksheet
- Dim lastRow As Long
- Dim i As Long
- Dim outputRow As Long
- Dim cellValue As Variant
- Dim results() As Long
- Dim resultCount As Long
-
- On Error GoTo ErrorHandler ' 错误处理
-
- ' 设置工作表
- Set ws = ThisWorkbook.Sheets("Sheet1") ' 请根据需要修改工作表名称
-
- ' 确定A列的最后一行
- lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
-
- ' 初始化结果数组
- ReDim results(1 To lastRow) ' 初始大小,最大行数
-
- ' 初始化计数器
- resultCount = 0
-
- ' 遍历A列的每一行
- For i = 1 To lastRow
- cellValue = ws.Cells(i, 1).Value
-
- ' 检查单元格内容是否包含 '|'
- If Not IsEmpty(cellValue) And InStr(cellValue, "|") > 0 Then
- resultCount = resultCount + 1
- results(resultCount) = i ' 将行号存入数组
- End If
- Next i
-
- ' 将结果写回到B列
- If resultCount > 0 Then
- ws.Range("B1:B" & resultCount).Value = Application.WorksheetFunction.Transpose(results)
- End If
-
- MsgBox "查找完成,包含 '|' 的行号已写入B列。"
- Exit Sub
-
- ErrorHandler:
- MsgBox "发生错误: " & Err.Description
- End Sub
ReDim results(1 To lastRow)
初始化结果数组。最初设定为 lastRow
大小,以确保足够容纳所有可能的行号。|
的单元格时,将行号存储到 results
数组中,并更新 resultCount
计数器。Application.WorksheetFunction.Transpose(results)
将结果数组写回到B列。需要使用 Transpose
函数来将一维数组转换为列数据。On Error GoTo ErrorHandler
来捕获并处理任何潜在错误。ReDim
的大小是基于 lastRow
的值,这可能会占用较多内存。如果你有很多行,并且实际行号数量远小于总行数,可以考虑先计算行号数量后再分配数组大小。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。