簡體   English   中英

VBA查找范圍內的值並更改單元格值

[英]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

如果屬實...

  • 在具有下拉列表取決於新范圍的工作表上重置我的“數據驗證”單元格的源范圍(即,從單元格Q17向下到0值所在的同一行)。 請注意,此Source范圍位於0值所在列的左側5列,並且此范圍的第一行與包含0值的范圍開始處在同一行(17)

其他...

  • 使用諸如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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM