首页 > 解决方案 > 无法使用列标题搜索和替换值

问题描述

我正在尝试创建一个 vba 脚本,它将在列下的所有单元格中搜索_ 。Crude Items但是,当它找到一个时,它会将值从_中拆分出来,并将其余的值放在Refined Ones列下的相应单元格中。

我已经尝试过以下完美无瑕的工作,但我希望使用列标题搜索和替换值:

Sub CopyAndReplace()
    Dim cel As Range

    For Each cel In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).row)
        If cel.value <> "" Then
            Sheets("Sheet1").Range(cel(1, 3).Address) = Split(cel, "_")(1)
        End If
    Next cel
End Sub

为了让您可视化工作表的外观:

在此处输入图像描述

如何使用列标题搜索和替换值?

标签: excelvba

解决方案


我不确定这是你所追求的,但有一些重要的提及......

在编写代码时,尽量始终使用至少一个工作表限定符。您的程序如何才能明确知道您希望它在哪里运行?

我稍微改变了你的过程,但同样,不确定这是否正是你所追求的。请参见下面的代码。

Sub SplitByHeader()

    Dim i As Long
    Dim crudeHeader As Range, refinedHeader As Range
    Dim ws As Worksheet


    'set ws
    Set ws = ThisWorkbook.Sheets("Sheet1")

    'set header ranges
    Set crudeHeader = ws.Rows(1).Find(What:="Crude Items", LookAt:=xlWhole)
    Set refinedHeader = ws.Rows(1).Find(What:="Refined Ones", LookAt:=xlWhole)

    'simple error handler
    If crudeHeader Is Nothing Or refinedHeader Is Nothing Then Exit Sub


    For i = 2 To ws.Cells(ws.Rows.Count, crudeHeader.Column).End(xlUp).Row
        If ws.Cells(i, crudeHeader.Column).Value <> "" Then
            ws.Cells(i, refinedHeader.Column).Value = Split(ws.Cells(i, crudeHeader.Column).Value, "_")(1)
        End If
    Next i


End Sub

推荐阅读