从Excel中删除负值(VBA)

第一次在这个网站上发布。 我要求我正在与一个小型项目提供一些急需的帮助。

我需要删除由今天的date确定的特定单元格之后的所有负数。 为了给出一些背景知识,单元格G3是一个使用HLOOKUP来确定与当前date对应的数据列的公式。 我需要删除该列右侧(这是未来的date)的所有负数,也在第9行下面。下面的VBA代码是行不通的,我将不胜感激你们的一些帮助。 我不经常使用VBA,这是我的第一个项目。

2粗体编辑 问题:我想删除第9行之后的行中的负数和单元格G3中列号之后的列

该代码不起作用 – 这意味着代码不会导致任何错误或任何事情,它只是运行,但不会删除9行后面的负数和单元格G3中的列号

以下是我到目前为止:

 Sub Negative_to_Zero() Dim RowNum As Long, ColNum As Long, H3 As Integer H3 = Range("G3").Value Application.ScreenUpdating = False For ColNum = H3 To Cells(1, Columns.Count).End(xlToLeft).Column For RowNum = 9 To Cells(Rows.Count, ColNum).End(xlUp).Row If Cells(RowNum, ColNum) < 0 Then Cells(RowNum, ColNum) = 0 Next RowNum Next ColNum Application.ScreenUpdating = True End Sub 

从A1向后查找最后一行和最后一列。 将所有值读入到一个variables数组中,然后循环遍历数组,并清除负值。 将数组的值返回到工作表。

 Option Explicit Sub wqew() Dim lr As Long, lc As Long Dim vals As Variant, i As Long, j As Long With Worksheets("sheet1") lr = .Cells.Find(What:=Chr(42), After:=.Cells(1), _ SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row lc = .Cells.Find(What:=Chr(42), After:=.Cells(1), _ SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column With .Range(.Cells(9, "T"), .Cells(lr, lc)) vals = .Value2 For i = LBound(vals, 1) To UBound(vals, 1) For j = LBound(vals, 2) To UBound(vals, 2) If vals(i, j) < 0 Then vals(i, j) = vbNullString End If Next j Next i .Value = vals End With End With End Sub 

确定负值的逻辑不会错误检查文本和/或错误; 它假定数值在单元格中。 它也不检查返回数字结果的公式; 如果有公式并希望保留它们,那么删除数组并使用较慢的逐个单元格清除负值的方法会更好。

尝试修改读取范围的每个单元格的代码:

 Dim rng As Range: Set rng = Application.Range("Data!B2:C3") ' Here you can declare your range. Dim cel As Range For Each cel In rng.Cells With cel 'Your If statement Here. End With Next cel