Mam następujący problem do rozwiązania: w komórkach od A1 do A300 mam pewne zimp[ortowane dane, które są wpisywane do jednej komórki. Oto przykładowa zawartość komórki:
Cytat:0001857,TP OldHR Portal,TP Pawel Bolcyn,,normalny,średni,nie próbowano,,brak,TST,2009-12-17,żaden,,,,publiczny,2009-12-17,"ESS - Testy - Kontrola zatrudnienia, scen. ESS_Infotyp_01",nowy,otwarty,,0000000,
Potrzebuję makra, które w jednej kolumnie umieszczałoby numer błędu skrócony do czterech cyfr (czyli w tym przypadku 1857) oraz status rozwiązania czyli w tym przypadku "nowy". Problem mam właśie z tą drugą częścią, bo długość ciągu w komórce jest różna a statusów może być kilka. Funkcja FIND zwraca poprawne wartości, ale pod warunkiem, ze one tam istnieją. Jeśli np chcę wyszukać w tej komórce wyrażenia "poprawiony", dostaję błąd "#VALUE!" co w VBA ma oznaczenie Error 2015. Dlatego stworzyłem następującego potworka - w jednej kolumnie skrypt wyszukuje wyrażenia "nowy" w innej "poprawiony" a w kolejnej "przypisany". Wszystko byłoby fajnie, tylko nie wiem jak te kolumny ze sobą połączyć tzn zrobić taką "wypadkową" tych trzech kolumn, w której znajdowałyby się wszystkie poprawne wartości. Próbowałem kopiować zawartość komórek do innej kolumny ze zwykłą instrukcją warunkową
Cytat:IF activecell.value="nowy" THEN
Ale zawartość komórki to formuła, więc ten sposób się nie sprawdził.
Podsumowując - albo potrzebuję instrukcji, która wyszuka mi wynik formuły i na tej podstawie będę mógł je skopiować do innej kolumny, instrukcji warunkowej do sprawdzania czy komórka nie zawiera błędu (wtedy by był warunek, że jeśli komórka nie zawiera błędu, to niech skrypt skopiuje zawartość) lub zupełnie innego mechanizmu wyszukiwania słowa kluczowego. Poniżej zamieszczam mój aktualny kod:
Sub Macro1()
Dim a, i As Integer
Dim kom As Range
a = 1
Range("A1").Select
'sprawdzanie ile jest zapelnionych wierszy w arkuszu
Do Until Range("A1").Offset(a - 1, 0).Value = ""
Range("A1").Offset(a, 0).Select
a = a + 1
Loop
ActiveCell.Select
Set kom = ActiveCell.Offset(-1, 35)
'makro wypisujace numer bledu
Range("AJ2").Select
ActiveCell.Value = "=RIGHT(LEFT(A2,7),4)"
Selection.AutoFill Destination:=Range("AJ2", kom), Type:=xlFillDefault
'Makro wypisujace status
Set kom = kom.Offset(0, 1)
Range("AK2").Select
ActiveCell.Formula = "=IF(FIND(""poprawiony"",A2),""poprawiony"",""brak"")"
Selection.AutoFill Destination:=Range("AK2", kom), Type:=xlFillDefault
Range("AL2").Select
Set kom = kom.Offset(0, 1)
ActiveCell.Formula = "=IF(FIND(""nowy"",A2),""nowy"",""brak"")"
Selection.AutoFill Destination:=Range("AL2", kom), Type:=xlFillDefault
Range("AM2").Select
Set kom = kom.Offset(0, 1)
ActiveCell.Formula = "=IF(FIND(""przypisany"",A2),""przypisany"",""brak"")"
Selection.AutoFill Destination:=Range("AM2", kom), Type:=xlFillDefault
End Sub
Z góry dziękuję i przepraszam za prawdopodobnie zawiłe tłumaczenie |