如何根据最小截止值动态删除数据
How to dynamically delete data based on a minimum cutoff value
我是路易斯安那州一家小型石油公司的地质学家。我组成了我们的技术部门,不幸的是我在编码方面的经验非常有限。我过去使用过非常基本的 vba 编码,但我在日常工作中编码不多,所以我忘记了大部分。我最近发现了这个网站,它已成为我的重要资源。我已经能够从以前对以前问题的回答中收集到一些代码片段,但我又一次被卡住了。
我正在开发一个从路易斯安那州 DNR 下载油井生产信息的宏,然后根据下载的数据计算某些值。到目前为止,我已经有了检索数据、对其排序并计算所需值的代码。
现在我需要能够 trim 这个数据。每口井的产油时间各不相同。目前我的宏将公式向下扩展到单元格 50(数据永远不会达到这一点。我选择它只是为了确保公式应用于所有单元格)。大多数计算值都是 0 我想创建一个宏来删除最后一个包含 1 或更大数字的单元格之后的所有值。
包含我要删除的数据的单元格在单元格 L
如果您还需要我提供任何其他信息,或者我没有解释我的问题,请告诉我
出色地。
这是我生成的用于计算单元格 L 中的数据的代码
Sub Oil_production_by_year()
'
' Oil_production_by_year Macro
'
'
Dim ws As Worksheet
For Each ws In Sheets
ws.Activate
Range("L2").Select
ActiveCell.FormulaR1C1 = _
"=SUMIFS(RC[-8]:R[2998]C[-8],RC[-11]:R[2998]C[-11],"">=""&RC[8],RC[-11]:R[2998]C[-11],""<=""&RC[9])"
Range("L2").Select
ActiveWindow.ScrollColumn = 10
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 6
ActiveWindow.SmallScroll Down:=-6
Selection.AutoFill Destination:=Range("L2:L51"), Type:=xlFillDefault
Range("L2:L51").Select
Next ws
End Sub
你好约西亚,祝你新年快乐。
此代码假设:
dataCol
是数据的参考列,用于确定自动填充 SUMIFS
公式的行数。目前它被设置为第 5 列(E 列),因此请更改它以适合您的数据。
trimVal
是一个变量,它保存单元格值将被删除的值。当前设置为 1。
删除公式单元格后,同一列中的任何数据'beneath'都将上移。
Option Explicit
Sub Oil_production_by_year() ' ' Oil_production_by_year Macro '
Dim ws As Worksheet
Dim stRow As Long, formulaCol As Long, c As Long
Dim dataCol As Long, dataEndRow As Long, trimVal As Long
stRow = 2
formulaCol = 12
trimVal = 1
'an assumption of colE for the data column
'change this to suit
'means that the formula will only fill the rows reqd
dataCol = 5
For Each ws In Sheets
With ws
dataEndRow = .Cells(Rows.Count, dataCol).End(xlUp).Row
With ws.Cells(stRow, formulaCol)
.FormulaR1C1 = _
"=SUMIFS(RC[-8]:R[2998]C[-8],RC[-11]:R[2998]C[-11],"">=""&RC[8],RC[-11]:R[2998]C[-11],""<=""&RC[9])"
.AutoFill Destination:=ws.Range(ws.Cells(stRow, formulaCol), ws.Cells(dataEndRow, formulaCol)), _
Type:=xlFillDefault
End With
For c = dataEndRow To stRow Step -1
If .Cells(c, formulaCol).Value < trimVal Then
.Cells(c, formulaCol).Delete xlShiftUp
Else
Exit For
End If
Next c
End With
Next ws
End Sub
仍然不知道您要删除哪种数据...我建议更改代码,如下所示:
Option Explicit
Sub Oil_production_by_year()
Dim wsh As Worksheet, iLastCell As Integer, r As Integer
For Each wsh In ThisWorkbook.Worksheets
iLastCell = GetLastCell(wsh)
wsh.Range("L2").FormulaR1C1 = "=SUMIFS(RC[-8]:R[2998]C[-8],RC[-11]:R[2998]C[-11],"">=""&RC[8],RC[-11]:R[2998]C[-11],""<=""&RC[9])"
wsh.Range("L2").AutoFill Destination:=wsh.Range("L2:L" & iLastCell), Type:=xlFillDefault
r = iLastCell
Do While r > 2
If wsh.Range("L" & r).Value = 0 Then
'delete entire row
wsh.Range("L" & r).EntireRow.Delete xlShiftUp
End If
If wsh.Range("L" & r).Value > 0 Then Exit Do End If
r = r - 1
Loop
Next
End Sub
Function GetLastCell(wsh As Worksheet, Optional sCol As String = "A")
GetLastCell = wsh.Range(sCol & wsh.Rows.Count).End(xlUp).Row
End Function
根据您的需要更改代码 ;)
我是路易斯安那州一家小型石油公司的地质学家。我组成了我们的技术部门,不幸的是我在编码方面的经验非常有限。我过去使用过非常基本的 vba 编码,但我在日常工作中编码不多,所以我忘记了大部分。我最近发现了这个网站,它已成为我的重要资源。我已经能够从以前对以前问题的回答中收集到一些代码片段,但我又一次被卡住了。
我正在开发一个从路易斯安那州 DNR 下载油井生产信息的宏,然后根据下载的数据计算某些值。到目前为止,我已经有了检索数据、对其排序并计算所需值的代码。
现在我需要能够 trim 这个数据。每口井的产油时间各不相同。目前我的宏将公式向下扩展到单元格 50(数据永远不会达到这一点。我选择它只是为了确保公式应用于所有单元格)。大多数计算值都是 0 我想创建一个宏来删除最后一个包含 1 或更大数字的单元格之后的所有值。
包含我要删除的数据的单元格在单元格 L
如果您还需要我提供任何其他信息,或者我没有解释我的问题,请告诉我 出色地。
这是我生成的用于计算单元格 L 中的数据的代码
Sub Oil_production_by_year()
'
' Oil_production_by_year Macro
'
'
Dim ws As Worksheet
For Each ws In Sheets
ws.Activate
Range("L2").Select
ActiveCell.FormulaR1C1 = _
"=SUMIFS(RC[-8]:R[2998]C[-8],RC[-11]:R[2998]C[-11],"">=""&RC[8],RC[-11]:R[2998]C[-11],""<=""&RC[9])"
Range("L2").Select
ActiveWindow.ScrollColumn = 10
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 6
ActiveWindow.SmallScroll Down:=-6
Selection.AutoFill Destination:=Range("L2:L51"), Type:=xlFillDefault
Range("L2:L51").Select
Next ws
End Sub
你好约西亚,祝你新年快乐。
此代码假设:
dataCol
是数据的参考列,用于确定自动填充 SUMIFS
公式的行数。目前它被设置为第 5 列(E 列),因此请更改它以适合您的数据。
trimVal
是一个变量,它保存单元格值将被删除的值。当前设置为 1。
删除公式单元格后,同一列中的任何数据'beneath'都将上移。
Option Explicit
Sub Oil_production_by_year() ' ' Oil_production_by_year Macro '
Dim ws As Worksheet
Dim stRow As Long, formulaCol As Long, c As Long
Dim dataCol As Long, dataEndRow As Long, trimVal As Long
stRow = 2
formulaCol = 12
trimVal = 1
'an assumption of colE for the data column
'change this to suit
'means that the formula will only fill the rows reqd
dataCol = 5
For Each ws In Sheets
With ws
dataEndRow = .Cells(Rows.Count, dataCol).End(xlUp).Row
With ws.Cells(stRow, formulaCol)
.FormulaR1C1 = _
"=SUMIFS(RC[-8]:R[2998]C[-8],RC[-11]:R[2998]C[-11],"">=""&RC[8],RC[-11]:R[2998]C[-11],""<=""&RC[9])"
.AutoFill Destination:=ws.Range(ws.Cells(stRow, formulaCol), ws.Cells(dataEndRow, formulaCol)), _
Type:=xlFillDefault
End With
For c = dataEndRow To stRow Step -1
If .Cells(c, formulaCol).Value < trimVal Then
.Cells(c, formulaCol).Delete xlShiftUp
Else
Exit For
End If
Next c
End With
Next ws
End Sub
仍然不知道您要删除哪种数据...我建议更改代码,如下所示:
Option Explicit
Sub Oil_production_by_year()
Dim wsh As Worksheet, iLastCell As Integer, r As Integer
For Each wsh In ThisWorkbook.Worksheets
iLastCell = GetLastCell(wsh)
wsh.Range("L2").FormulaR1C1 = "=SUMIFS(RC[-8]:R[2998]C[-8],RC[-11]:R[2998]C[-11],"">=""&RC[8],RC[-11]:R[2998]C[-11],""<=""&RC[9])"
wsh.Range("L2").AutoFill Destination:=wsh.Range("L2:L" & iLastCell), Type:=xlFillDefault
r = iLastCell
Do While r > 2
If wsh.Range("L" & r).Value = 0 Then
'delete entire row
wsh.Range("L" & r).EntireRow.Delete xlShiftUp
End If
If wsh.Range("L" & r).Value > 0 Then Exit Do End If
r = r - 1
Loop
Next
End Sub
Function GetLastCell(wsh As Worksheet, Optional sCol As String = "A")
GetLastCell = wsh.Range(sCol & wsh.Rows.Count).End(xlUp).Row
End Function
根据您的需要更改代码 ;)