excel查找某列包含 | 的行号

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
  1. 初始化数组:使用 ReDim results(1 To lastRow) 初始化结果数组。最初设定为 lastRow 大小,以确保足够容纳所有可能的行号。
  2. 存储行号:在找到包含 | 的单元格时,将行号存储到 results 数组中,并更新 resultCount 计数器。
  3. 写回数据:使用 Application.WorksheetFunction.Transpose(results) 将结果数组写回到B列。需要使用 Transpose 函数来将一维数组转换为列数据。
  4. 错误处理:使用 On Error GoTo ErrorHandler 来捕获并处理任何潜在错误。

注意事项

  • 数组大小ReDim 的大小是基于 lastRow 的值,这可能会占用较多内存。如果你有很多行,并且实际行号数量远小于总行数,可以考虑先计算行号数量后再分配数组大小。
  • 内存管理:在处理非常大的数据集时,确保系统有足够的内存,以避免因内存不足而出现问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值