Rendar [ Senator ]
Problem z Excelem i makrem
Potrzebuje pomocy kogoś biegłego w pisaniu makr Excela.
Otóż dajmy na to, że mamy arkusz. W kolumnie A mamy wpisane słowa (np imiona). Powiedzmy, że w komórki od a1 do a5 jest wpisane "Ania" a w komórki od a6 do a10 jest wpisane "Beata".
Teraz potrzebuję zrobic automat, który sprawdzi co jest wpisane w kolumnie A i gdy doleci do obszaru z wpisanymi "Beatami" wytnie go i przeniesie do nowego arkusza.
HELP!
Swidrygajłow [ ]
k = 1000
r = 0
With Application
For i = 1 To k
If Sheets("Arkusz1").Cells(i, 1).Value = "monika" Then
Sheets("Arkusz1").Cells(i, 5) = i
Sheets("Arkusz1").Cells(i, 6) = Sheets("Arkusz1").Cells(i, 1)
Sheets("Arkusz1").Rows(i).Copy
r = r + 1
Sheets("Arkusz2").Rows(r).Insert Shift:=xlDown
Sheets("Arkusz1").Rows(i).Delete
i = i - 1
k = k - 1
End If
Next i
End With
Rendar [ Senator ]
THX Swirdy - niezły jesteś :-)
Ale jest mały ból... ta petla szuka zadanej vartości (monika), a ja potrzebuje cosik takiego jak to, ale bez konieczności ścisłego określania tej wartości. To musi być taka jakby automatyczna zmienna.
Chodzi mi dokładnie o to, że mam sporo plików (pewnego rodzaju logi) właśnie w formie Excela.
Wyglądają one właśnie tak jak w podanym przykładzie (oczywiście jest tam po pareset lini każdego rodzaju). Potrzebuję każdą pozycję (np Ania) w osobnym arkuszu. Nie pytaj czemu nie mogę zrobić autofiltra, bo mnie normalnie o glebe rzuca, ale trza robić jak karzą :-(
Rendar [ Senator ]
Zrobiłem tak:
Sub Makro1()
Dim A As String
A = Cells(1, 1)
k = 1000
r = 0
With Application
For i = 1 To k
If Sheets("Arkusz1").Cells(i, 1).Value = A Then
Sheets("Arkusz1").Cells(i, 5) = i
Sheets("Arkusz1").Cells(i, 6) = Sheets("Arkusz1").Cells(i, 1)
Sheets("Arkusz1").Rows(i).Copy
r = r + 1
Sheets("Arkusz2").Rows(r).Insert Shift:=xlDown
Sheets("Arkusz1").Rows(i).Delete
i = i - 1
k = k - 1
End If
Next i
End With
End Sub
I właściwie można powiedzieć, że działa, ale jeszcze musze pokombinowac nad uniezależnieniem od nazwy arkusza. Problem jest wtym, że to nie są nigdy te same ilości danych. Czasem może być 100 Ani, 200 Beat i 500 Monik, a czasmi 150 Beat , 250 Swirdych, 200 Souli i 1000 Rendarów, więc ilość arkuszy też będzie różna. Optymalnie byłoby, gdyby sam sobie wstawiał odpowiednią ilość Sheets. Jak masz jakiś pomysł to baardzo będę wdzięczny :-)
Swidrygajłow [ ]
Dim Imiona As New Collection
Dim Ok As Boolean
Dim a As String
k = 1000
Ok = False
With Application
For i = 1 To k
If Sheets(1).Cells(i, 1).Value <> "" Then
Ok = False
For j = 1 To Imiona.Count
If Sheets(1).Cells(i, 1).Value = Imiona.Item(j) Then
Ok = True
End If
Next j
If Ok = False Then
For z = 1 To Worksheets.Count
If Sheets(1).Cells(i, 1).Value = Worksheets(z).Name Then
Ok = True
End If
Next z
If Ok = False Then
Imiona.Add (Sheets(1).Cells(i, 1).Value)
Worksheets.Add after:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Name = Sheets(1).Cells(i, 1).Value
End If
End If
End If
Next i
k = 1000
r = 0
Dim Tabl() As Integer
ReDim Tabl(Imiona.Count)
Dim t As Integer
For i = 1 To k
If Sheets(1).Cells(i, 1).Value <> "" Then
a = Sheets(1).Cells(i, 1)
For j = 1 To Imiona.Count
If a = Imiona.Item(j) Then
t = j
Exit For
End If
Next j
Tabl(t) = Tabl(t) + 1
u = Tabl(t)
Sheets(1).Rows(i).Copy
Sheets(Sheets(1).Cells(i, 1).Value).Rows(u).Insert Shift:=xlDown
Sheets(1).Rows(i).Delete
i = i - 1
k = k - 1
End If
Next i
End With
PalooH [ Generaďż˝ ]
Pytanko, jak stworzyć super formułę z WYSZUKAJ.PIONOWO, CZY.BŁ I JEŻELI.
mam baze osób. Arkusz1 kolumna A - imiona i nazwiska, B - Adresy. W arkuszu2 Wpisuję w kolumnie A imię i nazwisko i chcę żeby w kolumnie B wyskoczył aders. Samo wyszukaj pionowo wystarcza, ale jeżeli w bazie nie mam jakiegoś nazwiska to w kolumnie B wyskakuje =N/D. Jako że =N/D mi nie bardzo się podoba :) chcę zamienić go na pustą komórkę (""). Wszystko mi działa, ale zajmuje mi 2 kolumny. Jedna WYSZUKAJ... druga połączone CZY.BŁ z JEŻEL. Jak ktoś ma chwilkę to proszę o podpowiedź.
Rendar [ Senator ]
Swirdy - BIG THX!!! Dodam formatowanie i będzie cool!
Swidrygajłow [ ]
PalloH
=JEŻELI(CZY.BŁĄD(WYSZUKAJ.PIONOWO(A1;Arkusz1!A1:B2;2));" ";WYSZUKAJ.PIONOWO(A1;Arkusz1!A1:B2;2))
PalooH [ Generaďż˝ ]
Swidrygajłow ~~> dzięki ogromne, jak znajdę chwilkę to przerobie arkusze :)