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

Excel 自动填充未知数量的单元格,excel,autofill,Excel,Autofill,我正在尝试编写VBA代码,相当于单击并将单元格的一角拖到末尾。插图: 我在网上找到了几种不同的建议,但我总是遇到错误 下面是我目前正在处理的一行。但是我得到了运行时错误“1004”:应用程序定义的或对象定义的错误 Range("A4").Select ActiveCell.AutoFill Range(ActiveCell, ActiveCell.Offset(0, 1).End(xlRight).Offset(0, -1)) 下面是我正在编写的整个脚本:整个脚本的屏幕截图: 在我开始在线寻

我正在尝试编写VBA代码,相当于单击并将单元格的一角拖到末尾。插图:

我在网上找到了几种不同的建议,但我总是遇到错误

下面是我目前正在处理的一行。但是我得到了运行时错误“1004”:应用程序定义的或对象定义的错误

Range("A4").Select
ActiveCell.AutoFill Range(ActiveCell, ActiveCell.Offset(0, 1).End(xlRight).Offset(0, -1))
下面是我正在编写的整个脚本:整个脚本的屏幕截图:
在我开始在线寻找答案之前,根据我自己的逻辑,这里是脚本的原始行:

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个值

我还发现,沿着这条路线走下去似乎会破坏我的下一批连接,我知道这些连接单独工作得很好——希望这是一些需要修改的简单的东西


本练习的最终目标是获得一个准备好直接进入SQL的文本列表。i、 e.a b c d e在一个单元格中变为“a”、“b”、“c”、“d”、“e”。

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:)

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

=concatenate(a2, a1, a3)
由于前面的三行对公式都很重要,因此可以推断前面的任何一行都可以用作右侧的“停止”点。我将使用第1行(上面的3行)和向下偏移来定位“停止”点

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
我更喜欢使用.FillRight进行此操作,而不是.AutoFill,但您也可以轻松地将此方法用于.AutoFill

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

with worksheets("sheet1")
    ...
    .range(.cells(4, "A"), .cells(1, .columns.count).end(xltoleft).offset(3, 0)).formula = "=concatenate(a2, a1, a3)"
    ...
end with
您需要在每个区域和单元格前面加上
,如
.Range(…)
.Cells(…)
,以便
工作表(“sheet1”)
正常工作

在您自己的版本中,如果mylastcell_4设置正确,那么这很可能解决了问题

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

您设置了一个工作表。。。以block结尾,然后就再也没有使用过它。

嗨,Wizhi,我尝试过修改你的脚本,但它得到的错误与我之前得到的相同。我在这个问题上加了一句,以展示我最初的尝试,以及我在这句话中试图达到的目的。还有什么能帮助你们帮我的?谢谢你的鼓励:)在Stackoverflow的正常角落里,每当你问问题时,总会有一个特别的人出现在你的问题中,并编辑一些小事情,这让你觉得自己像个白痴,因为他们经常这样做,所以很高兴不在这里看到它。谢谢你的帮助。我使用了你建议的第二个代码,但我看到这是硬编码的,只针对4个单元格,我需要它一直到最后,可能是4个单元格,也可能是400个单元格。不,它是硬编码的,用于第四行,而不是4个单元格<代码>单元格(4,“A”)为A4
.range(.cells(4,“A”),.cells(1,.columns.count).end(xltoleft).offset(3,0))
从A4开始,直到第1行有单元格为止。嗯,好的,这很奇怪。我刚刚用我的图像补充了这个问题,当我这样做的时候会出现什么。那是因为F2:H3是空白的。您正在连接长度为零的字符串(即nothing),因此这些行不会显示任何内容。因此,这一行在Range(“A3”)中不起作用。请选择Range(Selection,Selection.End(xlToLeft))。选择Selection.FormulaArray=“”