X
  • #1 01 Aug 2010 12:18
    bolu_
    Level 7  
    Helpful post? (0)
    Witam,

    mam taki problem ze chcialbym sobie troche usprawnic prace i aby to zrobic musze stworzyc makro w excelu. Chodzi o to aby program przeszukiwal wartsci z Arkusza1 w Arkuszu2 i zwracal w Arkuszu1 w tych samych wierszach (obok) wartosci z wierszy obok znalezionych wartosci w Arkuszu2. Troche to zagmatwane. Chodzi o cos podobnego do wyszukaj pionowo z tym ze jest taki problem ze do jednej wartosci z arkusza1 moga byc przypisane dwa wiersze (albo wiecej)do sciagniecia z Arkusza2. I chcialbym zeby progam w takim przypadku wstawial dodatkowe wiersze w Arkuszu1 i kopiowal te wartosci.

    Zalaczam przykladowy plik. Gdyby ktos z Was moglby mi w tym pomoc bylbym bardzo wdzieczny
  • #2 01 Aug 2010 14:25
    marcinj12
    Level 40  
    Helpful post? (0)
    Wygooglaj i popatrz na użycie funkcji FIND.
  • #3 01 Aug 2010 15:14
    bolu_
    Level 7  
    Topic author Helpful post? (0)
    z tego co wygooglowalem to funkcja find jest do znajdowania ciagu znakow w komorce od zadanego numeru znaku. nie mam pomyslu jakby to mogloby sie przydac do opisywanego przeze mnie problemu
  • #4 01 Aug 2010 15:54
    marcinj12
    Level 40  
    Helpful post? (+2)
    Tutaj masz przykład jak ta funkcja można wyszukiwać w całej kolumnie. Ostatni listing pokazuje jak wyszukać kilka wartości i wstawić komentarz - w Twoim wypadku musisz wyszukiwać w arkuszu 2, a wstawiać nie komentarze, a znalezione wyniki do arkusza 1.
  • #5 01 Aug 2010 17:40
    bolu_
    Level 7  
    Topic author Helpful post? (0)
    jesli chodzi o vba to znam go bardzo pobieznie. dostosowalem sobie kod ktory wskazales do swoich potrzeb jednak brakuje mu jeszcze troche do tego o czym pisalem. Mianowicie:

    1) nie wiem jak wstawic te dane ktore teraz mi wyswietla obok w Arkuszu2 do Arkusza1, musialby tez niekiedy wstawiac wiersz
    2) w tej chwili zrobilem tak ze szuka tego co znajduje sie w aktywnej komorce, jest to tez troche uciazliwe przy kilku tysiacach rekordow
    3) napisany algorytm uwzglednia jedynie mozliwosc ze do jednego preta beda mozliwe maksymalnie dwa rodzaje a w praktyce jest tak ze moze byc ich kilka, nie wiadomo konkretnie (cos mi sie wydaje ze tu by musiala byc jakas petla do while nastepna komorka jest pusta az natrafi na niepusta)


    nie wiem czy ide w dobrym kierunku;]
  • #6 01 Aug 2010 18:58
    marcinj12
    Level 40  
    Helpful post? (0)
    A czy w arkusz 2 muszą być te puste pola a kolumnie A (np. pod pret3 ?) Bo na pewno byłoby łatwiej, gdyby kolumna po której wyszukujesz nie zawierała pustych wartości...
    Wtedy kod wyglądałby tak:
    Code:

    Private Sub CommandButton1_Click()
    Set wscel = Worksheets("Arkusz1")
    Set wsbaza = Worksheets("Arkusz2")

    ost_wiersz_celu = wscel.Range("A65536").End(xlUp).Row
    ost_wiersz_bazy = wsbaza.Range("A65536").End(xlUp).Row

    For Each szukany In wscel.Range("A1:A" & ost_wiersz_celu)
        kol = 2
       
        Set c = wsbaza.Range("A1:A" & ost_wiersz_bazy).Find(What:=szukany, LookIn:=xlValues, LookAt:=xlPart)

        If Not c Is Nothing Then
            firstAddress = c.Address
           
            Do
                Set c = wsbaza.Range("A1:A" & ost_wiersz_bazy).FindNext(c)
               
                wscel.Cells(szukany.Row, kol) = wsbaza.Range("B" & c.Row)
                kol = kol + 1
               
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    Next szukany
    End Sub
  • #7 01 Aug 2010 19:14
    bolu_
    Level 7  
    Topic author Helpful post? (0)
    hmm;] to ze byloby latwiej to ja wiem, niestety tak jest skonstruowany arkusz na ktorym bede wykorzystywal to makro (kilka tysiecy pozycji) dlatego tez do tego przykladu przyjalem takie zalozenia. jesli chodzi o zalatwienie sprawy pustych komorek to mozna dodac kilkanascie ifow i to dziala nie mowiac o tym ze to lamerstwo;])
  • #8 01 Aug 2010 19:20
    marcinj12
    Level 40  
    Helpful post? (0)
    A tutaj kod który wypełni przed wykonaniem funkcji FIND puste pola, do wstawienia przed pętlą for each...
    Code:

    poprzedni = wsbaza.Range("A1")
    For Each c In wsbaza.Range("A1:A" & ost_wiersz_bazy)
        If c = "" Then
            c.Value = poprzedni
        Else
            poprzedni = c
        End If
    Next c
  • #9 02 Aug 2010 09:25
    bolu_
    Level 7  
    Topic author Helpful post? (0)
    wkleilem ten kod ale pokazuje mi znalezione wartosci w jednym wierszu w arkuszu1, potrzebuje zeby to robil w kolumnie, oprocz rodzaju niezbedna jest jeszcze waga konkretnie dla niego tak zebym to pozniej mogl jeszcze obrobic
  • #10 02 Aug 2010 09:28
    marcinj12
    Level 40  
    Helpful post? (0)
    Tzn. jak to ma wyglądać, bo nie rozumiem... Możesz zamieścić przykład??
  • #11 02 Aug 2010 11:54
    bolu_
    Level 7  
    Topic author Helpful post? (0)
    oto przyklad
  • #12 02 Aug 2010 12:41
    marcinj12
    Level 40  
    Helpful post? (0)
    Sprawdź kod z załącznika...
  • #13 02 Aug 2010 13:04
    bolu_
    Level 7  
    Topic author Helpful post? (0)
    pieknie!!! do pelni szczescia brakuje mi tylko zeby jak dodaje wiersz przepisywal rowniez ilosc w te puste komorki, w przykladzie o tym zapomnialem. jesli znajdziesz chwile to prosze dodaj to do kodu.
  • Helpful post
    #14 02 Aug 2010 13:38
    marcinj12
    Level 40  
    Helpful post? (0)
    Odszukaj ten fragment i dodaj ostatnią linijkę:
    Code:

    'kopiuj wartości
    wscel.Cells(wstaw, 3) = wsbaza.Range("B" & i)
    wscel.Cells(wstaw, 4) = wsbaza.Range("C" & i)
    wscel.Range("B" & wstaw) = szukaneTabl(r, 2)
  • #15 02 Aug 2010 14:59
    bolu_
    Level 7  
    Topic author Helpful post? (0)
    tak, to jest to o co mi chodzilo;] dziekuje bardzo. Mam tylko jeszcze jeden problem powiazany. Mianowicie niektorych wartosci nie wyszukuje mi w bazie, przy tych komorkach excel pokazuje mi ze liczba jest przechowywana jako tekst. nawet jesli zaznacze cala kolumne i zmienie na format liczbowy to format tych komorek sie nie zmienia, nie wiem dlaczego.
  • #16 02 Aug 2010 15:14
    marcinj12
    Level 40  
    Helpful post? (0)
    Tak już działa Excel... Jeżeli do kolumny tekstowej wpisujesz ręcznie liczbę, to jest ona przechowywana jako tekst.
    Musisz zrobić jeden z tych kroków:
    1. zmienić format kolumny na liczbowy PRZED wpisaniem tam wartości,
    2. zmienić kolumnę na liczbową, a następnie wejść w każdą komórkę wciskając F2 i zatwierdzając Enterem.
    3. zaznaczyć całą kolumnę, kliknąć ten zielony trójkącik i z menu wybrać "Konwertuj na liczbę"
    4. Zmienić format kolumny na liczbowy, w kolumnie obok wpisać funkcję typu: =A1*1, przeciągnąć, wkleić specjalnie jako wartości, skopiować wynik i przykleić ponownie do kolumny liczbowej jako wartości.
  Search 4 million + Products
Browse Products