如何使用宏自动填充包含值的最后一行,在一列中有多个不同的公式?

时间:2017-08-10 23:19:39

标签: vba excel-vba excel-formula formatting autofill

我正在创建一个模板,其中从报表下载的值表可以粘贴到输入选项卡中,并在另一个选项卡上的格式化表中返回这些值,其中包含一些公式。

C,D和C列; E包含项目代码的第1,2和3部分,列F包含行标题(例如可用数量,发票订单等)。

之后的列(G到Z)主要包含查找,这些查找将查找列C,D,E和F的串联,这些列出现在列B中。但是,行12和24具有不同的公式和行15& 16不含配方。一个项目的数据占用13行(在第12行和第24行之间)。

我一直试图找到一个宏,可以,就像我选择范围B12:Z24一样,拖动/自动填充公式并格式化到A列中包含值“X”的最后一行。“X “在A列中指示输入选项卡上相应行中是否有值,并且可以在500行到8000行之间变化。

我是一个初学者,所以无论我写的是什么都很基本,但这是我尝试过的:

Sub FillDown()    
  Range("B12:Z24" & Range("A" & Rows.Count).End(xlUp).Row).FillDown    
End Sub

这与我从谷歌中提取的任何更复杂的代码一样。

以下是current result

的示例

以下是desired result

的示例

我试过的任何东西只是从第12行向下复制/自动填充公式和格式,而不是表格的整个部分..任何建议?

**

  • 更新

** 道歉,几周前我想出了这个,但忘了在这里发帖: 我没有创建新的部分(我正在调用行12到24“部分”),而是创建了一个包含一定数量部分的表,并获得了一个循环,将公式从第13行转换为第23行(我想要将公式保留在第12行和第24行中,并对以下部分进行相同的操作。需要一些时间在更大的范围,但做的工作。 的代码:

Sub Pasteloop()

Application.ScreenUpdating = False

Dim i As Long
Dim ii As Long
Dim LastRow As Long
Dim wb As Workbook
Dim sht1 As Worksheet
Dim j As Long
Dim jj As Long

Set wb = ThisWorkbook
Set sht1 = wb.Sheets("Output")

LastRow = 130 'a number 1 bigger than the last row to paste
i = 13       'start row of the 1st select
ii = 23     'end row of the 1st select
j = 13      'start row of the 2nd select
jj = 23     'end row of the 2nd select
k = 7      'column number of the left hand column of the range
p = 260      'column number of the right hand column of the range

'This is the beginning of the loop
Do While i < LastRow
'set the next range as the previous range values
sht1.Range(Cells(j, k), Cells(jj, p)) = sht1.Range(Cells(i, k), Cells(ii, 
p)).Value
'move along to the next selection by incrementing everything by 12
ii = ii + 12
i = i + 12
jj = jj + 12
j = j + 12
Loop

Application.ScreenUpdating = True

End Sub

这将每周更新报告的开放时间从几分钟缩短到几秒钟。

2 个答案:

答案 0 :(得分:0)

如果您只想让所有数据在视觉上不可见,除了&#34;可用数量&#34;行,使用条件格式

你的例子从第12行开始

单元格C12 ....条件格式....使用公式确定单元格格式....公式.... = C11 ....颜色白色白色(设置为红色进行测试)

然后根据需要将格式复制到三列

答案 1 :(得分:0)

我没有创建新的部分(我正在调用行12到24“部分”),而是创建了一个包含一定数量部分的表,并获得了一个循环,它将公式转换为从第13行到第13行的值23(我希望将公式保留在第12行和第24行),并对以下部分做同样的事情。需要一些时间在更大的范围,但做的工作。代码:

Sub Pasteloop()

Application.ScreenUpdating = False

Dim i As Long
Dim ii As Long
Dim LastRow As Long
Dim wb As Workbook
Dim sht1 As Worksheet
Dim j As Long
Dim jj As Long

Set wb = ThisWorkbook
Set sht1 = wb.Sheets("Output")

LastRow = 130 'a number 1 bigger than the last row to paste
i = 13       'start row of the 1st select
ii = 23     'end row of the 1st select
j = 13      'start row of the 2nd select
jj = 23     'end row of the 2nd select
k = 7      'column number of the left hand column of the range
p = 260      'column number of the right hand column of the range

'This is the beginning of the loop
Do While i < LastRow
'set the next range as the previous range values
sht1.Range(Cells(j, k), Cells(jj, p)) = sht1.Range(Cells(i, k), Cells(ii, 
p)).Value
'move along to the next selection by incrementing everything by 12
ii = ii + 12
i = i + 12
jj = jj + 12
j = j + 12 
Loop

Application.ScreenUpdating = True

End Sub

这将每周更新报告的开放时间从几分钟缩短到几秒,并且比执行相同作业的复制/粘贴代码更有效,并且使您能够在代码运行时使用剪贴板,这是您不可能的能够复制/粘贴代码。