GRY-Online.pl --> Archiwum Forum

Pomoc przy Excelu - wklejanie danych

17.06.2008
11:24
[1]

Ryslaw [ Patrycjusz ]

Pomoc przy Excelu - wklejanie danych

Mam pewien problem z Excelem, z którym nie mogę sobie poradzić - chodzi o wklejanie danych do odfiltrowanych kolumn.

Załóżmy, że mam dwa arkusze Excela.

- Arkusz A zawiera mnóstwo różnych danych, z których odfiltrowałem potrzebne mi wiersze.

- Arkusz B zawiera dane, które chcę przekleić do odfiltrowanych wierszy w Arkuszu A.

Problem w tym, że gdy wklejam dane z arkusza B do arkusza A, to są one przenoszone tak, jakby odfiltrowania nie było, a mi chodzi o to, żeby to co mam w arkuszu B przenieść na odfiltrowane wiersze w arkuszu A.

Mam nadzieję, że to w miarę jasno opisałem :)

Gdyby ktoś wiedział, jak rozwiązać ten problem byłbym bardzo wdzięczny.

17.06.2008
11:29
[2]

John_Kruger [ Internetowy eksplorator ]

to chyba na odwrot, ale może pomoze:

17.06.2008
11:35
[3]

Ryslaw [ Patrycjusz ]

Dzięki za pomoc, ale niestety nie o to chodzi.

Opiszę to może dokładniej.

W arkuszu A znajdują się dwie kolumny - w pierwszej jest ID, a w drugiej teksty. Odfiltrowałem kolumnę pierwszą po ID, aby w drugiej kolumnie wyświetlały mi się teksty tylko z tym samym ID.

Teraz chcę przekleić zawartość arkusza B do odfiltrowanej kolumny z tekstami.

17.06.2008
12:19
[4]

Ryslaw [ Patrycjusz ]

Podbijam. Może ktoś zna odpowiedź.

17.06.2008
12:33
[5]

yasiu [ Senator ]

poczekaj chwilę... mam mały przestój, może coś wykombinuję :)

hmm... ciekawe....

17.06.2008
12:46
[6]

Ryslaw [ Patrycjusz ]

Znalazłem jakiś kod w PHP, który podobno pozwala wklejać tekst tylko na widoczne komórki. Problem w tym taki, że na PHP znam się mniej więcej równie dobrze co na strzyżeniu owiec kataną i nie mam pojęcia, jak to zastosować w excelu:

Option Explicit
Public StartWB As Workbook
Public StartWS As Worksheet
Public CopyRng As String

Public Sub CopyToVisibleOnly1()
'Start with cell selected that you want to copy.
Set StartWB = ActiveWorkbook
Set StartWS = ActiveSheet
CopyRng = Selection.Address
'Call CopyToVisibleOnly2 after a five-second delay.
Application.OnTime Now() + TimeValue("0:00:04"), "CopyToVisibleOnly2"
End Sub

Private Sub CopyToVisibleOnly2()
'Declare local variables.
Dim EndWB As Workbook, EndWS As Worksheet
Dim Target As Range, CurrCell As Range
Dim x As Long, FromCnt As Long
On Error GoTo CTVOerr
'Select the range where it should be pasted.
Set Target = Application.InputBox _
(Prompt:="Select the first cell in the Paste range", Type:=8)
Set EndWB = ActiveWorkbook
Set EndWS = ActiveSheet
Set CurrCell = Target.Cells(1, 1)
Application.ScreenUpdating = False
'Copy the cells from the original workbook, one at a time.
StartWB.Activate
StartWS.Activate
For x = 1 To Range(CopyRng).Count
StartWB.Activate
StartWS.Activate
Range(CopyRng).Cells(x, 1).Copy
'Return to the target workbook.
EndWB.Activate
EndWS.Activate
CurrCell.Activate
'Only cells in visible rows in the selected
'range are pasted.
Do While (CurrCell.EntireRow.Hidden = True) Or _
(CurrCell.EntireColumn.Hidden = True)
Set CurrCell = CurrCell.Offset(1, 0)
Loop
CurrCell.Select
ActiveSheet.Paste
Set CurrCell = CurrCell.Offset(1, 0)
Next x
Cleanup:
'Free the object variables.
Set Target = Nothing
Set CurrCell = Nothing
Set StartWB = Nothing
Set StartWS = Nothing
Set EndWB = Nothing
Set EndWS = Nothing
Application.ScreenUpdating = True
Exit Sub
CTVOerr:
MsgBox Err.Description
GoTo Cleanup
End Sub

17.06.2008
13:02
[7]

Isaael [ Chor��y ]

PHP to raczej w Excelu nie wykorzystasz, bardziej VB.

A na jakiej wersji Excela pracujesz, bo w 2007 po prostu zaznaczasz pofiltrowany obszar i kopiuje się tylko widoczna zawartość. Niestety nie wiem czy działa to w taki sam sposób w starszych wersjach.

17.06.2008
13:04
[8]

yasiu [ Senator ]

no wlasnie - skopiuj przefiltrowany obszar, dodaj to tych komorek tekst ktory chcesz, usun te komorki ktore sa widoczne po filtrze, zdejmij filtr, podlacz do tego to, co ci zostalo i posortuj... heh... a powyzszy kod to nie PHP :/

17.06.2008
13:04
[9]

Ryslaw [ Patrycjusz ]

Isaael --> używam 2007. Ale nie chodzi o kopiowanie, tylko wklejanie. Z kopiowaniem nie ma problemu - chodzi o to, żeby wkleić to później na odfiltrowane komórki, tak aby nie ruszać komórek ukrytych.

17.06.2008
13:17
[10]

Isaael [ Chor��y ]

no tak, jak zaznaczysz pofiltrowane dane to tylko one zostaną skopiowane i tylko je wkleisz do np. nowego arkusz. A jak korzystasz z 2007 to na 100% to działa.
jak chcesz to prześlij mi jakiś plik .xls na maila ;)

17.06.2008
13:49
[11]

Ryslaw [ Patrycjusz ]

Isaael -- może nie wyjaśniłem się jasno :)

Mam arkusz B - nie jest on filtrowany. Chcę dane z niego przekleić do filtrowanego arkusza A.
I nie działa niestety.

17.06.2008
13:49
[12]

albz74 [ Legend ]

Ryslaw - a jaki jest cel tego cwiczenia, chcesz zamienic jakies dane, czy dopisac ?

17.06.2008
14:20
[13]

Ryslaw [ Patrycjusz ]

albz74 - to nie jest ćwiczenie, tylko często spotykany problem przy pracy.

Dostaję na przykład tłumaczenie w excelu i odfiltrowuję sobie tylko potrzebne rzeczy, które tłumaczę w wordzie, a później chcę je z powrotem przekleić do odfiltrowanego pliku bez konieczności robienia tego komórka po komórce.

17.06.2008
15:01
smile
[14]

cioruss [ oko cyklopa ]

Ryslaw, znam Twoj problem, walczylem z tym jakis miesiac temu. podobno nie da sie tego przeskoczyc, sam skonczylem recznie edytujac tabele 2000x15. 3 dni roboty.

zeby bylo smieszniej, to filtracja sprawia rowniez inne niespodzianki.

np. zostajesz z wierszami 2 i 4, zaznaczasz 'od-do', kasujesz i okazuje sie, ze 3 tez zniknela.

tak czy inaczej, moze ktos zna jakis ciekawy trik, chetnie sam sie naucze

17.06.2008
16:23
[15]

Ryslaw [ Patrycjusz ]

cioruss --> akurat w moim przypadku poradziłem sobie przez posortowanie tekstu przez ID. Ale problem pozostaje, bo nie zawsze istnieje taka możliwość posortowania.

17.06.2008
16:43
smile
[16]

zbm [ do your worst ]

a jak wygląda sprawa, gdybyś przeniósł dane do Accessa na czas tych zabaw z podmienianiem?

w sql możesz dowolne filtry zakładać i przypisywać dane, a potem zaznaczając wszystko wyjść z powrotem do Excela?

wiem, że to luźna uwaga bez rozwiązania, ale robiąc kompletnie inne rzeczy, przy których potrzebowałem powiązania jednych danych z drugimi poprzez bez Accessa robiłbym to co cioruss, tyle samo czasu, a tak zrobiłem sprawę w pół godzinki

17.06.2008
16:46
[17]

cioruss [ oko cyklopa ]

zbm -> jak pracujesz na kompie firmowym, to taki myk nie przejdzie z prostego powodu - brak softu.

17.06.2008
16:51
[18]

zbm [ do your worst ]

aha, tego nie wziąłem pod uwagę (ja po prostu mam na firmowym accessa - wydało mi się oczywiste :)


jeśli to kwestia licencji, to można użyć BASE z open officea. jeśli pilnującego admina z uprawnieniami to moja rada na nic się nie zda

tak btw. jeśli czas, który poświęciłeś na zajęcie się takim problemem kosztował pracodawcę więcej niż kupno takiego np accessa, to zgłosiłbym się do "władz" z petycją, że nie mogę pracować wydajnie:) (pewnie znowu się okaże, ze ja sobie tak mogę w firmie a u was niet:)

17.06.2008
17:12
[19]

cioruss [ oko cyklopa ]

zbm -> w normalnej sytuacji zrobilbym jak radzisz, ale to byla robota na jeden raz i nie przypuszczalem, ze padne na 3 dni. co nie zmienia faktu, ze Twoje rozwiazanie jest calkiem niezle, a sam exel winien miec opcje 'lock filtered table' czy cos w tym typie, zamiast z kolejnymi odslonami dodawac coraz to nowsze rozwiazania w stylu 'program jest madrzejszy od ciebie'.

17.06.2008
17:14
[20]

Meganelle [ Konsul ]

Może to nie jest aż tak eleganckie, ale powinno być skuteczne.
1. w Arkuszu A wpisujesz formułę w całej kolumnie bez filtrowania:
=IF(ISERROR(VLOOKUP(A1;'ArkuszB'!$A:$B;2;0));"";VLOOKUP(A1;'ArkuszB'!$A:$B;2;0))
gdzie:
- A1 to komórka w której jest wartość, po której porównujesz (np. ID)
- 'ArkuszB' to nazwa arkusza z którego chcesz kopiować, przy czym wartość szukana znajduje się w kolumnie A, a wartość do skopiowania w kolumnie B
2. Zaznaczasz wszystkie wypełnione komórki w kolumnie, w której jest formuła (stajesz w najwyższej i wciskasz ctrl+end i potem strzałkę w dół), kopiujesz i wklejasz specjalnie (edit -> paste special) w to samo miejsce wartości.

17.06.2008
17:28
[21]

Meganelle [ Konsul ]

errata do powyższego - oczywiście zaznaczanie jest shift+end i strzałka :)

17.06.2008
18:15
smile
[22]

zbm [ do your worst ]

cioruss -> excel mimo wielu zalet ma tez kilka wkur..zających wad, którymi nie raz usiłował wyprowadzić mnie z równowagi:)

mój ulubiony to zamiana danych w komórkach na jakąś inną wartość przy ustawieniu typu danych na "ogólny"

np numer działki 20/4 zmienia na 20.kwie
(mówię o wsadowym otwieraniu excela z innej aplikacji i wrzucaniu danych:)
po tygodniu znaleźliśmy rozwiązanie

and many more

pzdr

17.06.2008
18:18
[23]

legrooch [ MPO Squad Member ]

np numer działki 20/4 zmienia na 20.kwie

Zmieniliście typ danych? :P

17.06.2008
20:23
[24]

albz74 [ Legend ]

Ryslaw- po co używasz Worda - masz tam jakieś dodatkowe narzędzia do tłumaczenia ?

Ja bym wszystko zrobił w Excelu a wtedy to przeniesienie jest już banalnie proste. Może trzeba by było jakieś małe makro zmajstrować ale co to dla fachowców :)

17.06.2008
21:06
[25]

Ryslaw [ Patrycjusz ]

albz74 --> tak, specjalne narzędzia w rodzaju Tradosa, Wordfasta czy LogoPorta. Poza tym część robi się zupełnie w osobnych aplikacjach w rodzaju TagEditora albo SDLXA.

Poza tym przy tłumaczeniu w excelu jest ten sam problem.

17.06.2008
21:46
smile
[26]

zbm [ do your worst ]

legrooch -> nie rób z siebie zjadacza wszystkich rozumów. Jak mówię, chwilę nam zajęło, zanim doszliśmy jak ustawić typ danych dla kolumn przy nowym dokumencie.

juz sprawa dawno nieaktualna, natomiast bardziej zależało mi na podkreśleniu, że Excel czasem próbując być mądrzejszy przeszkadza, a nie pomaga, niż pochwaleniu się jak daliśmy ciała, że tego nie wiedzieliśmy od razu:)

17.06.2008
21:56
[27]

albz74 [ Legend ]

legrooch jest MS-wymiatacz więc nie podskakuj zbm bo nie masz szans


Ryslaw - myślę, że mógłbym Ci tak zupełnie altruistycznie pomóc :) Odezwij się jakoś, na gg albo wiadomość napisz na PS3 to się zgadamy, powiesz dokładnie jak chcesz a ja Ci napiszę makro które zrobi robotę

© 2000-2024 GRY-OnLine S.A.