Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Pętla for w excelu - vba - sprawdzanie wartości komórki

pawlo_1975 01 Paź 2010 22:24 5463 8
  • #1 01 Paź 2010 22:24
    pawlo_1975
    Poziom 9  

    Stworzyłem kod którego zadaniem jest sprawdzanie wartości komórki i w zależności od zawartości wypełnieniem jej odpowiednim kolorem. Oto kod:

    Code:
    Sub p0()
    
    For Each element In Range("i4:i83")
    If IsNumeric(element.Value) = True Then
    If element.Value <= [25%] Then
    element.Interior.ColorIndex = 43
    Else
    element.Interior.ColorIndex = 0
    End If
    End If
    Next
    End Sub


    Dodatkowo chciałbym żeby procedura sprawdzała czy inna komórka spełnia warunek i dopiero wtedy wykonywała się procedura. Konkretnie chodzi o to że jeśli wartość komórki Q wynosi 0 (zero) dopiero wtedy dokonuje się wypełnienie.
    Jestem początkujący i nie potrafię sobie z tym poradzić. Jeśli ktoś będzie w stanie mi w tym pomóc będę bardzo wdzięczny.
    Pozdrawiam.

    Proszę pamiętać o używaniu znaczników code. - arnoldziq

    0 8
  • #3 03 Paź 2010 15:31
    pawlo_1975
    Poziom 9  

    Tak chodzi mi o to żeby cała pętla p0() była wykonywana tylko wtedy gdy spełniony warunek czyli wtedy gdy każda kolejna komórka będzie wynosiła 0 zero, jeżeli nie będzie problemem dla ciebie wstawienie konkretnego kodu bardzo bym prosił.

    0
  • #4 03 Paź 2010 17:32
    adamas_nt
    Moderator Programowanie

    Komórki puste (Empty) też będą traktowane jako =0 i obydwa warunki będą spełnione, więc sugerowałbym trzy (w trzeciej linii)

    Code:
    If IsNumeric(element.Value) = True And IsEmpty(Cells(element.Row, 17)) = False And Cells(element.Row, 17) = 0 Then

    Pętla for w excelu - vba - sprawdzanie wartości komórki

    Jeśli nie ma i autor nie przewiduje pustych wierszy w zakresie, to oczywiście wystarczą dwa...

    0
  • #5 03 Paź 2010 18:40
    pawlo_1975
    Poziom 9  

    Chodzi mi żeby wykonywana była pętla gdy komórka q w każdym wierszu odpowiednio wynoi 0

    Code:

    Sub p0()
    For Each element In Range("i4:i83")
    If IsNumeric(element.Value) = True Then
    If element.Value <= [25%] Then
    element.Interior.ColorIndex = 43
    Else
    element.Interior.ColorIndex = 0
    End If
    End If
    Next
    End Sub

    Jeśli to możliwe proszę o uzupełnienie kodu bo nie bardzo sobie potrafię z tym poradzić.

    0
  • #6 03 Paź 2010 18:51
    adamas_nt
    Moderator Programowanie

    Nadpisz trzecią linię

    Code:
    Sub p0()
    
    For Each element In Range("i4:i83")
      If IsNumeric(element.Value) = True And IsEmpty(Cells(element.Row, 17)) = False And Cells(element.Row, 17) = 0 Then
        If element.Value <= [25%] Then
          element.Interior.ColorIndex = 43
        Else
          element.Interior.ColorIndex = 0
        End If
      End If
    Next
    End Sub

    Jeśli nie sprostujesz pytania, każdy post z naszej strony będzie kończył się pytaniem: "Czy o to Ci chodzi?" :)
    Pętla ma za zadanie sprawdzić czy dla każdego wiersza zakresu: w kolumnie "I" wartość jest numeryczna, kolumna "Q" jest niepusta i wartość równa się 0. Jeśli 3xTak to dla wartości <=25% kolor itd... Czy o to Ci chodzi?

    0
  • #7 03 Paź 2010 19:51
    pawlo_1975
    Poziom 9  

    Coś nie działa mi jak trzeba chodzi mi o to żeby jeżeli q4=0 i nie jest komórką pustą wtedy jeżeli i4 mniejsze od 25% wtedy i4 podświetla się kolorem i tak kolejno dla każdej komórki czyli jeżeli q5=0 i nie jest komórką pustą wtedy jeżeli i5 mniejsze od 25% wtedy i5 podświetla się kolorem itd

    Code:

    Sub p0()
    For Each element In Range("i4:i83")
      If IsNumeric(element.Value) = True And IsEmpty(Cells(element.Row, 17)) = False And Cells(element.Row, 17) = 0 Then
        If element.Value <= [25%] Then
          element.Interior.ColorIndex = 43
        Else
          element.Interior.ColorIndex = 0
        End If
      End If
    Next
    End Sub

    więc jeżeli ten kod jest kompletny to coś mi nie działa. Proszę o odpowiedź i ewentualne uzupełnienie kodu tak to powinno wyglądać.

    0
  • #8 03 Paź 2010 19:59
    adamas_nt
    Moderator Programowanie

    Wrzuć arkusz (w załączniku), może z formatem danych jest coś nie tak...

    0
  • #9 04 Paź 2010 00:56
    pawlo_1975
    Poziom 9  

    Gdyby ktoś jeszcze mógł pomóc mi w modyfikacji kodu byłbym wdzięczny

    Code:


    Sub p0()
    For Each element In Range("i4:i83")
      If IsNumeric(element.Value) = True And IsEmpty(Cells(element.Row, 17)) = False And Cells(element.Row, 17) = 0 Then
        If element.Value <= [25%] Then
          element.Interior.ColorIndex = 43
        Else
          element.Interior.ColorIndex = 0
        End If
      End If
    Next
    End Sub

    Chciałbym aby pętla wykonywała się gdy q wynosi zero i to już się wykonuję ale również jeśli" q " jest różne od zera podświetlenie komórki " i " żeby pozostawało beż zmiany lub było białe.

    Dodano po 2 [godziny] 37 [minuty]:

    ok dzięki już się uporałem

    0