[英]VBA Find value in range and change cell value
不確定如何使用下面概述的步驟來完成此代碼。 任何幫助表示贊賞
Sub Test()
Dim Value As Double
For Each Value In ThisWorkbook.Sheets("Sheet").Range("V17:V57")
If Value.ThisWorkbook.Sheets("Sheet").Range("V17:V57") = 0 Then...
...
End If
End Sub
檢查范圍內是否存在0
如果屬實...
其他...
使用諸如Application.WorksheetFunction.FormulaArray ("MAX(IF(V17:V37<=0,V17:V37),MIN(V17:V37))")
類的方法查找並選擇具有最小負值的單元格Application.WorksheetFunction.FormulaArray ("MAX(IF(V17:V37<=0,V17:V37),MIN(V17:V37))")
一旦找到/選擇了單元格,執行目標搜索以通過更改單元格中所選單元格左側的4個單元格中的值來將所選單元格設置為0
如上所述自動更新“數據驗證”源范圍
對於何時存在0,我正在嘗試此代碼,但是如何基於數據表另一列中的相應單元格范圍來設置驗證范圍? H24單元格是我的下拉列表所在的位置
Dim rng As Range
For Each rng In ThisWorkbook.Sheets("Sheet").Range("V17:V57")
If rng.Value = 0 Then
ThisWorkbook.Sheets("Sheet").Select
Range ("H24").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=Sheet!$V$17:$V" & ??
Else...
以下代碼在評估行給出了調試錯誤。 整體代碼塊需要簡化...如果,對於,下一步太多? 為了清楚起見,我添加了注釋。 球門搜尋線也需要幫助。
Dim rng As Range
For Each rng In ThisWorkbook.Sheets("Sheet").Range("V17:V57")
If rng.Value <> 0 Then
rng = Application.WorksheetFunction.FormulaArray("MAX(IF(V17:V57<=0,V17:V57),MIN(V17:V57))") 'this formula searches for the least min number in the range
rng.Select
Range("selected cell").GoalSeek Goal:=0, ChangingCell:=Range("cell 5 columns left of selected cell")...this line makes selected cell = 0
Exit For
End If
Next rng
假設您要在范圍A1:B10內找到值“ 3 ”:
Set given_range = ThisWorkbook.Worksheets("Sheet1").Range("A1:B10")
given_range.Select
Set found_value = Selection.Find("3")
如果您正在尋找其地址:
value_address = found_value.Address(0,0)
最后使用(0,0)將返回不帶任何$的地址(B3代替$ B $ 3)
另外:如果您想知道行或列,請執行以下操作
value_column = Split(found_value.Address, "$")(1)
value_row = Split(found_value.Address, "$")(2)
'To check if an element is within a specific Array, Object, Range, String, etc.
Public Function isInArray(ByVal itemSearched As Variant, ByVal aArray As Variant) As Boolean
Dim item As Variant
If VarType(aArray) >= vbArray Or VarType(aArray) = vbObject Or VarType(aArray) = vbDataObject Or TypeName(aArray) = "Range" Then
For Each item In aArray
If itemSearched = item Then
isInArray = True
Exit Function
End If
Next item
isInArray = False
ElseIf VarType(aArray) = vbString Then
isInArray = InStr(1, aArray, itemSearched, vbBinaryCompare) > 0 'Comparing character by character
Else
On Error Resume Next
isInArray = Not IsError(Application.Match(itemSearched, aArray, False)) 'Slow on large arrays
Err.Clear: On Error GoTo 0
End If
End Function
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.