按标题名称查找列,并用数组项replace列中的值

我被要求创build一个工具,允许我使用查找来replace带有文本值的数字值,查找值来自工作表(“lookupSheet”,出于此问题的目的),并且旨在replace所以如果0 =狗,1 =猫,2 =牛,3 =羊而我的原始列如下所示:

NewCol 0 1 2 3 1 0 

那么应该在查询范围内运行后,看起来像:

 NewCol Dog Cat Cow Sheep Cat Dog 

查找值总是按照相应的数字顺序排列,所以很容易将其传递给数组。 然而,一个问题是,列标题保持不变,但可能会改变其在不同的工作表中的位置,所以我试图改编的代码,所以它会首先find标题的名称(“NewCol”,为这个问题的目的),获取列引用,然后应用循环来更改这个值。 但是,每当我到达代码中的循环时,我都会得到一个应用程序定义的错误或对象定义的错误,我不确定自己做错了什么。 我在“lRow =”行放了一个断点,之后是发生错误的时候。

 Sub ChangeCol() Dim strArray As Variant Dim TotalRows As Long Dim replaceSheet As Worksheet Dim lookupSheet As Worksheet Dim I As Long Dim lRow As Long Dim aCell As Long 'Set worksheets Set lookupSheet = ThisWorkbook.Sheets(1) Set replaceSheet = ThisWorkbook.Sheets(2) 'Load lookupArray TotalRows = lookupSheet.Rows(Rows.Count).End(xlUp).Row strArray = lookupSheet.Range(Cells(2, 2), Cells(TotalRows, 2)).Value MsgBox "Loaded " & UBound(strArray) & " items!" 'Find column to replace values aCell = replaceSheet.Range("A1:DD1").Find(What:="NewCol", LookIn:=xlValues, LookAt:=xlWhole, _ MatchCase:=False, SearchFormat:=False).Column lRow = replaceSheet.Cells(Rows.Count, aCell).End(x1Up).Row 'Loop through lookup array and replace values For I = 1 To UBound(strArray) replaceSheet.Columns(aCell).replace What:=(I - 1), Replacement:=strArray(I, 1), LookAt:=xlWhole, MatchCase:=True Next I End Sub 

我不确定它出了什么问题,或者如果有更好的解决办法,我会很感激任何帮助。

正如在注释中指出的,你有一个拼写错误: lRow = replaceSheet.Cells(Rows.Count, aCell).End(x1Up).Row它的xLUp1更改为l

对范围进行一些更改,并避免使用数组replace来简单地将值设置为正确的顺序:

 Sub ChangeCol() Dim strArray As Variant Dim TotalRows As Long Dim replaceSheet As Worksheet Dim lookupSheet As Worksheet Dim I As Long Dim lRow As Long Dim ColToCopy As Long Dim MatchedHeader As Range Dim ZoneToFill As Range 'Set worksheets Set lookupSheet = ThisWorkbook.Sheets(1) Set replaceSheet = ThisWorkbook.Sheets(2) 'Load lookupArray ColToCopy = 2 TotalRows = lookupSheet.Cells(lookupSheet.Rows.Count, ColToCopy).End(xlUp).Row strArray = lookupSheet.Range(Cells(2, ColToCopy), Cells(TotalRows, ColToCopy)).Value MsgBox "Loaded " & UBound(strArray) & " items!" 'Find column to replace values Set MatchedHeader = replaceSheet.Range("A1:DD1").Find(What:="NewCol", LookIn:=xlValues, LookAt:=xlWhole, _ MatchCase:=False, SearchFormat:=False) lRow = replaceSheet.Cells(replaceSheet.Rows.Count, MatchedHeader.Column).End(xlUp).Row 'Resize the range to fit the array and send the values in MatchedHeader.Offset(1, 0).Resize(UBound(strArray, 1), UBound(strArray, 2)).Value = strArray End Sub