Gå till innehåll

Nybörjarfråga VBA


Gå till lösning Löst av MH_,

Recommended Posts

Hej! Första inlägget här på forumet - har tidigare suttit på eforum IDG. Hoppas att det finns några bekanta ansikten här framöver ^_^

Jag har ett makro som jag har spelat in på jobbet, som jag skulle behöva lite hjälp med. Makrot är inspelat så att det är kopplat till C2:C31. Jag undrar hur jag skriver om koden så att makrot istället kopierar till sista tomma raden. Det kommer inte alltid vara C:31 som är sista raden. Någon som kan hjälpa mig? Makrot är egentligen ganska enkelt, jag vill bara infoga en ny rad höger om priset (som kommer i kolumn b) och avrunda alla tal i kolumn B:B till 0 decimaler. Sedan kopiera alla priser med 0 decimaler som värden. Ett steg i en process för att kunna ladda upp en prisfil i affärssystemet. 

Makrot: 

Sub Avrunda_0_Decimaler()
'
' Avrunda_0_Decimaler Makro
'

'
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "=ROUND(RC[-1],0)"
    Range("C2").Select
    Selection.AutoFill Destination:=Range("C2:C31"), Type:=xlFillDefault
    Range("C2:C31").Select
    Range("C2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Range("B2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A1").Select
End Sub

 

Länk till kommentar
Dela på andra webbplatser

  • Lösning

du kan använda samma kod som du kör när du hämtar formlerna 

Range(Selection, Selection.End(xlDown)).Select

Fast i B kolumnen. Dvs samma sak som att stå i B2 och trycka Ctrl+shift+nedpil : 

Sub Avrunda_0_Decimaler()
    Range("B2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Offset(rowOffset:=0, columnOffset:=1).Select
    Selection.FormulaR1C1 = "=ROUND(RC[-1],0)"
    Selection.Copy
    Range("B2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A1").Select
End Sub

Och om Monshi skulle få syn på det här så gör vi en variant utan en massa Select och Copy

Offset är bara ett sätt att flytta hela området (i vårt fall +1=en  kolumn till höger, dvs kolumn C)

 

Sub Avrunda_0_Decimaler()
Dim mittOmråde As Range

' bestämm urspungsområde
	Set mittOmråde = Range("B2", Range("B2").End(xlDown))

'Skriv in formel i C kolumnen (Mittområde offsetat 1 kolumn)
	mittOmråde.Offset(rowOffset:=0, columnOffset:=1).FormulaR1C1 = "=ROUND(RC[-1],0)"
'Och ange att B kolumnen skall vara lika med värdena i C 
    mittOmråde.Value = mittOmråde.Offset(0, 1).Value
' Ta bort data från C, om du vill
'    mittOmråde.Offset(0, 1).ClearContents
    Range("A1").Select
End Sub

 

  • Thanks 1
Länk till kommentar
Dela på andra webbplatser

  • 2 veckor senare...
On 2022-07-26 at 20:24, MH_ sade:

du kan använda samma kod som du kör när du hämtar formlerna 

Range(Selection, Selection.End(xlDown)).Select

Fast i B kolumnen. Dvs samma sak som att stå i B2 och trycka Ctrl+shift+nedpil : 

Sub Avrunda_0_Decimaler()
    Range("B2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Offset(rowOffset:=0, columnOffset:=1).Select
    Selection.FormulaR1C1 = "=ROUND(RC[-1],0)"
    Selection.Copy
    Range("B2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A1").Select
End Sub

Och om Monshi skulle få syn på det här så gör vi en variant utan en massa Select och Copy

Offset är bara ett sätt att flytta hela området (i vårt fall +1=en  kolumn till höger, dvs kolumn C)

 

Sub Avrunda_0_Decimaler()
Dim mittOmråde As Range

' bestämm urspungsområde
	Set mittOmråde = Range("B2", Range("B2").End(xlDown))

'Skriv in formel i C kolumnen (Mittområde offsetat 1 kolumn)
	mittOmråde.Offset(rowOffset:=0, columnOffset:=1).FormulaR1C1 = "=ROUND(RC[-1],0)"
'Och ange att B kolumnen skall vara lika med värdena i C 
    mittOmråde.Value = mittOmråde.Offset(0, 1).Value
' Ta bort data från C, om du vill
'    mittOmråde.Offset(0, 1).ClearContents
    Range("A1").Select
End Sub

 

 

Stort tack för ett återigen exemplariskt svar! Funkade perfekt :) 

Haha ja, tack för räddningen. Alltid bra att ha en reservplan om monshi hittar hit! (Kul med lite humor ibland också ;))

Länk till kommentar
Dela på andra webbplatser

Delta i dialogen

Du kan skriva svaret nu och registrera dig senare, Om du har ett konto, logga in nu för att svara på inlägget.

Gäst
Svara i detta ämne...

×   Du har klistrat in innehåll med formatering.   Ta bort formatering

  Only 75 emoji are allowed.

×   Din länk har automatiskt bäddats in.   Visa som länk istället

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Skapa nytt...