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

klistra in i filtrerad lista


krille45

Rekommendera Poster

Har filtrerat en lista och skall klistra in värden från annan tabell men Excel klistrar in i osynliga celler så all data kommer i oreda, har försökt med ”gå till enbart synliga” celler men där gör jag något fel.

Det finns säkert en enkel lösning då det måste va en vanlig grej.

Mycket tacksam för svar!

Krille

 

Länk till kommentar
Dela på andra webbplatser

Oavsett om jag testat med Autofilter eller Avancerat filter så följder enbart de synliga cellerna med vid kopiering.

 

Dvs filtrerar din lista, markera de celler du vill kopiera och kopiera/klistra in som vanligt ska fungera.

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

Sant att när jag kopierar data från en sorterad lista och använder funktionen ”gå till enbart synliga celler” så får jag me bara det som syns en biten funkar bra men sen när jag skall klistra in i den filtrerade listan som Excel fyller i även dom osynliga celler. Hoppas jag utrycker mig klart nog.

/Krille

 

 

Länk till kommentar
Dela på andra webbplatser

Ahah, du vill klistra in data i den sorterade listan. Ja, det är visst det som det står i rubriken... Då blir det till att testa lite...

 

nä, jag går bet.

 

Det är lite mystiskt att det går att editera cellerna i grupp men ej klistra in data till dem. Finns säkert en enkel förklaring men...

 

Du kan nog lösa det på annat sätta, ex.v. via makro som kopierar in dina värden.

 

Inget jag kan bidra med nu, känner att min hjärna gått och lagt sig för stunden. Inga avancerade funktioner tillgängliga innan nytt intag av mat :(

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

Dax att gå hem , får sova på saken , det måste ju gå på ett enkellt sätt är dock ingen höjdare på VB. Tack för att du har försökt!

/Krille

 

Länk till kommentar
Dela på andra webbplatser

Lite kod som du kan koppla till en knapp:

Sub KlistraSynligt()
   Dim rnSource As Range
   Dim rnTarget As Range
   On Error Resume Next
   Set rnSource = Application.InputBox("Välj celler att kopiera.", _
                        "Kopiera", Selection.Address, , , , , 8)
   If rnSource Is Nothing Then Exit Sub
   Set rnTarget = Application.InputBox("Välj celler att kopiera till", _
                        "Klistra in", Selection.Address, , , , , 8)
   If rnTarget Is Nothing Then Exit Sub
   Dim rwIndex As Integer
   Dim rwTarget As Integer
   rwTarget = 1
   On Error GoTo 0
   Dim iWidth As Integer
   Dim i As Integer
   iWidth = rnSource.Columns.Count
   rwIndex = 1
   Dim temp As Range
   Do
       Set temp = Nothing
       On Error Resume Next
       Set temp = rnTarget.Cells(rwTarget, 1).EntireRow.SpecialCells(xlCellTypeVisible)
       On Error GoTo 0
       If Not temp Is Nothing Then
           rnSource.Cells(rwIndex, iWidth).Copy
           rnTarget.Cells(rwTarget, 1).PasteSpecial xlPasteAll
           rwIndex = rwIndex + 1
       End If
       rwTarget = rwTarget + 1

   Loop While rwIndex <= rnSource.Rows.Count

End Sub

 

testa och se om det fungerar som du vill.

 

OBS! Det VBA-koden gör går EJ att ångra, dvs överskrivna förblir överskrivna.

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

Hej Har nu testat din VBA kod men jag gör något fel för den fyller alla celler med #saknas! Vad gör jag för fel?

/Krille

 

Länk till kommentar
Dela på andra webbplatser

Är det du ska kopiera resultatet av någon formel kanske? Kopiera då först ut värden och använd sedan min funktion. Min funktion tar allt i cellen och kopierar det. Kan visserligen göra om den, väldigt enkelt, så att den bara kopierar värden

 

Ändra raden

rnTarget.Cells(rwTarget, 1).PasteSpecial xlPasteAll

till

rnTarget.Cells(rwTarget, 1).PasteSpecial xlPasteValues

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

Ja ! Det var det som va felet , Din kod funkar nu skitbra! Ett stort tack för hjälpen!

/Krille

 

Länk till kommentar
Dela på andra webbplatser

Har ersatt den raden så att den nu hämtar enbart värden, körde koden och den jobbade jättebra men nu har jag kollat två gånger och det visade sig att den tar värden från dolda celler ändå, sen så stoppar den inte när den har kommit till slutet av urvalet. Har jag missförstått funktionen?

/Krille

 

 

Länk till kommentar
Dela på andra webbplatser

Värden tar den från alla celler men kopierar in enbart i synliga celler. Det var väl det du ville? Eller ska vi se till att den bara kopierar synliga celler till synliga celler. Och nej, den stoppar inte när din lista med synliga värden tar slut. Se till att inte kopiera fler än du vill, det är det absolut enklaste.

 

 

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

Nu känner jag att vi är nära. Precis, jag ville att den skulle kopiera synliga till synliga Då min tabell är filtrerad och jag skall ersätta felaktiga värden med riktiga (dom riktiga har jag tidigare hämtat från en annan tabell men INDEX/PASSA och sen filtrerat så att jag enbart ser värden som skiljer sig åt.

Antar att jag måste gå in och ändra något i programmet men vad?

/K

 

 

Länk till kommentar
Dela på andra webbplatser

Vi kan testa att efter raden

If rnSource Is Nothing Then Exit Sub

skriva;

Set rnSource = rnSource.SpecialCells(xlCellTypeVisible)
If rnSource is Nothing Then Exit Sub

Testa och se.

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

Nu stoppar den när den kommer till första osynliga cellen

/K

 

Länk till kommentar
Dela på andra webbplatser

såg inte att "If rnTarget Is Nothing Then Exit Sub" förekommer flera gånger, antar att jag skall klistra in "Set rnSource = rnSource.SpecialCells(xlCellTypeVisible)

If rnSource is Nothing Then Exit Sub"

på tre ställen?

K/

 

Länk till kommentar
Dela på andra webbplatser

klistrade in på tre ställen men den stannar på första osynliga ändå!

/Krille

 

Länk till kommentar
Dela på andra webbplatser

Mmh, det var inte riktigt så enkelt som jag trodde men inte heller så svårt.

Problemet som uppstod var att rnSource.SpecialCells(xlCellTypeVisible) returnerar ett antal områden (Areas) med celler i. Så vi får stega igenom områdena också. Inget svårt som sagt.

Sub KlistraSynligt()
Dim rnSource As Range
Dim rnTarget As Range
Dim rwIndex As Integer
Dim rwTarget As Integer
Dim iWidth As Integer
Dim i As Integer
Dim temp As Range

On Error Resume Next
Set rnSource = Application.InputBox("Välj celler att kopiera.", _
"Kopiera", Selection.Address, , , , , 8)

If rnSource Is Nothing Then Exit Sub
Set rnSource = rnSource.SpecialCells(xlCellTypeVisible)
If rnSource Is Nothing Then Exit Sub

Set rnTarget = Application.InputBox("Välj celler att kopiera till", _
"Klistra in", Selection.Address, , , , , 8)
If rnTarget Is Nothing Then Exit Sub
rwTarget = 1

On Error GoTo 0
iWidth = rnSource.Columns.Count
rwIndex = 1

For i = 1 To rnSource.Areas.Count
   rwIndex = 1
   Do
       Set temp = Nothing
       On Error Resume Next
       Set temp = rnTarget.Cells(rwTarget, 1).EntireRow.SpecialCells(xlCellTypeVisible)
       On Error GoTo 0
       If Not temp Is Nothing Then
       rnSource.Areas(i).Cells(rwIndex, iWidth).Copy
       rnTarget.Cells(rwTarget, 1).PasteSpecial xlPasteAll
       rwIndex = rwIndex + 1
       End If
       rwTarget = rwTarget + 1

   Loop While rwIndex <= rnSource.Rows.Count
Next i
End Sub

 

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

Inte så svårt? :)´Ju i mina ögon är det! Skall testa det det första jag gör på måndag, funkar det så blir det en ovanligt bra måndag.

Tack för hjälpen!

/Krille

 

Länk till kommentar
Dela på andra webbplatser

Inte så svårt? :)Ju i mina ögon är det!

Känner man verktygen var de inte så svåra att finna.

 

Hoppas det fungerar som du tänkt.

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

Har nu testat programmet och den hämtar fortfarande osynliga värden plus att jag måste omvandla allt till värden först annars får jag felmedelande " #saknas! " det är i för sig inget större problem för jag kan ju omvandla alla formler till värden innan jag filtrerar bara den tar synliga värden men programmet tar även osynliga tal

/Kristoffer

 

 

[inlägget ändrat 2007-05-07 10:44:28 av krille45]

Länk till kommentar
Dela på andra webbplatser

Dög inte/fungerade inte tipset jag gav i //eforum.idg.se/viewmsg.asp?EntriesId=941729#942049

dvs ändra så att enbart värdena kopieras?

 

Ändringen borde innebära att funktionen fungerar oavsett utseendet på källdata.

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

den biten är inget större problem så jag kan klippa ut och klistra som värden innan jag filtrerar men den hämtar fortfarande osynliga värden

Har nu ändrat

¨

rnTarget.Cells(rwTarget, 1).PasteSpecial xlPasteAll

 

med

 

rnTarget.Cells(rwTarget, 1).PasteSpecial xlPasteValues

så då funkar den biten men det svåra återstår

/Kristoffer

 

[inlägget ändrat 2007-05-07 11:01:06 av krille45]

Länk till kommentar
Dela på andra webbplatser

Undrar ifall du har den "senaste" versionen av koden:

[log]

Sub KlistraSynligt()
Dim rnSource As Range
Dim rnTarget As Range
Dim rwIndex As Integer
Dim rwTarget As Integer
Dim iWidth As Integer
Dim i As Integer
Dim temp As Range

On Error Resume Next
Set rnSource = Application.InputBox("Välj celler att kopiera.", _
"Kopiera", Selection.Address, , , , , 8)

If rnSource Is Nothing Then Exit Sub
Set rnSource = rnSource.SpecialCells(xlCellTypeVisible)
If rnSource Is Nothing Then Exit Sub

Set rnTarget = Application.InputBox("Välj celler att kopiera till", _
"Klistra in", Selection.Address, , , , , 8)
If rnTarget Is Nothing Then Exit Sub
rwTarget = 1

On Error GoTo 0
iWidth = rnSource.Columns.Count
rwIndex = 1

For i = 1 To rnSource.Areas.Count
   rwIndex = 1
   Do
       Set temp = Nothing
       On Error Resume Next
       Set temp = rnTarget.Cells(rwTarget, 1).EntireRow.SpecialCells(xlCellTypeVisible)
       On Error GoTo 0
       If Not temp Is Nothing Then
           With rnSource.Areas(i)
               Me.Range(.Cells(rwIndex, 1), .Cells(rwIndex, iWidth)).Copy
           End With
           rnTarget.Cells(rwTarget, 1).PasteSpecial xlPasteValues
           rwIndex = rwIndex + 1
       End If
       rwTarget = rwTarget + 1

   Loop While rwIndex <= rnSource.Rows.Count
Next i
End Sub

[/log]

 

Denna:

Kopierar alla synliga rader inom angivet område till angivet mål. Den kopierar enbart värden.

Kopierar hela bredden av markerade värden, ignorerar även gömda kolumner.

 

det senare en liten ändring sedan sist, det fungerar inte riktigt att kopiera områden som sträckte sig över flera kolumner men nu ska den fungera i ALLA lägen.

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

Här är koden jag använder

 

Sub KlistraSynligt()

Dim rnSource As Range

Dim rnTarget As Range

Dim rwIndex As Integer

Dim rwTarget As Integer

Dim iWidth As Integer

Dim i As Integer

Dim temp As Range

 

On Error Resume Next

Set rnSource = Application.InputBox("Välj celler att kopiera.", _

"Kopiera", Selection.Address, , , , , 8)

 

If rnSource Is Nothing Then Exit Sub

Set rnSource = rnSource.SpecialCells(xlCellTypeVisible)

If rnSource Is Nothing Then Exit Sub

 

Set rnTarget = Application.InputBox("Välj celler att kopiera till", _

"Klistra in", Selection.Address, , , , , 8)

If rnTarget Is Nothing Then Exit Sub

rwTarget = 1

 

On Error GoTo 0

iWidth = rnSource.Columns.Count

rwIndex = 1

 

For i = 1 To rnSource.Areas.Count

rwIndex = 1

Do

Set temp = Nothing

On Error Resume Next

Set temp = rnTarget.Cells(rwTarget, 1).EntireRow.SpecialCells(xlCellTypeVisible)

On Error GoTo 0

If Not temp Is Nothing Then

rnSource.Areas(i).Cells(rwIndex, iWidth).Copy

rnTarget.Cells(rwTarget, 1).PasteSpecial xlPasteValues

rwIndex = rwIndex + 1

End If

rwTarget = rwTarget + 1

 

Loop While rwIndex <= rnSource.Rows.Count

Next i

End Sub

 

Det är väll den senaste?

 

Måste få tacka dig för ditt tålamod, för mig är det en stor utmaning, tyvärr så är mina VBA kunskaper på helt annan nivå än dina.

/Krille

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

Ta den som är i mitt senaste inlägg. Liten skillnad som jag beskrev i inlägget. Annars de den kod du klistrat in ut som den förra versionen (dvs den sista innan mitt förra inlägg).

 

Så nu återstår frågan, om koden än inte fungerar:

Vad är det för data du kopierar?

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

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