Avatar billede Nervatos Seniormester
17. december 2021 - 14:54 Der er 1 kommentar

VBA -> Find første to celler med værdi

Hej med Jer

Jeg 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.
30. december 2021 - 23:02 #1
Hver gang du gør sådan her....
FindI = x.Value & "/" & y.Value & " = " & Round(x.Value / y.Value, RN)
så overskriver du Findl...
Hvis jeg forstår det rigtigt, så vil du gerne have at Findl skal vokse for hver lykke du løber igennem... og hvis det er hvad du mener skal du blot ligge til værdien f.eks. sådan her
FindI = FindI + x.Value & "/" & y.Value & " = " & Round(x.Value / y.Value, RN)
giver det mening?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester