自动填充未知数量的单元格

时间:2018-10-23 21:48:59

标签: excel autofill

我正在尝试编写等效于单击的VBA代码,并将单元格的一角拖到最后。插图:
illustration

我尝试了一些在线发现的建议,但总是遇到错误。

下面是我当前正在处理的行。但是我收到运行时错误'1004':应用程序定义的错误或对象定义的错误

Range("A4").Select
ActiveCell.AutoFill Range(ActiveCell, ActiveCell.Offset(0, 1).End(xlRight).Offset(0, -1))

有关更多上下文,这里是我正在研究的整个脚本:整个脚本的屏幕截图:
screenshot of whole script,这是根据我自己的逻辑,在开始在线查找答案之前的原始脚本行:

Selection.Autofill Destination:=Range("A4":mylastcell_4), Type:=xlFillDefault

mylastcell_4已在脚本顶部声明(请参见整个脚本的屏幕截图)。我也尝试过更改为"A4",mylastcell_4,但仍然收到错误。

我对VBA极为陌生,不知道从这里去哪里。

我尝试过

 .Range(.Cells(4, "A"), .Cells(1, .Columns.Count).End(xlToLeft).Offset(3, 0)).Formula = "=concatenate(a2, a1, a3)"

以下回答之一建议。但是,只有在第1行中有5个单元格时,这才给出结果。我需要更大的灵活性,因为可能有2个值到500个值之间的任何地方都可以使用。 Image of results of above suggested script

我还发现,沿着这条路线走似乎会破坏我所知道的单独工作的下一个串联方式-希望它简单一些需要改变吗? Script used for next concatenation

此练习的最终目标是获取准备直接用于SQL的文本列表。即a b c d e都在一个单元格中全部变为'a','b','c','d','e'。

2 个答案:

答案 0 :(得分:1)

您要添加的内容是放在A4中的此公式。

with worksheets("sheet1")
    ...
    .cells(4, "A").formula = "=concatenate(a2, a1, a3)"
    .range(.cells(4, "A"), .cells(1, .columns.count).end(xltoleft).offset(3, 0)).fillright
    ...
end with

由于前面的所有三行对公式都很重要,因此可以推断出,前面的任何一行都可用于右侧的“停止”点。我将使用第1行(上方3行)并向下偏移以定位“停止”点。

with worksheets("sheet1")
    ...
    .range(.cells(4, "A"), .cells(1, .columns.count).end(xltoleft).offset(3, 0)).formula = "=concatenate(a2, a1, a3)"
    ...
end with

与.AutoFill相比,我更喜欢使用.FillRight进行此操作,但是您也可以轻松地对.AutoFill使用此方法。

或者,您可以将公式一次写入所有四个单元格中。

.

您需要在.Range(...).Cells(...)之类的with worksheets("sheet1")处为每个范围和单元格开头,以便.Range("A4").Autofill Destination:=.Range("A4:" & mylastcell_4.address), Type:=xlFillDefault 正常工作。

在您自己的版本中,如果正确设置了 mylastcell_4 ,则可能可以解决此问题。

fillna

您设置了一个With Worksheet ... End With块,然后再也没有使用它。

答案 1 :(得分:0)

VBA中范围的逻辑遵循以下结构:

Range(A1:D1) -> Range(Cells(A1), Cells(D1)) -> 

Range(Cells(row number, column number), Cells(row number, column number)) -> 

Range(Cells(1, 1), Cells(1, 4)) ... And then you can replace 1,1 & 1,4 with variables..

也许这行得通,但是我认为您的范围可能需要修改/澄清。尚不清楚您要实现的目标(您想要代码做什么,预期结果是什么)..但这值得一试:

ActiveCell.AutoFill Destination:=Range(ActiveCell, ActiveCell.Offset(0, 1).End(xlRight).Offset(0, -1))

我想鼓励您,继续学习VBA:)!!!