Czy Excel może sam myśleć? Może.
Czy może klasyfikować dane bez klikania? O tak.
A czy da się go nauczyć, by reagował na to, co wpisujemy? Da się!
I właśnie dziś – pokażę Ci, jak to osiągnąłem w kilka kroków.
Co chciałem osiągnąć?
Mam prostą tabelę:

Chciałem, żeby Excel sam wypełniał kolumnę „Wartość” na podstawie:
- ceny produktu,
- typu produktu,
- oraz braków danych.
I żeby to wszystko działo się automatycznie (jak poniżej)

Krok 1: Makro klasyfikujące dane
Sub KlasyfikujProdukty()Dim ws As Worksheet
Dim i As Long
Dim ostatniWiersz As Long
Dim cena As Variant
Dim typ As String
Set ws = ThisWorkbook.Sheets("Arkusz1") ' Zmień nazwę jeśli inna
ostatniWiersz = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To ostatniWiersz
cena = ws.Cells(i, 2).Value
typ = ws.Cells(i, 3).Value
If IsEmpty(cena) Or cena = "" Then
ws.Cells(i, 4).Value = "brak danych"
ElseIf LCase(typ) = "zakazany" Then
ws.Cells(i, 4).Value = "nie wprowadzać"
ElseIf IsNumeric(cena) Then
If cena > 5000 Then
ws.Cells(i, 4).Value = "premium"
ElseIf cena < 1000 Then
ws.Cells(i, 4).Value = "budżet"
Else
ws.Cells(i, 4).Value = "standard"
End If
Else
ws.Cells(i, 4).Value = "błąd danych"
End If
Next i
MsgBox "Klasyfikacja zakończona", vbInformation
End Sub
Wyjaśnienie:
- ws.Cells(i, 2).Value = cena (kolumna B),
- ws.Cells(i, 3).Value = typ (kolumna C),
- Excel przechodzi przez każdy wiersz od góry i wpisuje klasyfikację w kolumnie D.
Krok 2: Automatyczne uruchamianie po wpisie
Nie chciałem klikać „uruchom makro” – więc dodałem prosty „wykrywacz zmian” w VBA w Arkusz1 gdzie znajdowały się dane (nie w module)
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("A2:A1000")) Is Nothing Then
Application.EnableEvents = False
Call KlasyfikujProdukty
Application.EnableEvents = True
End If
End Sub
Krok 3: Formularz użytkownika
Stworzyłem formularz, który pozwala dodawać dane jak w prawdziwej aplikacji.
1. Utwórz UserForm:
Wstaw UserForm
Dodaj:
- 2 pola tekstowe (dla produktu i ceny),
- 2 przyciski: Zapisz i Anuluj.
2. Kod przycisku „Zapisz”:
Private Sub btnZapisz_Click()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Arkusz1")
Dim ostatniWiersz As Long
ostatniWiersz = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
ws.Cells(ostatniWiersz, 1).Value = txtProdukt.Value
ws.Cells(ostatniWiersz, 2).Value = txtCena.Value
ws.Cells(ostatniWiersz, 3).Value = "Komputer" ' lub inny typ domyślny
Unload Me
Call KlasyfikujProdukty
End Sub

Efekt końcowy?
- Nie klikam makr,
- nie martwię się o błędy,
- wpisuję dane i gotowe,
- mogę dać formularz komuś, kto nawet nie zna Excela.
To jest właśnie automatyzacja, która oszczędza czas i frustrację.