Formuła zliczająca Excel


(Qba Ilza) #1

Witam,

Szukam formuły która po ustawieniu formatowania warunkowego będzie informować o błędzie.

Opiszę to na przykładzie:

Mamy dane:

1; 3; 4; 5; 2; 7; 0; 0; 3; 4; 3; 0; 3; 4; 0;

Jeśli z rzędu jest więcej niż 6 danych większych od zera chce aby informował o błędzie.

Np.

1; 4; 5; 6; 4; 8; 6; 7; 0; 3; 6; 7; 0; 4; 7; 4;

Tutaj gdzie jest pogrubione powinien być błąd ponieważ jest więcej niż 6 danych większych od zera z rzędu.

Liczenie powinno być kasowane w momencie wystąpienia zera . Mam nadzieje że wiecie o co mi chodzi.

Np:

1; 4; 6; 2; 6; 3; 0; 2; 7; 3;7; 0; 4;7

Tutaj powinno być bez błędu.


(Drobok) #2

Formatowaniem warunkowym tego nie zrobisz, najlepiej macro uruchamiane podczas zmian w arkuszu. Kwestia tego co chcesz przez to osiągnąć, oraz w jakiej postaci dane są zapisywane, excel działa na komórkach, ale wtedy musisz podać zakres dla tych danych (tzn gdzie one są etc). Najprościej dać for do 6 w while, a jeśli błąd to alert. Oczywiście można zastosować formatowanie. Jednak użytkownik musi mieć włączoną obsługę makr. A ty musisz zdefiniować ile tych komórek ma być / kiedy makro ma się skończyć.


(Dimatheus) #3

Hej,

A te liczby będą ustawione pojedynczo w poszczególnych wierszach kolumny?

Pozdrawiam,

Dimatheus


(Qba Ilza) #4

Dane mają być w osobnych komórkach

Np.

Ma być ich 40 i w tych 40 są rozlokowane te dane:

Np.:

[3] [4] [5] [4,5] [3] [5] [9] [0] [5] [4] [4] [0] [3] [5] [7] [2] [6] [7] [2] [7]

I tutaj co jest pogrubione chciałbym aby excel wykrywał błąd, wystarczy aby zaznaczał te komórki. Wszędzie tam gdzie ciąg liczb większych od zera przekracza 6 danych z rzędu. Jeśli się wkradnie zero pomiędzy nimi jest OK.

Co do opisu użytkownika drobok to za bardzo nie wiem jak to "ugryźć" przy pomocy makr. Nigdy z nich nie korzystałem.

For, do while, kojarzy mi się z pętlami, więc nie rozumiem opisanego przez Ciebie sposobu.

Mógłbym prosić o jaśniejsze nakierowanie na rozwiązanie problemu?

Pozdrawiam.


(Drobok) #5
Private Sub Worksheet_Change()

zm=0

for i=1 to 40

  tmp=cells(i,1)

  if(tmp=0)

    zm=0

  else zm = zm + 1

if(zm>=6)

  cells(i,1).Interior.Color = RGB(200,160,35)

next i

end sub

Coś takiego, nie testowałem, ale powinno cię to naprowadzić na właściwy trop.


(Tomek Matz) #6

Nie wiem, czy takie rozwiązanie Cię zadowoli, ale możesz użyć takiej procedury VBA (kod ten należy umieścić w dowolnym module arkusza).

Public Sub FormatData()

Dim data As Range

Dim result As String

Dim i, j, k, l, startRow, startColumn, counter As Integer


Set data = Application.InputBox("Zaznacz zakres: ", Type:=8)


result = "Nieprawidłowe dane wejściowe."

If (Not data Is Nothing) And (Not (data.Rows.Count > 1 And data.Columns.Count > 1)) Then

    counter = 0

    startRow = 1

    startColumn = 1

    For i = 1 To data.Rows.Count

        For j = 1 To data.Columns.Count

            Range(data.cells(i, j).AddressLocal).Font.Bold = False


            If data.cells(i, j).Value = 0 Then

                counter = 0

                If data.Rows.Count = 1 Then

                    startRow = i

                    startColumn = j + 1

                Else

                    startRow = i + 1

                    startColumn = j

                End If

            Else

                counter = counter + 1

                If counter = 6 Then

                    For k = startRow To i

                        For l = startColumn To j

                            Range(data.cells(k, l).AddressLocal).Font.Bold = True

                        Next l

                    Next k

                ElseIf counter > 6 Then

                    Range(data.cells(i, j).AddressLocal).Font.Bold = True

                End If

            End If

        Next j

    Next i


    result = "Dane zostały sformatowane."

End If


MsgBox (result)

End Sub

Jak to działa? Otóż w obrębie arkusza musisz sobie dodać przycisk, który po naciśnięciu uruchomi kod powyższej procedury. Zostaniesz poproszony o podanie zakresu komórek. Może to być poziomy lub pionowy zakres z dowolną ilością komórek. Po wybraniu zakresu i naciśnięciu przycisku OK błędne dane zostaną pogrubione. Zaraz wrzucę przykładowy arkusz, żebyś mógł zobaczyć jak to działa.

EDIT:

I jedna uwaga na koniec ... następnym razem tematy związane z Excel-em umieszczaj w dziale Problemy z oprogramowaniem :slight_smile:


(Qba Ilza) #7

Bardzo Ci dziękuję za pomoc. Genialne! :wink:

Pierwszy raz mam do czynienia z makrami, jest jakaś strona na której można poczytać o podstawach i poleceniach? Czy to jest jakiś język programowania?


(Tomek Matz) #8

VBA to jest język programowania i przy jego użyciu tworzysz makra w MS Office. W zasadzie to na ten temat pisane są książki (możesz przeszukać księgarnie, bo być może znajdziesz jakąś ciekawą pozycję). Jeśli chodzi o źródła online, to w zakładkach firefox-a dodane mam 2 linki, które kiedyś czytałem (może Ci się przydadzą). Zaznaczam, że są to jednak tylko podstawy.

http://www.excelszkolenie.pl/Excel%202007/index.htm

http://dzono4.w.interia.pl/index.htm

Jakiś czas temu na blogu dobreprogramy użytkownik molexor robił taki mini tutorial odnośnie tego jak tworzy się makra. Nie wiem jakiej jakości jest ten tutorial, ale możesz sobie przejrzeć.