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

Kopiera celler från en flik till en annan


Bjourklund

Rekommendera Poster

Hej.

Är helt ny inom området makro och har kört fast med en grej så hoppas någon har något bra tips.

 

Jag har skapat ett Excelark som jag ska använda som mall i fortsättningen. I arket har jag gjort en summering med en massa kostander osv.

På summeringssidan har jag skapat en knapp som jag kopplat ett makro till, som fungerar på följande sätt:

 

Om jag markerar en viss cell på summeringssidan och sedan trycker på knappen jag skapat så öppnas en nytt blad som får namnet med den markerade cellens innehåll, tex på summeringssidan finns en cell som heter BCB.1, om jag står i den cellen och trycker på knappen så öppnas en ny sida som heter BCB.1 För varje ny sida som skapas infogas även en tabell som jag har lyckats koda.

Detta fungerar precis som det ska.

 

Nu till problemet.

Det jag vill nu ska hända är att.

När man skapar en ny sida via knappen, vill jag även att viss data från summeringssidan ska kopieras och klistras in i den ny sidan som skapas på en bestämd plats.

Det är inte samma data som ska kopieras från summeringssidan hela tiden, utan tex. cell B:7 och C:8 ska kopieras från summertingssidan och klistras in i sida BCB.1, och cell B:10 och D14 för en annan sida jag skapar.

Får inte till koderna rätt.

 

Har prövat med att spela in makron där jag kopierar visa celler och klistrar in sedan men utan att få det att fungera så som jag vill.

Hoppas ni förstår mitt problem och ni kan hjälpa mig, håller på att bli tokig!

Länk till kommentar
Dela på andra webbplatser

Hur ska excel få reda på vilka celler som ska kopieras till det nya bladet?

Man skriver såklar in i formlerna vilka celler som ska väljas!

Länk till kommentar
Dela på andra webbplatser

Undrar vad du gör egentligen, samma data på flera blad är ett bra upplägg för att skapa inkonsistenta data, det data som ska vara lika varierar genom boken.

 

Normalt mår Excel bäst av att hanteras som en databas, men tabeller och rapporter.

Data i tabeller och rapporten som hämtar data från tabellerna, sammanställer det.

Inge kopierar.

 

 

Men men till det du frågar om.

För att VBA ska "veta" vilka celler som ska kopieras, och vart, måste det finnas regler för det. Som exempelvis:

Om det finns data i A2, sök sista rad med data neråt, kopiera data från A2 till sista rad, x antal kolumner till blad y, cell A1...

 

Alternativt kod som frågar dig vad som ska kopieras men då kan du lika gärna använda Ctrl-c + Ctrl-v.

Länk till kommentar
Dela på andra webbplatser

Jag skickar med dem koder jag har använt mig av så kanske du ser vad jag har gjort.

 

Jag har skrivit in följande kod:

 

Sub Nyflik()

 

Application.ScreenUpdating = False

 

Dim a As String

a = ActiveCell.Value

Sheets.Add.After:=Sheets(Sheets.Count)

ActiveSheet.Name = a

 

'Här vill jag ha in den koden som gör att jag kopierar vissa celler från första sidan till dem nya flikarna jag skapar

 

 

'Lägger alla flikar i alfabetisk ordning

intAntalBlad = ActiveWorkbook.Worksheets.Count

For i = 1 To intAntalBlad

For j = i To intAntalBlad

If LCase(Worksheets(j).Name) <LCase(Worksheets(i).Name) Then

Worksheets(j).Move After:=Worksheets(i)

End If

Next j

Next i

 

Appliction.ScreenUpdating=False

 

End Sub

Länk till kommentar
Dela på andra webbplatser

Säger mig inte vad för celler som ska kopieras. Skicka upp en exempelbok är mitt förslag.

 

Annars att kopiera celler är enkelt, exempelvis

Blad1.Range("A1").Value = Blad2.Range("A1").Value

 

eller lite mer komplext

Blad1.Range("A1").Resize(blad2.Range("A1").CurrentRegion.Rows.Count, Blad2.Range("A1").Currentregion.Columns.Count)).Value = Blad2.Range("A1").CurrentRegion.Value

som kopierar hela sammanhängande området från A1 sett.

 

Eller

Blad2.Range("A1").CurrentRegion.Copy

Blad1.Range("A1").PasteSpecial

Länk till kommentar
Dela på andra webbplatser

Tack för tipsen, men de är inte riktigt så jag vill att det ska funka. 

Eftersom mina flikar inte heter Blad1 eller Blad2 så blir det ju svårt,

dem nya flikarna får ju namnet som den markerade cellen jag har markerat heter,

 

Exempelvis, om jag står i cell A:1 och i den fliken står det CBB.12 så får den nya fliken som skapas namnet CBB.12,

är du med mig då?

I den specifika fliken som skapas vill jag att vissa celler från sammantällningssidan ska klistras in i den.

Länk till kommentar
Dela på andra webbplatser

Flikar kan man adressera på fler sätt.

 

För dig passar nog

Worksheets("bladets namn")

bättre då du har det namnet.

eller att du vid kopieringen låser en referens till bladet du ska kopiera till så slipper du hålla reda på namnet.

Sheets.Add.After:=Sheets(Sheets.Count)
set ws = Sheets(Sheets.count)
ws.name = ...

osv.

eller

With Sheets(Sheets.count)
     .Name = ..
End with

  Det där är inget problem, problemet är väl att veta vad som ska kopieras?  Fast det kanske du kan klura ut hur koden ska se ut nu när du har lite att bygga från?

Länk till kommentar
Dela på andra webbplatser

Tack för tipsen.

Men eftersom fliken inte finns från början utan den skapas när jag kör makrot,

blir det väl svårt att koda det som ska kopieras till exakt plats??

 

Jag tänker mig någon kod som gör på följande sätt:

Det jag vill kopiera klistras in på det senast skapade bladet eller liknande?

Går det?

Länk till kommentar
Dela på andra webbplatser

Nej, du får ju via koden ovan en referens till det nya bladet. Ett nytt blad är ett tomt blad, bara att skriva till det.

 

Som sagt, ladda upp en exempelbok med vad du har och vad du vill ha.

Känns som vi står och trampar vatten ärligt talat. Jag vet inte vad du behöver hjälp med och du verkar inte helt veta vad du ska fråga efter heller.

 

Ett exempel löser nog de knutarna.

Länk till kommentar
Dela på andra webbplatser

Bjourklund

Här kommer ett exempel jag gjort istället för du kanske kan hjälpa mig:

 

För att förtydliga det hela ytterligare så gör du på följande sätt,

När du öppnat filen så ställer du dig där det står Stockholm,

tryck sedan på knappen "skapa sida",

nu ska du fått upp en ny sida där cellerna B3 och C3 har en fet kant runt sig, lägg märke till också att sidan har fått namnet Stockholm.

Pröva nu att gå tillbaka till första sidan, ställ dig i rutan Göteborg istället och klicka sedan på knappen "skapa sida" så skapas likadan sida som tidigare där samma celler har en fet kant runt sig, det enda som skiljer nu är att sidan heter Göteborg.

 

Nu till det som jag vill ska hända nu.

I varje ny sida som skapas vill jag att värdet för intäkterna och utgifterna ska kopieras och sedan klistras in i i det området på dem nya flikarna som hade en fet kant runt sig.

Lägg märke till att det är inte samma värden för Stockholm eller Göteborg så de är inte samma celler som ska kopieras hela tiden.

Hur gör man detta?

Hoppas det går att lösa.

Tack på förhand!''

Länk till kommentar
Dela på andra webbplatser

Klicka på "Använd fullständig redigerare". Där kan du bifoga icke makroaktiverade filer. Om med makro, lägg dem först i ett zip-arkiv och ladda upp arkivet.

Länk till kommentar
Dela på andra webbplatser

Uppdaterar din kod rakt över. Såg ut att vara direktinspelad med massa onödiga select-satser och annat. Kortare, finare nu helt enkelt. Med en rad som sköter kopieringen.

Sub Nyflik()
    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet
    Dim rnSource As Range
    On Error Resume Next
    Set rnSource = Application.InputBox(prompt:="Markera stad att kopiera", Title:="Cell", Type:=8)
    On Error GoTo 0
    If rnSource Is Nothing Then Exit Sub
    
    Dim wsTest As Worksheet
    On Error Resume Next
    Set wsTest = Worksheets(rnSource.Value)
    On Error GoTo 0
    If Not wsTest Is Nothing Then
        MsgBox "Blad med den staden finns redan", vbCritical
        Exit Sub
    End If
    Application.ScreenUpdating = False
    
    Set wsSource = ActiveSheet
    Sheets.Add After:=Sheets(Sheets.Count)
    Set wsTarget = ActiveSheet

    wsTarget.Name = rnSource
    
     init wsTarget
     
    'Kopierar värde
     KopieraVärden wsTarget, rnSource
     SortSheets
    wsSource.Activate
     Application.ScreenUpdating = False
    
End Sub
Sub KopieraVärden(wsTarget As Worksheet, rnSource As Range)
    wsTarget.Range("B3:C3").Value = rnSource.Offset(0, 1).Resize(1, 2).Value

End Sub

Sub SortSheets()
    'Lägger alla flikar i alfabetisk ordning
    intAntalBlad = ActiveWorkbook.Worksheets.Count
    For i = 1 To intAntalBlad
      For j = i To intAntalBlad
        If LCase(Worksheets(j).Name) < LCase(Worksheets(i).Name) Then
          Worksheets(j).Move After:=Worksheets(i)
        End If
      Next j
    Next i
End Sub
Sub init(ws As Worksheet)
'Lägger till text
    With ws
        .Range("B2") = "Intäkter"
        .Range("C2") = "Utgifter"
    

'Gör kantlinjer

        With .Range("B3:C3")
            .BorderAround Weight:=xlThick
              
            .Range("E9:K28").NumberFormat = "#,##0"
            .Range("F9:G28,I9:I28,K9:K28").NumberFormat = "_-* #,##0 $_-;-* #,##0 $_-;_-* ""-""?? $_-;_-@_-"
        End With
    End With
End Sub

 

Kopia av Egengjord.zip

Länk till kommentar
Dela på andra webbplatser

Bjourklund

Tusen tackar för hjälpen, det funkar!

 

Jag återkommer om det är något annat jag behöver hjälp med.

 

Tack återigen.

Länk till kommentar
Dela på andra webbplatser

Bjourklund

Det blev ändå lite konstigt ändå.

Allting fungerar som jag vill, men nu kopierar den inte rätt celler, mitt exempel ser nämligen inte ut exakt samma.

Nu kopierar den celler som hör till respektive stad,

om jag istället vill kopiera helt andra celler, alltså att man skriver cellens namn, vart gör jag det?

Länk till kommentar
Dela på andra webbplatser

ja du, jag kan inte göra mer än jag ser i ditt exempel.

 

Men tre alternativ finns

1: De celler som ska kopieras, ligger de relativt den första position du väljer? Ja cellen du väljer när du väljer stad.

 

2: Kan Excel söka efter cellerna på något vis? Hitta dem, via nyckelord?

 

3:Poppar upp en ny dialog där du får välja cellerna.

 

Vi är tillbaka till ruta ett, du har inte berättat vilka celler som ska kopieras, hur koden ska veta att det är just de cellerna!

Länk till kommentar
Dela på andra webbplatser

Bjourklund

Ursäkta om jag är oklar!

Men om du kollar på exemplet jag skickade tidigare,

så vill jag att cellerna B2 och C6 ska kopieras och klistras in i fliken för Stockholm.

Går det?

Länk till kommentar
Dela på andra webbplatser

Visst går det.

 

Men om staden Göteborg väljs, ska B2 och C6 kopieras även då?  Eller är det B3 och C7 som ska kopieras då?

 

Kopiera en cell är enkelt, i min kod, i funktionen KopieraVärden bara att

    wsTarget.Range("B3") = rnSource.Range("b2")
    wsTarget.Range("C3") = rnSource.Range("c6")

men som sagt, är väl inte alltid cell b2/C6 som ska kopieras?

Länk till kommentar
Dela på andra webbplatser

Bjourklund

Ne precis, du har helt rätt, de är inte alltid samma cell som ska kopieras.

Vart klistrar jag in dessa formler?

Länk till kommentar
Dela på andra webbplatser

Fortfarande

 

Hur ska Excel veta vilka celler som ska kopieras?

finns det ett mönster, finns det något att söka?

Om Stockholm väljs då ska...

Om Göteborg väljs då ska..

osv.

Kanske du måste ställa upp dina data på annat vis?

 

Skicka upp en bild av ditt Excel-ark, en anonymiserad kopia eller liknande. 

 

Jag kan inte hjälpa dig mer utan mer data!

Länk till kommentar
Dela på andra webbplatser

Bjourklund

Tack för att du vill hjälpa, förstår om jag är jobbig.

Jag skickar istället filen jag arbetar med!

 

Om du trycker på skapa mätspecifikation om trycker på valfri kod som finns ute i vänsterhörnet så skapas en ny sida, precis som det ska, sidan innehåller mall.

I den mallen vill jag få med vissa värden för den specifika koden.

Så om till exempel skapar en ny mätspecifikation för koden BCB.1 alltså cell A12 så vill jag att cell A12, B12, C12, D12 ,E12 ska klistras in i det nya bladet.

Och om du skapar en ny mätspecifikation för Koden BFE.21 alltså cell A15 så vill jag att cell A15, B15, C15, D15, E15 ska klistras in i den fliken.

Det är alltså inte samma rad hela tiden som ska kopieras.

 

Jag vill även att cellen B5 från förstasidan ska kopieras in i alla nya blad som skapas?

 

Är du med mig då?

 

Hoppas du kan hjälpa mig.

Tack på förhand.

Länk till kommentar
Dela på andra webbplatser

Jamen då är varje cell som du ska kopiera på samma rad som den du valt och inom samma avstånd från den du valt.

 

I funktionen KopieraVärden ligger idag

    wsTarget.Range("B9").Value = rnSource.Offset(0, 1).Resize(1, 2).Value
 

som kopierar cell en kolumn åt höger två celler på samma rad till B9. ja i praktiken bara en cell iochmed att bara en celll får värde.

Bara att anpassa denna till

    wsTarget.Range("A9:E9") = rnSource.Resize(1, 5).Value
 

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...