VBA -> Find første to celler med værdi
Hej med JerJeg har forsøgt at lave en VBA kode:
Public Function FindI()
Application.Volatile
Dim ws As Worksheet
Set ws = Worksheets("Test")
Dim RN As Double
RN = 3
For Each y In ws.Range("H29:H29")
For Each x In ws.Range("H20:H20")
If y.Value <> "" And x.Value <> "" Then
FindI = "H: " & y.Value & "/" & x.Value & " = " & Round(y.Value / x.Value, RN)
Exit Function
End If
Next x
Next y
For Each y In ws.Range("H29:H29")
For Each x In ws.Range("H34:H34")
If y.Value <> "" And x.Value <> "" Then
FindI = "H: " & x.Value & "/" & y.Value & " = " & Round(x.Value / y.Value, RN)
Exit Function
End If
Next x
Next y
For Each y In ws.Range("I29:I29")
For Each x In ws.Range("I20:I20")
If y.Value <> "" And x.Value <> "" Then
FindI = "I: " & y.Value & "/" & x.Value & " = " & Round(y.Value / x.Value, RN)
Exit Function
End If
Next x
Next y
For Each y In ws.Range("I29:I29")
For Each x In ws.Range("I34:I34")
If y.Value <> "" And x.Value <> "" Then
FindI = "I: " & x.Value & "/" & y.Value & " = " & Round(x.Value / y.Value, RN)
Exit Function
End If
Next x
Next y
For Each y In ws.Range("J29:J29")
For Each x In ws.Range("J20:J20")
If y.Value <> "" And x.Value <> "" Then
FindI = "J: " & y.Value & "/" & x.Value & " = " & Round(y.Value / x.Value, RN)
Exit Function
End If
Next x
Next y
For Each y In ws.Range("J29:J29")
For Each x In ws.Range("J34:J34")
If y.Value <> "" And x.Value <> "" Then
FindI = "J: " & x.Value & "/" & y.Value & " = " & Round(x.Value / y.Value, RN)
Exit Function
End If
Next x
Next y
FindI = ""
Finish:
End Function
Den virker som sådan også, men jeg har mange flere formler som skal være med. Så derfor havde jeg tænkt noget lignede med at køre en for each.
Lavede i første omgang dette:
For Each y In ws.Range("H29:L29")
For Each x In ws.Range("H20:L20")
If y.Value <> "" And x.Value <> "" Then
FindI = y.Value & "/" & x.Value & " = " & Round(y.Value / x.Value, RN)
Exit Function
End If
Next x
Next y
For Each y In ws.Range("H30:L30")
For Each x In ws.Range("H34:L34")
If y.Value <> "" And x.Value <> "" Then
FindI = x.Value & "/" & y.Value & " = " & Round(x.Value / y.Value, RN)
Exit Function
End If
Next x
Next y
Mit problem er, hvis der kommer værdier sent i H29:L29 og samme med H20:H20, så er det stadig denne formel som vinder. Giver god mening, men jeg ville gerne, hvis der kommer værdier før i H30:L30 og H34:L34 skal den komme først og afslutte functionen. Den kan jeg til gengæld ikke lure, hvordan skal løses.
Det vil sige, at hvis der kommer tal i I30 og L34 og der er tal i H29 og L29, så skal For Each y In ws.Range("H30:L30") & For Each x In s.Range("H34:L34") komme før For Each y In ws.Range("H29:L29") For Each x In ws.Range("H20:L20") - det samme omvendt.
Håber det giver en smule mening om, hvor jeg vil hen. Det drejer sig i bund og grund om, at den skal udregne nogle resultater løbende ud fra andre værdier hele tiden. Således, at vi i sidste ende står med et færdig resultat.
God weekend.