我期待'正常化'通过将最小值设置为0并将整个列的数据移动最小值与0的差值来获得一列数据。
代码应该很简单,但我找不到合适的范围选择来在代码到达空白单元格时停止代码。
以下是我尝试识别U9到U700之后U列中的第一个空单元并且相应地停止在Z列中减去时未成功的核心。示例屏幕截图已附加。谢谢!
Private Sub CommandButton1_Click()
[Z9:Z700] = [U9:U700-U8]
End Sub
这就是我得到的:
这是我想要的:
答案 0 :(得分:1)
试试这个:
Sub foo()
Dim lRow As Long
With ActiveSheet
lRow = .Cells(Rows.Count, "U").End(xlUp).Row
.Range("U9:U" & lRow).Copy .Range("Z9")
With .Range("U8")
.Formula = "=MIN(U9:U" & lRow & ")"
.Copy
End With
.Range("Z9:Z" & lRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlSubtract
Application.CutCopyMode = False
End With
End Sub
修改强>
如果您在列U中有公式,在您的返回空白值的数字列表下方,那么此版本可能更适合您:
Sub foo2()
Dim lRows As Long
With ActiveSheet
lRows = WorksheetFunction.Count(.Range("U9:U700"))
.Range("U8").Formula = "=MIN(" & .Range("U9").Resize(lRows, 1).Address(0, 0) & ")"
.Range("U9").Resize(lRows, 1).Copy
.Range("Z9").PasteSpecial Paste:=xlPasteValues
.Range("U8").Copy
.Range("Z9").Resize(lRows, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlSubtract
End With
Application.CutCopyMode = False
End Sub