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

Invertera värden i VBA

Rekommendera Poster

Jag har två olika listor med intäkter och kostnader där det löpande läggs in nya värden. Jag har ett fungerande makro, som lägger ihop dessa tabeller och sorterar den sammanslagna listan i datumordning. Mitt problem är att inkomsterna i den ena listan är positiva och kostnaderna negativa, i den andra listan är kostnaderna positiva och inkomsterna negativa. Jag behöver således invertera värden i den ena tabellen före sammanläggningen. Min tanke är att göra detta som ett steg i makrot som lägger samman värdena, men jag får inte ihop det med teckenbytet.

 

 

Värdena i lista 1 ligger i kolumnerna A , B ochC i lista 2 ligger det i E, F ocg G och den sammanslagna listan hamnar i I,J och K

 

Se bifogad excel-fil

 

Jag behöver en procedur som byter tecken på värdena i kolumn G innan de hamnar i kolumn K

xx.xls

Redigerad av Oj!

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Jag har två olika listor med intäkter och kostnader där det löpande läggs in nya värden. Jag har ett fungerande makro, som lägger ihop dessa tabeller och sorterar den sammanslagna listan i datumordning. Mitt problem är att inkomsterna i den ena listan är positiva och kostnaderna negativa, i den andra listan är kostnaderna positiva och inkomsterna negativa. Jag behöver således invertera värden i den ena tabellen före sammanläggningen. Min tanke är att göra detta som ett steg i makrot som lägger samman värdena, men jag får inte ihop det med teckenbytet.

 

 

Värdena i lista 1 ligger i kolumnerna A , B ochC i lista 2 ligger det i E, F ocg G och den sammanslagna listan hamnar i I,J och K

 

Se bifogad excel-fil

 

Jag behöver en procedur som byter tecken på värdena i kolumn G innan de hamnar i kolumn K

 

Om du låter K2 vara =-G1 och K4 =-G2 så ändrar du tecken på värdena då - - = +

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Byta tecken på allt?

 

Skriv värdet -1 i en tom cell.

Kopiera denna cell.

Markera värdena du vill invertera, välj klistra in special, värden, multiplicera.

Ingen VBA-kod för detta inte.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Men, problemet är att jag inte vet i vilken rad respektive uppgifter från ursprungslistorna, hamnar i.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Jaha, du menar att du samla in intäkter och kostnader från två listor i en.

varför inte ha det i en lista från början? Det rekommenderas starkt. Märk bara varje post med vad det är, en kostnad eller intäkt och allt blir mycket enklare.

 

 

Men men om vi ska lösa ditt problem så behöver vi lite mer.

Sker ihopsamlingen via formler, manuellt eller via VBA

Om vi formler, bara en enkel OM-sats kan vända på det.

Om manuellt, vänd det via knepet jag gav

eller använd OM-sats som läser av om det är en kostnad eller intäkt och vänder på det.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Jo jag fattar - hade jag haft mina data i en lista från början behöver jag ju inte slå ihop dem. Problemet är att jag har två olika listor, där poster läggs till varje dag med lite olika egenskaper och jag vill inte skriva om dem manuellt . På ett år ka det handla om ca 1000 poster per lista och år.

 

 

Själva hopslagningen av listorna sker med hjälp av ett makro, vilket så långt fungerar korrekt. Me slutresultatet blir fel eftersom listan med början i I20 har omvända tecken i förhållande till listan som börjar i U20. Jag skulle behöva något som inventerar värdena i den lista som utgår från U20

 

Private Sub CommandButton1_Click()

 

Range(Range("B20"), Range("B20").End(xlDown).Resize(, 4)).Select

Application.CutCopyMode = False

Selection.ClearContents

Range(Range("I20"), Range("I20").End(xlDown).Resize(, 4)).Select

Application.CutCopyMode = False

Selection.Copy

Range("AA20").Select

ActiveSheet.Paste

Range(Range("U20"), Range("U20").End(xlDown).Resize(, 4)).Select

Application.CutCopyMode = False

Selection.Copy

Range("AA20").Select

Selection.Insert Shift:=xlDown

Range(Range("AA20"), Range("AA20").End(xlDown).Resize(, 4)).Select

Selection.Sort Key1:=Range("AA20"), Order1:=xlDescending, Header:=xlGuess, _

OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _

DataOption1:=xlSortNormal

Range(Range("AA20"), Range("AA20").End(xlDown).Resize(, 4)).Select

Application.CutCopyMode = False

Selection.Copy

Range("B20").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Range(Range("AA20"), Range("AA20").End(xlDown).Resize(, 4)).Select

Selection.ClearContents

Range("B20").Select

End Sub

 

 

 

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Städat bort alla Select

Lagt in With.

Kommenterat.

 

Gjort om totalt

Private Sub CommandButton1_Click()

With Blad1
   	Dim myRn As Range
   	Dim rwIndex As Integer

   	'tömmmer B20 och neråt
   	.Range(.Range("B20"), .Range("B20").End(xlDown).Resize(, 4)).ClearContents
   	'kopierar I20 och nedåt till AA20
   	Set myRn = .Range(Range("I20"), .Range("I20").End(xlDown).Resize(, 4))
   	rwIndex = myRn.Rows.Count
   	.Range("AA20").Resize(rwIndex, 4).Value = myRn.Value

   	'Kopierar in U20 och nedåt i AA, nedan det ovan inklistrade
    	Set myRn = .Range(.Range("U20"), .Range("U20").End(xlDown).Resize(, 4))

   	.Range("AA20").Offset(rwIndex).Resize(myRn.Rows.Count, 4) = myRn.Value
   	'invertera en kolumn?
   	.Range("AF20") = -1
   	.Range("AF20").Copy
   	.Range("AA20").Offset(rwIndex, 3).Resize(myRn.Rows.Count).PasteSpecial xlPasteValues, xlPasteSpecialOperationMultiply
   	Application.CutCopyMode = False

   	'sorterar
   	.Range(.Range("AA20"), .Range("AA20").End(xlDown).Resize(, 4)).Sort _
               	Key1:=.Range("AA20"), Order1:=xlDescending, Header:=xlGuess, _
               	OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
               	DataOption1:=xlSortNormal

   	'klistrar in i B20 och nedåt, enbart värden.
   	Set myRn = .Range(.Range("AA20"), .Range("AA20").End(xlDown).Resize(, 4))
   	.Range("B20").Resize(myRn.Rows.Count, 4).Value = myRn.Value

   	'tömmer temp
   	.Range(.Range("AA20"), .Range("AA20").End(xlDown).Resize(, 4)).ClearContents
End With
End Sub

Borde fungera som du vill.

Notera två saker:

1: Anpassa blad-referensen efter dina förutsättningar.

2: Nyttjar cell AF20, om denna inte tom använd annan.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Tack för bra svar. Det fungerar som tänkt och jag lärde mig mycket när jag gick in i detaljerna. Det blir mycket elegantare än när man som jag bygger utifrån inspelade makrosekvenser.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...