Poniżej masz opisany dokładnie kod, który się nagrał podczas nagrywania makra, którego zadaniem było formatowanie prawidłowe raportu nawet przy różnej ilości kolumn i wierszy.

Przechodzić pomiędzy Excelem, a edytorem VBA możesz szybko korzystając ze skrótu klawiszowego Alt + F11.

Dużo prościej jest zrozumieć kod makra, jeśli pamiętasz dokładnie, co krok po kroku robiłeś w Excelu.

Sub Raport()
'Zaznaczamy komórkę A1 - pamiętaj mieliśmy tutaj wyłączone odwołania względne
Range("A1").Select
'Przechodzimy do ostatniej wypełnionej komórki w prawo (xlToRight)
'czyli strót klawiszowy Ctrl + stzrałka w prawo
'Nie ma znaczenia, czy miałeś włączone odwołania względne czy nie
'kod zapisze się identycznie.
Selection.End(xlToRight).Select
'Przechodzimy na odwołania względne przy rejestracji makr
'i przesuwamy się jedną kolumnę w prawo
ActiveCell.Offset(0, 1).Range("A1").Select
'W aktywną komórkę wpisujemy Zysk i zatwierdzamy Enterem
Selection.FormulaR1C1 = "Zysk"
'dzięki temu od razu przesuwamy się też jedną komórkę w dół
ActiveCell.Offset(1, 0).Range("A1").Select
'W aktywną komórkę wpisujemy formułę, która odejmuje od Zysku Koszt,
'czyli od komórki o dwie kolumny w lewo (RC[-2]) odejmujemy
'wartość z komórki o jedną kolumnę w lewo (RC[-1])
'Formułę zatwierdzamy kombinacją klawiszy Ctrl + Enter
'dzięki czemu nie przesuwamy się po zatwierdzeniu formuł
Selection.FormulaR1C1 = "=RC[-2]-RC[-1]"
'Kopiujemy zaznaczenie (komórkę z formułą)
Selection.Copy
'Tutaj musimy trochę pokombinować, żeby wkleić skopiowaną formułę
'do końca danych w dół.
'Najpierw przechodzimy jedną komórkę w prawo
ActiveCell.Offset(1, -1).Range("A1").Select
'Później idziemy na koniec danych.
'Do ostatniej wypełnionej komórki skrót: Ctrl + strzałka w dół
Selection.End(xlDown).Select
'Przechodzimy komórkę w prawo
ActiveCell.Offset(0, 1).Range("A1").Select
'Ponieważ jesteśmy w pustej komórce na końcu danych
'zaznaczamy wszystkie komórki w górę do pierwszej wypełnionej komórki
'skrót: Ctrl + Shift + strzałka w górę
Range(Selection, Selection.End(xlUp)).Select
'Wklejamy skopiowaną formułę we wszystkie zaznaczone komórki
ActiveSheet.Paste
'Wyłącza się tryb kopiowania przy okazji kolejnej czynności
Application.CutCopyMode = False
'Zmieniamy formatowanie zaznacznie na walutowe
'Zapis angielski jest tłumaczony na polskie złotówki
'przez ustawienia regionalne
Selection.NumberFormat = "$#,##0.00_);[Red]($#,##0.00)"
'Zaznaczamy komórkę A1 przy włączonych odwołaniach względnych
'za pomocą skrótu klawiszowego Ctrl + Home
Range("A1").Select
'Zaznaczamy wszystkie nagłówki skrót: Ctrl + Shift + strzałka w prawo
Range(Selection, Selection.End(xlToRight)).Select
'Pogrubiamy nagłówki skrót: Ctrl + B
Selection.Font.Bold = True
'Przesuwamy się jedną komórkę w dół od aktywnej komórki (powinna być to komórka A1)
ActiveCell.Offset(1, 0).Range("A1").Select
'Zaznaczamy wszystkie dane w dół skrót: Ctrl + Shift + strzałka w dół
Range(Selection, Selection.End(xlDown)).Select
'Ustawiamy formatowanie daty, które w kodzie VBA ma zapis angielski
'ale ustawienia regionalne tłumaczą na standardowy polski zapis daty
Selection.NumberFormat = "m/d/yyyy"
'Na podstawie aktualnego zaznaczenia zaznaczamy aktualny zakres danych (CurrentRegion)
Selection.CurrentRegion.Select
'Reszta to już obramowania komórek na zaznaczomy zakresie.
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
End Sub

Chcesz ze mną poznać możliwości VBA? Zobacz kiedy planowana jest następna edycja 30dniowego kursu online:
http://excelw30dni.pl/kategoria-produktu/szkolenia-vba/

Pozdrawiam
Adam Kopeć
Miłośnik Excela