Just nu i M3-nätverket
Gå till innehåll

Göra en beräkning i VBA utan att mellanlagra resultat i en cell


mon935

Rekommendera Poster

Hejsan!

Jag har en fil med en massa "grundrader" som underlag för en massa beräkningar. Varje sådan grundrad genererar tolv nya beräknade rader. Varje grundrad har ett radnummer som kopieras till de nya raderna. För att öka läsbarheten har jag färglagt alla rader med ett jämt radnummer.

 

Nu till mitt problem. Jag har inte kommit på hur man gör för att slippa "mellanlagra" resultatet av if-satsen i en separat cell (0,34). En 2 eller 1 beroende på om resultatet är sant eller falskt. Hur gör man för att komma förbi detta? 

Så här ser min kod ut idag:

 
Sub BytBakgrundsfärg()
               
        ActiveCell.Offset(0, -32).Select
        ActiveCell.Offset(0, 34).FormulaR1C1 = "=IF(ISEVEN(RC[-33])=TRUE,2,1)"
          
        If ActiveCell.Offset(0, 34).Value = 2 Then
        GoTo Markera
        Else: Exit Sub
        End If
        
Markera:
        ActiveCell.Rows("1:12").EntireRow.Interior.Color = rgbBeige
End Sub
Länk till kommentar
Dela på andra webbplatser

Usch och fy på er båda!

 

Bort med alla Select och Activecell anrop!

och ta en titt på villkorsstyrd formatering om inte denna funktion räddar dig helt från hiskelig VBA-kod.

 

Förlåt mina hårda ord men det blöder i mina ögon...

Activecell måhända användas för att hitta en referens i början av en loop med därefter ska alla referenser hållas relativa inom koden utan Select-satser.

Sub BytBakgrundsfärg()
Dim myRn as Range
Set myRn = Activecell.Offset(0, -32)
If Application.WorksheetFunction.IsEven(Cells(myRnl.Row, myRn.Column + 34 - 33)) Then
       Rows("1:12").Interior.Color = RGB(255, 0, 0)
End If
End Sub

Lite städat... men inte riktigt bra det ovan heller.

Länk till kommentar
Dela på andra webbplatser

Usch och fy på er båda!

 

Bort med alla Select och Activecell anrop!

och ta en titt på villkorsstyrd formatering om inte denna funktion räddar dig helt från hiskelig VBA-kod.

 

Förlåt mina hårda ord men det blöder i mina ögon...

Activecell måhända användas för att hitta en referens i början av en loop med därefter ska alla referenser hållas relativa inom koden utan Select-satser.

Sub BytBakgrundsfärg()
Dim myRn as Range
Set myRn = Activecell.Offset(0, -32)
If Application.WorksheetFunction.IsEven(Cells(myRnl.Row, myRn.Column + 34 - 33)) Then
       Rows("1:12").Interior.Color = RGB(255, 0, 0)
End If
End Sub

Lite städat... men inte riktigt bra det ovan heller.

Tack för ditt svar.

Jag är nybörjare i VBA och hade inte koll på WorksheetFunktion. (Ska läsa på mer om den funktionen). Har liksom tänkt att det måste finnas en annan väg att gå än just activecell och select. Det var därför jag lade ut denna fråga. Det är liksom lite svårt, att hitta möjliga kommandon och rätt syntax, när man är nybörjare.

Gillar lösningen med myRn, den ska jag lägga på minnet. Mycket användbart.

 

Din kod ovan funkar bra förutom att Then-satsens  "Rows(1":12")" inte är en relativ referens. Det var rad 1-12 som ändrade färg. Min intention är att färglägga den raden jag står på samt kommande 11 rader (dvs 12 rader tot). Hur skriver man den relativa referensen? (det var det här med syntaxen igen.)

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.



×
×
  • Skapa nytt...