Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Kategoria: Akumulatorki / Baterie / Ładowarki
  • #1 01 Sie 2010 12:18
    bolu_
    Poziom 7  

    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 Sie 2010 14:25
    marcinj12
    Poziom 40  

    Wygooglaj i popatrz na użycie funkcji FIND.

  • #3 01 Sie 2010 15:14
    bolu_
    Poziom 7  

    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 Sie 2010 15:54
    marcinj12
    Poziom 40  

    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 Sie 2010 17:40
    bolu_
    Poziom 7  

    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 Sie 2010 18:58
    marcinj12
    Poziom 40  

    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 Sie 2010 19:14
    bolu_
    Poziom 7  

    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 Sie 2010 19:20
    marcinj12
    Poziom 40  

    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 Sie 2010 09:25
    bolu_
    Poziom 7  

    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 Sie 2010 09:28
    marcinj12
    Poziom 40  

    Tzn. jak to ma wyglądać, bo nie rozumiem... Możesz zamieścić przykład??

  • #13 02 Sie 2010 13:04
    bolu_
    Poziom 7  

    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.

  • Pomocny post
    #14 02 Sie 2010 13:38
    marcinj12
    Poziom 40  

    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 Sie 2010 14:59
    bolu_
    Poziom 7  

    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 Sie 2010 15:14
    marcinj12
    Poziom 40  

    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.

  Szukaj w 4mln produktów
Przeglądaj produkty