Nov 30 2009

Wtorki z VBA – kurs dla początkujących cz. 7 – przetwarzanie zakresów

Posted by Marcin

W kolejnej lekcji naszego kursu Visual Basic for Applications zajmiemy się pracą z zakresami. Przetwarzanie zakresów to prawdopodobnie najczęściej wykorzystywany element podczas przygotowania raportów - niezbędny zwłaszcza w pracach konsolidujących dane z różnych plików/źródeł.

Kopiowanie zakresu

Kopiowanie zakresów w VBA jest niezwykle proste, realizowane zresztą za pomocą jednej tylko metody Copy. Ogólna składnia instrukcji kopiującej w VBA może wyglądać następująco:

 
ZakresŹródłowy.Copy ZakresDocelowy
 

gdzie ZakresŹródłowy to komórka, zakres lub wiele zakresów, które mają zostać skopiowane, natomiast ZakresDocelowy to adres górnej, lewej komórki zakresu, do którego kopiujemy wartości.

Oto przykłady praktyczne - załóżmy, że mamy zakres wartości w komórkach A1:E5 jak na poniższym rysunku:

Zakres do przetworzenia

I chcemy go skopiować w miejsce B7:F11. Użyjemy do tego makra:

 
Sub KopiujZakres()
 
    Range("A1:E5").Copy Range("B7")
 
End Sub
 

Efekt powinien wyglądać jak na ponizszym rysunku:

Wynik przetworzenia zakresu

Wynik przetworzenia zakresu

Zwróćcie proszę uwagę, że do skopiowania zakresu nie jest wymagane jego uprzednie zaznaczanie - warto o tym pamiętać w sytuacji, kiedy nagrywacie makro a później je edytujecie ręcznie - możecie wtedy usunąć instrukcje zaznaczania, przyspieszając w ten sposób wykonanie makra.

Za pomocą metody Copy możecie kopiować pojedyncze komórki i zakresy w ramach jednego arkusza, między arkuszami czy nawet między różnymi plikami. Oto przykład makra kopiującego zakres między różnymi plikami:

 
Sub KopiujMiedzyPlikami()
 
Workbooks("Plik1.xls").Sheets("Arkusz1").Range("A1").Copy _
	Workbooks("Plik2.xls").Sheets("Arkusz2").Range("B2")
 
End Sub
 

Powyższe makro skopiuje zawartość komórki A1 z arkusza Arkusz1 z pliku Plik1 do komórki B2, arkusza Arkusz2 w pliku Plik2.

Spacja i znak podkreślenia ( _) oznacza, że instrukcje w linijce poniżej będą traktowane przez Excel jakby były wpisane w tej samej linijce, w której były użyte. Stosujemy ten zabieg wtedy gdy nasza instrukcja jest bardzo długa i dla polepszenia czytelności kodu chcemy podzielić ją na kilka linijek.

Przenoszenie zakresu

Przenoszenie zakresów jest bardzo podobne do ich kopiowania - jedyną różnicą jest użycie metody Cut w miejsce metody Copy. Np.:

 
Sub PrzeniesZakres()
	Range("A1:A2").Cut Range("B1")
End Sub
 

Wszystkie uwagi napisane wcześniej w odniesieniu do kopiowania mają zastosowanie do przenoszenia.

Podsumowanie

Kopiowanie i przenoszenie zakresów jest niezwykle proste, jednak aby te instrukcje móc wykorzystywać w realnych zadaniach warto je wzbogacić o mechanizmy rozpoznowania zakresów użytkownika - w rzeczywistości rzadko mamy sytuację, kiedy pisząc makro wiemy z góry na jakim zakresie danych będzie ono pracowało. Dlatego w następnym poście pokaże Wam jak znajdować granice zakresów - niezależnie od tego jak szybko się zmieniają.

Jak zwykle zachęcam do eksperymentów.

Powiązane artykuły:

Leave a Reply