填写 B 列的 VBA 代码

Posted

技术标签:

【中文标题】填写 B 列的 VBA 代码【英文标题】:VBA Code for Fill Down Column B 【发布时间】:2017-03-07 20:30:22 【问题描述】:

我最近在另一个电子表格上使用了我发现的这段代码来帮助我解决这个问题:

Range("B2").Select
ActiveCell.FormulaR1C1 = _
    "=VLOOKUP(RC[-1],'Unapplied Report'!R[-1]:R[15],2,FALSE)"

Range("A2").Select
Selection.End(xlDown).Select
ActiveCell.Offset(0, 1).Select
Range(Selection, Selection.End(xlUp)).Select
Selection.FillDown

在我最初使用时,此代码通过选择 A1、找到正在使用的“A”的底部、选择“B”列中的相邻单元格并填充与 A2 相邻的以 B2 结尾的单元格来确定表格的尺寸代码开始的地方。当重复使用此代码执行相同的任务时,它会从“B1”填充,这是一个问题,因为它会用我的标题一直填充到工作表的底部而不是公式。

我之前使用的代码没有任何问题。我把它贴在下面,以防其他人注意到我做的不同或错误。感谢您的帮助!

Range("B2").Select
ActiveCell.FormulaR1C1 = _
    "=IF(ISNUMBER(MATCH(RC[-1],Conveyance,0)),""Conveyance"",IF(ISNUMBER  (MATCH(RC[-1],NonConveyance,0)),""Non-Conveyance"",IF(ISNUMBER(MATCH(RC[-1],VA,0)),""VA Claim"",IF(ISNUMBER(MATCH(RC[-1],USDA,0)),""USDA Claim"",IF(ISNUMBER(MATCH(RC[-1],PMI,0)),""PMI Claim"",IF(ISNUMBER(MATCH(RC[-1],SFLS,0)),""SFLS Claim"",""Not Found""))))))"

Range("A2").Select
Selection.End(xlDown).Select
ActiveCell.Offset(0, 1).Select
Range(Selection, Selection.End(xlUp)).Select
Selection.FillDown

【问题讨论】:

【参考方案1】:

我想先对您的代码进行一些修复。从长远来看,这应该会有所帮助,尤其是在尝试发现问题时。以后尽量避免选择/激活或主动引用。

Range("B2").FormulaR1C1 = _
"=IF(ISNUMBER(MATCH(RC[-1],Conveyance,0)),""Conveyance"",IF(ISNUMBER  (MATCH(RC[-1],NonConveyance,0)),""Non-Conveyance"",IF(ISNUMBER(MATCH(RC[-1],VA,0)),""VA Claim"",IF(ISNUMBER(MATCH(RC[-1],USDA,0)),""USDA Claim"",IF(ISNUMBER(MATCH(RC[-1],PMI,0)),""PMI Claim"",IF(ISNUMBER(MATCH(RC[-1],SFLS,0)),""SFLS Claim"",""Not Found""))))))"

Range("A2").End(xlDown).Offset(0, 1).Select 'Looks like a jumble here trying to offset
Range(Selection, Selection.End(xlUp)).FillDown

请注意我在您的代码中的注释。看起来像是一些“选择”的误传。让我们尝试用一些更明确的代码来修复你:

Dim LR as Long 'LR = Last row
LR = Cells(Rows.Count, "A").End(xlUp).Row 'Finds last row in column A

Range("B2").FormulaR1C1 = _ 'Your previous formula
"=IF(ISNUMBER(MATCH(RC[-1],Conveyance,0)),""Conveyance"",IF(ISNUMBER  (MATCH(RC[-1],NonConveyance,0)),""Non-Conveyance"",IF(ISNUMBER(MATCH(RC[-1],VA,0)),""VA Claim"",IF(ISNUMBER(MATCH(RC[-1],USDA,0)),""USDA Claim"",IF(ISNUMBER(MATCH(RC[-1],PMI,0)),""PMI Claim"",IF(ISNUMBER(MATCH(RC[-1],SFLS,0)),""SFLS Claim"",""Not Found""))))))"
Range("B2:B"&LR).Filldown

这应该有助于更清楚地定义正在发生的事情。

【讨论】:

以上是关于填写 B 列的 VBA 代码的主要内容,如果未能解决你的问题,请参考以下文章

Excel vba中怎样填写数值改变单元格后触发事件

通过VBA 程序找出excel表中B列的最大日期,并且排除一个不要的年份的日期,如12/31/2099(日期格式),急

一系列日期的 VBA 网络日

VBA 代码填充 7 个相邻单元格中的索引匹配函数

用于比较具有包含日期​​的单元格的列并将特定文本粘贴到另一列的 Vba 代码

Excel读取某一列的宏代码VBA代码源码及解说(详尽版)