poniedziałek, 2 grudnia 2013

Co w rzeczywistości zawiera komórka w Excelu?

Z pytaniem umieszczonym w tytule niniejszego posta spotkałem się kilkukrotnie, zarówno przeglądając różne wpisy i pytania na forach internetowych, jak również prowadząc szkolenie z zakresu VBA dla Excela. Chodzi bowiem o sytuację, w której chcemy określić rodzaj informacji zawartej w komórce z uwzględnieniem rodzaju formatowania jaki został zastosowany w danym zakresie arkusza.

Gdzie jednak znajduje się problem? Z punktu widzenia VBA liczba, data, czas i procent- wszystkie te elementy są liczbami. Także wartość Prawda/Fałsz w praktyce jest liczbą odpowiadającą 1 lub 0. W naszej sytuacji określić rzeczywisty typ danych znajdujących się w komórce.

W celu rozwiązania tego problemu wystarczy skonstruować prostą funkcję, której pełną postać znajdziecie Państwo poniżej. Kluczowa w tej funkcji pozostaje kolejność sprawdzania poszczególnych typów. Prześledźmy to na przykładzie typu liczbowego, który sprawdzany jest jako ostatni. Musimy się najpierw upewnić, że podane wartości nie są żadnym z typów: datą, wartością czasu, procentem lub wartością Prawda/Fałsz. Każdy z tych typów będąc domyślnie numerycznym zostałby więc rozpoznany jako liczba. Tymczasem nasza funkcja wydaje się działać prawidłowo co prezentuje poniższy zrzut ekranu.


01Public Function TypWartości(KOMÓRKA As Range)
02    
03    If IsEmpty(KOMÓRKA) Then
04                TypWartości = "PUSTA"
05    ElseIf Application.IsText(KOMÓRKA) Then
06                TypWartości = "TEKSTOWA"
07    ElseIf Application.IsLogical(KOMÓRKA) Then
08                TypWartości = "LOGICZNA"
09    ElseIf Application.IsErr(KOMÓRKA) Or Application.IsError(KOMÓRKA) Then
10                TypWartości = "BŁĄD"
11    ElseIf IsDate(KOMÓRKA) Then
12                TypWartości = "DATA"
13    ElseIf InStr(1, KOMÓRKA.Text, ":") <> 0 Then
14                TypWartości = "CZAS"
15    ElseIf Right(KOMÓRKA.Text, 1) = "%" Then
16                TypWartości = "PROCENT"
17    ElseIf IsNumeric(KOMÓRKA) Then
18                TypWartości = "LICZBA"
19    End If
20End Function

Brak komentarzy:

Prześlij komentarz