Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 2181 Skopiuj do schowka Znajdowanie komórki
Autor Wiadomość
wodzu46 
Fan Excela


Posty: 71
Ostrzeżeń:
 1/3/6
Wysłany: 24-07-2007, 18:41   Znajdowanie komórki

Witam
Mój problem

W kolumnach ma porozkładane wartosci nie systematycznie(wartość ,kilka wierszy przerwy wartość) Jak napisac makro które kóre by znajdowalo wartość i wypełniało nią w dół kolumny aż do znalezienia nowej wartości no i tak dalej. Przyczym zawsze wiersz od ktorego mialoby działac mialby konkretna watrość, a wartości zawieraają sie w przedziale od 1 do 18
Czekam na pomoc
ID posta: 10919 Skopiuj do schowka
 
 
plitfyg 
Excel Expert


Pomógł: 70 razy
Posty: 107
Wysłany: 24-07-2007, 19:53   Re: Znajdowanie komórki

Czesc,

Nie wiem czy do konca zrozumialem, wiec jesli moja sugestia nie rozwiazuje Twojego problemu - mam nadzieje, ze ktos inny pomoze.

Ja kiedy mam podobny problem (czyli kolumny z wartosciami, w tych kolumnach przerwy, no i chce to zapelnic) nie posluguje sie nawet makrem. Robie to sobie tak:

Zalozmy, ze moje dane mam w komorkach E6:G60. Nie wszystkie komorki zawieraja wartosci, wiec mam przerwy (puste komorki).

1.
Zaznaczam sobie calosc, nastepnie Edycja->Przejdz do... -> Specjalnie -> Puste i klikam OK. Excel zaznaczy mi wszystkie puste komorki mojego zakresu i ustawi sie w pierwszej pustej komorce.

2.
Bez odznaczania wpisuje sobie formule "=" i przesuwam kursor ponad komorke, w ktorej on wlasnie sie znajduje (lub wpisuje "z reki" adres komorki bezposrednio nad aktywna komorka).

3.
Nastepnie ctr+Enter (co by mi Excel wartosci funkcji wpisal do kazdej komorki zaznaczonej (pustej) w zakresie.

Rezultat jest taki, ze wszystkie puste komorki zostana wypelnione wartosciami znajdujacymi sie powyzej tych komorek.

4.
Jezeli nie chce wypelniac sobie wszystkich pustych pol zakresu, a np. chce sobie tylko wypelnic puste komorki ponizej komorki (do nastepnej pelnej komorki) zawierajacej okreslona wartosc to jako funkcje moge wpisac (oczywiscie caly czas zaznaczone sa tylko puste komorki):

Kod:
=JEŻELI(F6=143;F6;"")


Gdzie F6 to komorka znajdujaca sie powyzej aktywnej komorki mojego zakresu, 143 - to interesujaca mnie wartosc.

Nastepnie ctr+Enter - i jakos mi dziala. Znajduje wartosc "143" i kopiuje mi ja w dol do pustych komorek, az do napotkania nastepnej komorki z wartoscia.

Nie wiem czy nie zagmatwalem za bardzo. Jezeli tak to zalacze jakis pliczek pomagajacy nieco. Mam jednak nadzieje, ze cala idea jest zrozumiala.


Marcin
ID posta: 10929 Skopiuj do schowka
 
 
Tajan


Pomógł: 2268 razy
Posty: 4908
Wysłany: 24-07-2007, 22:37   Re: Znajdowanie komórki

wodzu46 napisał/a:
Witam
Mój problem

W kolumnach ma porozkładane wartosci nie systematycznie(wartość ,kilka wierszy przerwy wartość) Jak napisac makro które kóre by znajdowalo wartość i wypełniało nią w dół kolumny aż do znalezienia nowej wartości no i tak dalej. Przyczym zawsze wiersz od ktorego mialoby działac mialby konkretna watrość, a wartości zawieraają sie w przedziale od 1 do 18


Wypróbuj takie makro:
Kod:
Sub WyszukajiWypelnij()
Dim wartosc
Dim kom As Range
Dim wiersz As Long
Dim ostat As Long
Dim adres As String

Do
    wartosc = Application.InputBox("Podaj wartość", Type:=1)
    If wartosc = "False" Then Exit Sub
Loop While wartosc < 1 Or wartosc > 18

With ActiveCell.EntireColumn
   
    Set kom = .Find(wartosc, LookIn:=xlValues, _
           lookAt:=xlWhole, After:=.Cells(1, 1))
           
    If Not kom Is Nothing Then
       adres = kom.Address
       ostat = .Cells(.Rows.Count, 1).End(xlUp).Row
       Do
         wiersz = kom.Row + 1
         Do While wiersz <= ostat And .Cells(wiersz, 1) = ""
            .Cells(wiersz, 1) = wartosc
            wiersz = wiersz + 1
         Loop
         Set kom = .FindNext(.Cells(wiersz - 1, 1))
       Loop Until kom.Address = adres
     Else
       MsgBox "Nie znaleziono!"
     End If
     
End With
           
 
End Sub

Jednak ma ono pewne ograniczenia, spowodowane Twoim, niezbyt precyzyjnym opisem.
- Działa tylko w kolumnie, w ktorej znajduje się aktywna komórka (czy może powinno we wszystkich?)
- Nie wypełnia komórek, jeżeli znaleziona wartość jest ostatnią wartoscią w kolumnie (co z takim przypadkiem?)
ID posta: 10940 Skopiuj do schowka
 
 
wodzu46 
Fan Excela


Posty: 71
Ostrzeżeń:
 1/3/6
Wysłany: 24-07-2007, 22:53   

OKI działa brdzo OKI!!! tylko czy dałoby sie tak zrobić żeby nie wyskakiwał komunikat "podaj wartość"??? wszystko wypełniało sie automatycznie:)


Już odpowidam:) Najlepiej jakby działało w kolumnie BiC i jeśli wartość jest ostatnia też niech działa.
ID posta: 10941 Skopiuj do schowka
 
 
Tajan


Pomógł: 2268 razy
Posty: 4908
Wysłany: 24-07-2007, 23:06   

wodzu46 napisał/a:
OKI działa brdzo OKI!!! tylko czy dałoby sie tak zrobić żeby nie wyskakiwał komunikat "podaj wartość"??? wszystko wypełniało sie automatycznie:)

Czyli, po kolei, od 1 do 18?

wodzu46 napisał/a:

Już odpowidam:) Najlepiej jakby działało w kolumnie BiC i jeśli wartość jest ostatnia też niech działa.


I ma wypełniac do końca arkusza, czyli około 60 000 wierszy?
ID posta: 10942 Skopiuj do schowka
 
 
wodzu46 
Fan Excela


Posty: 71
Ostrzeżeń:
 1/3/6
Wysłany: 24-07-2007, 23:11   

Wartości nie są porozrzucane po koleji(, a wypełniac do konca
ID posta: 10944 Skopiuj do schowka
 
 
Tajan


Pomógł: 2268 razy
Posty: 4908
Wysłany: 24-07-2007, 23:17   

Ja rozumiem, że w arkuszu są nie nie po kolei. Chodzi mi o to, czy wszystkie warości mają być wszukiwane w jednym uruchomieniu makra?
Wypełnianie do konca arkusza? Dobrze rozumiem?
ID posta: 10945 Skopiuj do schowka
 
 
wodzu46 
Fan Excela


Posty: 71
Ostrzeżeń:
 1/3/6
Wysłany: 24-07-2007, 23:19   

Dokladnie tak
ID posta: 10946 Skopiuj do schowka
 
 
Tajan


Pomógł: 2268 razy
Posty: 4908
Wysłany: 24-07-2007, 23:57   

Wobec tego, wypróbuj taki kod:
Kod:
Sub WyszukajiWypelnij()
Dim wartosc As Integer
Dim kom As Range
Dim kol As Variant
Dim wiersz As Long
Dim adres As String

Application.ScreenUpdating = False

For wartosc = 1 To 18
 For Each kol In Array("B", "C")
  With Columns(kol).Cells
   
    Set kom = .Find(wartosc, LookIn:=xlValues, _
           lookAt:=xlWhole, After:=.Cells(1, 1))
           
    If Not kom Is Nothing Then
       
       adres = kom.Address
       
       Do
         wiersz = kom.Row + 1
         Do While wiersz < .Rows.Count And .Cells(wiersz, 1) = ""
            .Cells(wiersz, 1).Value = wartosc
            wiersz = wiersz + 1
         Loop
         Set kom = .FindNext(.Cells(wiersz - 1, 1))
       Loop Until kom.Address = adres
     
     End If
     
  End With
 Next
Next

Application.ScreenUpdating = True
 
End Sub

Ale uwaga! Demonem szybkości to on nie jest :-) Szczególnie, jeżeli będzie musiał wypełnić wiersz do kończ arkusza.
ID posta: 10947 Skopiuj do schowka
 
 
wodzu46 
Fan Excela


Posty: 71
Ostrzeżeń:
 1/3/6
Wysłany: 25-07-2007, 00:01   

Niewiem co jest grane , ale ten kod nie działa :((( tamten pierwszy smiga jak niewiem ale ten niestety .... TRudno na dziś daje spokuj ,bo rano....


Pozdrowienia dla wszystkich

[ Dodano: 2007-07-25, 19:10 ]
ALE barana ze mnie!!! makro działa bez zarzutu ,tylko laik ze mnie i spieprzylem. Przeprosiny dla Tajana!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ID posta: 10948 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum


Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.