Efekt końcowy zapytania: „Potrzebny skrypt do Excela. Skrypt przegląda w arkuszu Arkusz1 kolumnę C od wiersza zawierającego słoto START aż do słowa kluczowego STOP. W kolumnie są powtarzające się stringi. Po wykryciu stringu, który jest inny niż poprzedni, nie dotyczy to słów kluczowych START i STOP, skrypt wstawia powyżej pusty wiersz. Jednocześnie wylicza sumę wartości komórek G we w ten sposób powstałym bloku , charakteryzującym się tymi samymi wartościami w kolumnie C i wpisuje tę wartość w ostatnim wierszu danego bloku w kolumnie N”
Osiągnięcie tego efektu zajęło mi ok. trzech godzin oraz ok. 12 iteracji z ChatGPT, doprecyzowania pytania, korekty błędów, pytań pomocniczych itd. Przyznam, że wrażenia z interakcji z tym narzędziem są jedyne w swoim rodzaju. Powiedziałbym, że współpracuje się lepiej n iż z człowiekiem.
- To co się mu pisze, rozumie dosłownie
- Nie zadaje głupich pytań
- Nie denerwuje się, że zmieniam zdanie lub proszę kolejny raz o to samo
- Nie pyta „a po co ci to”
- Ogólnie „oaza cierpliwości” 🙂
Kod:
Sub CreateBlocksAndCalculateSums()
Dim rng As Range
Dim i As Long
Dim sumStart As Long
Dim sumG As Double, sumH As Double
Dim startRow As Long
Dim endRow As Long
Dim lastVal As Variant
' Znajdź początek i koniec zakresu
startRow = Application.Match("START", ThisWorkbook.Sheets("Arkusz1").Range("D:D"), 0) + 1
endRow = Application.Match("STOP", ThisWorkbook.Sheets("Arkusz1").Range("D:D"), 0) - 1
' Ustaw zakres od START do STOP w kolumnie C do przeglądania
Set rng = ThisWorkbook.Sheets("Arkusz1").Range("C" & startRow & ":C" & endRow)
' Ustal początek sumy
sumStart = startRow
' Przechowaj ostatnią przetworzoną wartość
lastVal = rng.Cells(1, 1).Value
' Przeszukaj zakres od góry do dołu
i = 2
While i <= rng.Rows.Count
' Jeżeli napotkasz inny string, wstaw pusty wiersz
If rng.Cells(i, 1).Value <> lastVal Then
' Oblicz sumę wartości z kolumny G i dodaj do ostatniego wiersza bloku w kolumnie N
sumG = Application.WorksheetFunction.Sum(Range("G" & sumStart & ":G" & startRow + i - 2))
Cells(startRow + i - 2, "N").Value = sumG
' Oblicz sumę wartości z kolumny H i dodaj do ostatniego wiersza bloku w kolumnie O
sumH = Application.WorksheetFunction.Sum(Range("H" & sumStart & ":H" & startRow + i - 2))
Cells(startRow + i - 2, "O").Value = sumH
' Zresetuj sumStart do aktualnego wiersza
sumStart = startRow + i
rng.Rows(i).EntireRow.Insert
' Odśwież zakres po wstawieniu pustego wiersza
Set rng = ThisWorkbook.Sheets("Arkusz1").Range("C" & startRow & ":C" & endRow + i)
' Zaktualizuj ostatnią wartość
lastVal = rng.Cells(i + 1, 1).Value
End If
i = i + 1
Wend
' Oblicz sumę dla ostatniego bloku po wykonaniu pętli
sumG = Application.WorksheetFunction.Sum(Range("G" & sumStart & ":G" & startRow + rng.Rows.Count - 1))
Cells(startRow + rng.Rows.Count - 1, "N").Value = sumG
sumH = Application.WorksheetFunction.Sum(Range("H" & sumStart & ":H" & startRow + rng.Rows.Count - 1))
Cells(startRow + rng.Rows.Count - 1, "O").Value = sumH
End Sub