Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 70483 Skopiuj do schowka Kopiuj/Wklej nieciagle zakresy c.d.
Autor Wiadomość
Auditorius 
Exceloholic


Wersja: Win Office 2013
Pomógł: 1 raz
Posty: 216
Wysłany: 22-03-2021, 13:28   Kopiuj/Wklej nieciagle zakresy c.d.

Po OCRowaniu mam zestaw przykładowych danych w załączonym pliku

Z czym mam problem?
1) Chciałbym zaznaczyć zakres komórek (tych na źółto) - czasami ciągłych a czasami NIE , skopiować je (TYLKO te na źółto), wyczyścic arkusz z reszty danych i wkleić ponownie.
Makro w pliku działa w zakresie kopiuj wklej ale:
- nie zachowuje formatowania (przy wklejaniu)

Znalazłem coś takiego ale na nieciągłych to chyba nie zadziała
https://stackoverflow.com/questions/11848986/copying-the-cell-value-preserving-the-formatting-from-one-cell-to-another-in-exc

Ewentualnie - xlPasteAll
ale czym to się różni od
PasteRng.PasteSpecial xlPasteFormats
PasteRng.PasteSpecial xlPasteValuesAndNumberFormats


2) Nie wiem jak połączyć je z kopiowaniem nieciagłym bo w każdym arkuszu są inne obszary nieciagłe i chciałbym mieć rozwiązanie że użytkownik zaznacza wiele nieciągłych obszarów a Excel kopiuje (do tego samego arkusza - czyli pozbywam sie wszytskich nadmiarowych danych)
Potem - po upewnieniu się że są porównywalne będę je łączył jedno pod drugim ze sobą

3) W pliku jest makro rzekomo do rozszywania złączonych komórek ale nie zawsze (nie na każdym zakresie działą) - co poprawić ?


Usunąłem z pliku dane osobowe.
Link w wątku zostawiłem - chociaż też powinienem usunąć (zostawiłem: na zasadzie zaufania do tego serwisu).
umiejead

.

Kopia Cenniki kopiowanie nieciaglych zakresow.xlsm
Pobierz Plik ściągnięto 11 raz(y) 55.33 KB

_________________
Nobody's Perfect
ID posta: 402527 Skopiuj do schowka
 
 
caelian
ExcelGaduła 500+


Wersja: Win Office 365
Pomógł: 61 razy
Posty: 563
Wysłany: 22-03-2021, 13:34   

pokaż przykład z danymi nieciągłymi.
jak chodzi o dane ciągłe to wg mnie najlepiej poszłoby Advancedfilter i VBA.

co do danych nie ciągłych - zademonstruj kilka przypadków(a najlepiej wszystkie możliwości danych nieciągłych)
przy ustaleniu odpowiedniego klucza advancedfilter powinien to przerzuć i wypluć ^^
ID posta: 402529 Skopiuj do schowka
 
 
Auditorius 
Exceloholic


Wersja: Win Office 2013
Pomógł: 1 raz
Posty: 216
Wysłany: 25-03-2021, 16:42   

Zakłądka 'ZZO Wólka Rokicka 2020 lubel' w załączonym pliku

Chcę skopiować nieciągły zakres
1 komorka
Odstep 1 wiersza
Tabela z komórkami
Odstep 2 wierszy
1 komórka

do zmiennej, wyczyścić arkusz i wkleić ten nieciągły zakres jako ciągły teraz już do czystego Arkusza
_________________
Nobody's Perfect
ID posta: 402745 Skopiuj do schowka
 
 
apollo
ExcelSpec


Pomógł: 1317 razy
Posty: 4544
Wysłany: 25-03-2021, 21:29   

Kod kopiujący nieciągły obszar
Kod:

Sub CopyMultiArea(MultiArea As Range, destCell As Range)
Dim minRow As Long, minCol As Long, i As Long, rng As Range
    On Error Resume Next
    minRow = MultiArea.Parent.Rows.Count
    minCol = MultiArea.Parent.Columns.Count
    For i = 1 To MultiArea.Areas.Count
        Set rng = MultiArea.Areas(i)
        If rng.Row < minRow Then minRow = rng.Row
        If rng.Column < minCol Then minCol = rng.Column
    Next i
    For i = 1 To MultiArea.Areas.Count
        MultiArea.Areas(i).Copy MultiArea.Areas(i).Offset(destCell.Row - minRow, destCell.Column - minCol)
    Next
End Sub


Przykład użycia
Kod:

Sub test()
Dim srcRange As Range, destCell As Range
    Set srcRange = Application.InputBox("Wybierz conajmniej jeden obszar", Type:=8)
    Set destCell = Application.InputBox("Wybierz komórkę, gdzie dane mają być wklejone", Type:=8)
    CopyMultiArea srcRange, destCell
End Sub
ID posta: 402760 Skopiuj do schowka
 
 
ąćęłńóś
Excel Expert


Pomógł: 327 razy
Posty: 1615
Wysłany: 25-03-2021, 22:55   

Coś chyba nie teges, albo ja opacznie zrozumiałem ... :-/ ... nie kopiuje mi "nieciągłego w ciągłe"
ID posta: 402762 Skopiuj do schowka
 
 
Tajan


Pomógł: 4767 razy
Posty: 10469
Wysłany: 26-03-2021, 09:22   

Auditorius, proponuję poniższy kod:
Kod:
Option Explicit

Dim oDict As Object

Sub test_Copy_MultiArea()
Dim srcRng As Range
Dim dstRng As Range

    Set srcRng = Selection
   
    CopyMultiArea srcRng
    ActiveSheet.UsedRange.Clear
    Set dstRng = Application.InputBox("Wybierz początkową komórkę wklejania danych", Type:=8)
    PasteMultiArea dstRng

End Sub


Sub CopyMultiArea(srcRange As Range)
Dim i As Long
   Set oDict = CreateObject("Scripting.Dictionary")
    For i = 1 To srcRange.Areas.Count
        With srcRange.Areas(i)
           oDict.Add .Address, .Value(11)
        End With
    Next
End Sub

Sub PasteMultiArea(destCell As Range)
Dim i As Long
    For i = 0 To oDict.Count - 1
        With Range(oDict.Keys()(i))
           destCell.Resize(.rows.Count, .Columns.Count).Value(11) = oDict.Items()(i)
           Set destCell = destCell.Offset(.rows.Count)
        End With
    Next
End Sub


Makra wklej do pustego modułu, zaznacz komórki do skopiowania i uruchom procedurę "test_Copy_MultiArea"
ID posta: 402768 Skopiuj do schowka
 
 
apollo
ExcelSpec


Pomógł: 1317 razy
Posty: 4544
Wysłany: 26-03-2021, 13:09   

ąćęłńóś napisał/a:
Coś chyba nie teges, albo ja opacznie zrozumiałem ... :-/ ... nie kopiuje mi "nieciągłego w ciągłe"

To kopiuje nieciągły w nieciągły. Czyli zachowa względne odstępy między area'ami. Możliwe, że źle zrozumiałem zamierzenie autora.
Jeśli kopiować w ciągły to przecież nie trudno poprawić kod. Istotą jest kopiowanie każdego area. To wszystko.
ID posta: 402772 Skopiuj do schowka
 
 
Maciej Gonet 
Excel Expert


Wersja: Win Office 2016
Pomógł: 2118 razy
Posty: 6628
Wysłany: 26-03-2021, 14:01   

Łączenie zakresu nieciągłego nieregularnego w obszar ciągły nie jest sprawą jednoznaczną. Trzeba się umówić co do pewnych zasad - jak i w jakiej kolejności łączyć podobszary. Czy ma znaczenie kolejność zaznaczania obszarów, czy tylko ich położenie w arkuszu?
Gdyby to było proste, to na pewno Excel miałby taką funkcję wbudowaną. A on potrafi scalić tylko obszary, z których można usunąć pełne wiersze i/lub kolumny. W innych przypadkach jest to niejednoznaczne i dlatego pisze, że się nie da.
Być może kod Tajana spełni oczekiwania pytającego - jeśli będzie zaznaczał obszary dość regularne.
Natomiast kod apollo zawsze można przerobić, tylko najpierw należałoby ustalić zasady łączenia obszarów.
W załączniku przykład jak działa kod Tajana na obszar nieregularny. U góry komórki źródłowe zaznaczone obwódką, u dołu wynik łączenia.

Nieciągłe_na_ciągłe_Tajan2.xlsm
Pobierz Plik ściągnięto 5 raz(y) 16.42 KB

ID posta: 402774 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe