Podany poniżej skrypt miał porównać zaplanowane do wykonania przelewy z rzeczywiście wykonanymi, pobranymi z bankowości internetowej. Celem miało być wykrycie ewentualnych pomyłek, duplikatów, przelewów zaplanowanych a nie wykonanych. Jego przygotowanie z moim nowym kumplem, ChatGPT zajęło mi ok. trzech godzin. Efekt – działa tak jakbym chciał minimalizując prawdopodobieństwo niewychwycenia kosztownych pomyłek. Samo ręczne sprawdzanie przelewów, która to czynność jest żmucna i powtarzalna zajmowało mi doi tej pory właśnie ok. 2-3 godzin (w trakcie których po kilka razy zasypiałem :)). Więc zysk jest więcej niż wymierny.
Oryginalne zapytanie: Potrzebny skrypt do wyszukiwania stringów w excel. Przeszukanie zakresu kolumna P do wiersza zawierającego string STOP w Arkusz1, porównanie kolumny T do wiersza ze słowem kluczowym STOP w Arkusz2. Podświetlenie niepustych komórek w Arkusz1 kolumna P, których wartości nie mają odpowiedników w zakresie kolumna T Arkusz2 i jeśli w odpowiednim wierszu Arkusz1 kolumna M nie znajduje się słowo kluczowe O do wiersza zawierającego string STOP w Arkusz2 . Ignoruj puste wartości komórek w Arkusz1 Kolumna P oraz ignoruj puste komórki w Arkusz 2 kolumna T
Oczywiście w trakcie szlifowania skryptu następowały modyfikacje tego zapytania. Starałem się nie pisać w stylu np. „ale zamiast kolumny T potrzebuję kolumnę P”, ale wprowadzać poprawki do oryginalnego zapytania i zadawać to samo pytanie „już poprawione” jeszcze raz. W przypadku prostych zadań tak jest to bardziej skuteczne.
Efekt:
Poniżej znajduje się skrypt VBA, który powinien sprostać Twoim wymaganiom:
Sub FindAndHighlight()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim rng1 As Range
Dim rng2 As Range
Dim cell1 As Range
Dim cell2 As Range
Dim flag As Boolean
Dim stopRow1 As Integer
Dim stopRow2 As Integer
'Ustalamy arkusze
Set ws1 = ThisWorkbook.Sheets("Arkusz1")
Set ws2 = ThisWorkbook.Sheets("Arkusz2")
'Znajdujemy wiersz ze słowem kluczowym STOP w Arkusz1 i Arkusz2
For Each cell1 In ws1.Columns("P").Cells
If cell1.Value = "STOP" Then
stopRow1 = cell1.Row
Exit For
End If
Next cell1
For Each cell2 In ws2.Columns("T").Cells
If cell2.Value = "STOP" Then
stopRow2 = cell2.Row
Exit For
End If
Next cell2
'Ustalamy zakres
Set rng1 = ws1.Range("P1:P" & stopRow1)
Set rng2 = ws2.Range("T1:T" & stopRow2)
'Porównujemy wartości
For Each cell1 In rng1
If cell1.Value <> "" And ws1.Range("M" & cell1.Row).Value <> "O" Then
flag = False
For Each cell2 In rng2
If cell1.Value = cell2.Value Then
flag = True
Exit For
End If
Next cell2
If flag = False Then
cell1.Interior.Color = RGB(255, 255, 0) 'Podświetlenie na żółto
End If
End If
Next cell1
For Each cell2 In rng2
If cell2.Value <> "" Then
flag = False
For Each cell1 In rng1
If cell2.Value = cell1.Value Then
flag = True
Exit For
End If
Next cell1
If flag = True Then
ws2.Rows(cell2.Row).EntireRow.Interior.Color = RGB(255, 255, 0) 'Podświetlenie całego wiersza na żółto
End If
End If
Next cell2
End Sub
Ten skrypt zaczyna od znalezienia wiersza, który zawiera słowo „STOP” w kolumnach „P” w Arkusz1 i „T” w Arkusz2. Następnie porównuje wartości w tych zakresach. Jeśli komórka w kolumnie „P” Arkusz1 nie ma odpowiednika w kolumnie „T” Arkusz2, i jeśli w odpowiednim wierszu Arkusz1 kolumna „M” nie zawiera słowa „O”, to taka komórka zostaje podświetlona na żółto. Podobnie, jeśli komórka w kolumnie „T” Arkusz2 ma odpowiednik w kolumnie „P” Arkusz1, to cały wiersz zawierający tę komórkę zostaje podświetlony na żółto.