在 Excel 中重复宏,直到到达空白单元格
Posted
技术标签:
【中文标题】在 Excel 中重复宏,直到到达空白单元格【英文标题】:Repeating a Macro in Excel untill it reaches a blank cell 【发布时间】:2017-09-03 17:02:52 【问题描述】:我对 Excel 中的 VBA 非常陌生,我已经记录并修改了一个获取值的宏,然后根据“IF”语句,它使用答案来计算某个单元格中的值。我需要重复此操作,直到 A 列中有一个空白单元格。
我的数据是
零件编号在前 4 列中报告的实际浪费遵循我需要重复的代码,直到 A 列为空白。
Sub MissingMix()
'
' MissingMix Macro
' Calculates Missing Mix based on scrap
'
' Keyboard Shortcut: Ctrl+q
Application.Goto Reference:="R1C1"
Application.Goto Reference:="R3C8"
ActiveCell.FormulaR1C1 = "=IF(RC[-5]-RC[-6]>0,SUM(RC[-5]-RC[-6])*RC[+1],"""")"
Application.Goto Reference:="R3C9"
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-8],'QAD Weights'!RC[-8]:R[37]C[-5],4)"
End Sub
【问题讨论】:
【参考方案1】:使用这个:
' get active sheet
Dim CurrentSheet As Worksheet
Set CurrentSheet = ActiveWorkbook.ActiveSheet
' defining starting row
Dim Values As Range
Set Values = Rows(5)
For i = 2 To Values.Cells.Count - 1
If Values.Cells(i).Text <> "" Then
' Do Something ...
End If
Next
您也可以通过If Not IsEmpty(Cells(i).Value) Then ...
进行检查
编辑
还有另一种方法可以解决这个问题。
Dim CurrentSheet As Worksheet
Set CurrentSheet = ActiveWorkbook.ActiveSheet
' getting the lastrow by jumping to the last filled row of cell(1,1)
' cell(1,1) means the cell at row=1 and column=1 (column "A")
Dim LastRow As Long
LastRow = CurrentSheet.Cells(1, 1).End(xlDown).Row
MsgBox LastRow
【讨论】:
我不会使用.End(xlDown)
- 如果列仅在单元格 A1 中有一个值,它将返回 1048576 作为最后一行(与选择单元格 A1 并按 Ctrl+Down 相同)。最好改用CurrentSheet.Cells(CurrentSheet.Rows.Count, 1).End(xlUp).Row
。
是的,我明白这一点。这就是为什么我建议另一个答案。但是使用xlUp
也有问题。如果中间有空白单元格,您将不会注意到它们。如果这是你需要知道的,那么你就不能使用它。
Moher,感谢您在上面的回答,我可以让它工作,是的,它确实显示了工作表中的行数,但我不知道如何让 If 和查找函数重复,所以可能会重复,这可能是一个愚蠢的问题,但就像我说的那样,我对此非常陌生。提前致谢
所以请详细说明您的情况。也许在工作表中提供一些示例数据。向我们展示您想要什么。
废料8/29/17的总和报告实际2436idpav2r 3 4 2448 addpav2r 2 2 2448Repthndg 3 3 2448RepthnR 4 13 2448RepthnR 4 13 2448Repny 4 4 2460RepthnR 14 36 2460Repthnt4 9 2460idpav2R 0 2这是前 3 列中的数据,我的宏计算列 H 中的值,我的问题是重复宏,直到 A 列为空白,因为行数每天都在变化。如果这很简单,我很抱歉,但我是一个新手以上是关于在 Excel 中重复宏,直到到达空白单元格的主要内容,如果未能解决你的问题,请参考以下文章