Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[vba excel] Makro wyszukujące wartość formuły

darkmegadeth 23 Cze 2010 09:06 3428 4
  • #1 23 Cze 2010 09:06
    darkmegadeth
    Poziom 2  

    Cześć,
    Utknąłem na pewnym problemie, a mianowicie muszę zaznaczyć obszar arkusza (w dół) , niestety nie można tego zrobić za pomocą stałego przedziału (różna ilość rekordów za każdym razem) oraz metodą Range(Selection, Selection.End(xlDown)).Select gdyż w komórkach znajdują się formuły. Rozwiązaniem problemu może być np. wyszukanie wyniku formuły w ostatnim wierszu (wartość jest zawsze niepowtarzalna) pobranie komórki i przekazanie do Range().Select, bardzo proszę o pomoc.

  • #2 23 Cze 2010 10:21
    dkow
    Poziom 14  

    Do While Worksheets(1).Cells(Wiersz, kolumna).Value <> ""

    'Tu rób co do ciebie należy lub nie rób nic

    Wiersz = Wiersz + 1
    Loop

    W zmiennej "Wiersz" będziesz ostatnią sprawdzaną pustą komórkę.
    Zmienna "kolumna" <- tu podaj którą kolumnę będziesz sprawdzał

  • #3 23 Cze 2010 13:06
    marcinj12
    Poziom 40  

    dkow napisał:
    Do While Worksheets(1).Cells(Wiersz, kolumna).Value <> ""

    'Tu rób co do ciebie należy lub nie rób nic

    Wiersz = Wiersz + 1
    Loop

    W zmiennej "Wiersz" będziesz ostatnią sprawdzaną pustą komórkę.
    Zmienna "kolumna" <- tu podaj którą kolumnę będziesz sprawdzał

    To rozwiązanie mimo że zadziała, nie jest dobrym sposobem z dwóch powodów:
    1. jest czasochłonne (trzeba przelecieć przez każdą komórkę w zakresie + sprawdzić warunek + pętla nie robi tego w pamięci tylko na arkuszu bezpośrednio)
    2. jeżeli w kolumnie znajdzie się puste pole między danymi, program uzna to za ostatni wiersz.

    Lepiej zastosuj metodę:
    Code:

    'znajduje ostatni wiersz w kolumnie C
    ost_wiersz = ActiveSheet.Range("C65536").End(xlUp).Row


    albo:
    Code:

    'znajduje ostatni używany wiersz w całym arkuszu
    ost_wiersz = ActiveSheet.UsedRange.Rows.Count

    Ja osobiście wolę to pierwsze rozwiązanie.

  • #4 23 Cze 2010 17:03
    darkmegadeth
    Poziom 2  

    marcinj12 napisał:
    dkow napisał:
    Do While Worksheets(1).Cells(Wiersz, kolumna).Value <> ""

    'Tu rób co do ciebie należy lub nie rób nic

    Wiersz = Wiersz + 1
    Loop

    W zmiennej "Wiersz" będziesz ostatnią sprawdzaną pustą komórkę.
    Zmienna "kolumna" <- tu podaj którą kolumnę będziesz sprawdzał

    To rozwiązanie mimo że zadziała, nie jest dobrym sposobem z dwóch powodów:
    1. jest czasochłonne (trzeba przelecieć przez każdą komórkę w zakresie + sprawdzić warunek + pętla nie robi tego w pamięci tylko na arkuszu bezpośrednio)
    2. jeżeli w kolumnie znajdzie się puste pole między danymi, program uzna to za ostatni wiersz.

    Lepiej zastosuj metodę:
    Code:

    'znajduje ostatni wiersz w kolumnie C
    ost_wiersz = ActiveSheet.Range("C65536").End(xlUp).Row


    albo:
    Code:

    'znajduje ostatni używany wiersz w całym arkuszu
    ost_wiersz = ActiveSheet.UsedRange.Rows.Count

    Ja osobiście wolę to pierwsze rozwiązanie.


    Niestety te metody działają podobnie do mojego sposobu, nie działają na funkcjach wpisanych w komórki.

  • #5 23 Cze 2010 18:41
    marcinj12
    Poziom 40  

    Możesz dokładniej wytłumaczyć (może załącznik zamieścić?) co chcesz osiągnąć, bo nie rozumiem? :)

    Jeżeli wyszukać ostatni niepusty wiersz w kolumnie z formułami, to np.:

    Code:

    ost_wiersz = ActiveSheet.Columns(2).Find(What:="*", After:=ActiveSheet.Cells(1, 2), _
                        SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row


    a potem zrobić zaznaczenie:
    Code:
    ActiveSheet.Range(ActiveSheet.Cells(1, 2), ActiveSheet.Cells(ost_wiersz, 2)).Select

 
Promocja -20%
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
tme