Dodaj wiodące zera


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
'**********************************************************************************************************
' Nazwa:                dodajWiodaceZera
' Autor:                mielk | 2012-02-12
'
' Opis:                 Funkcja dodająca do podanej liczby odpowiednią liczbę wiodących zer.
'
' Argumenty:
'   wartosc             Liczba bazowa, do której mają zostać dodane wiodące zera.
'                       * Część ułamkowa liczby bazowej i znak minus są ignorowane.
'                       * Jeżeli podany argument nie jest liczbą i niemożliwe jest jego przekonwertowanie
'                         na liczbę, zwracana jest tekstowa reprezentacja tego argumentu, a jeśli jest to
'                         niemożliwe (np. podany argument jest tablicą lub obiektem), zwracany jest wyjątek
'                         NieprawidlowyTyp.
'   dlugosc             Opcjonalny argument liczbowy, który określa minimalną liczbę znaków tekstu
'                         wynikowego.
'                       * W przypadku argumentów dłuższych niż oczekiwana długość tekstu wynikowego,
'                         argument bazowy zwracany jest w całości (jeśli przykładowo argument wynosi 1000,
'                         a długość tekstu wynikowego, określona przez argument [ileZnakow], powinna
'                         wynosić 2, i tak zwrócony zostanie tekst 1000, składający się z 4 znaków).
'                       * Domyślna wartość tego parametru wynosi 2.
'
' Zwraca:
'   String              Tekst składający się z liczby bazowej, przekazanej jako argument [wartosc] oraz
'                       takiej ilości wiodących zer, aby wynikowy tekst posiadał liczbę znaków określoną
'                       przez argument [ileZnakow].
'
'                       Wynikowy tekst może przekraczać żądaną długość, jeżeli bazowa liczba posiada
'                       więcej znaków niż wynosi argument [ileZnakow] - w takiej sytuacji liczba bazowa
'                       nie jest skracana, ale zwracana w całości.
'
'                       Jeżeli przekazany do funkcji argument nie jest liczbą i nie może być
'                       przekonwertowany na liczbę, zwracana jest jego reprezentacja tekstowa. Jeżeli
'                       uzyskanie tekstowej reprezentacji tego argumentu jest niemożliwe (np. jest on
'                       tablicą lub obiektem), zwracany jest wyjątek NieprawidlowyTyp.
'
'
' Wyjątki:
'   NiedozwolonyTypZmiennej         Jeżeli przekazany do funkcji argument nie jest liczbą i nie jest
'                                   możliwe jego konwersja na liczbę ani uzyskanie jego tekstowej
'                                   reprezentacji.
'
'
' --- Zmiany ----------------------------------------------------------------------------------------------
' 2012-02-12        mielk           Utworzenie funkcji.
'**********************************************************************************************************
Public Function dodajWiodaceZera(ByVal wartosc As Variant, Optional ByVal dlugosc As Byte = 2) As String
    Const NAZWA_METODY As String = "dodajWiodaceZera"
    '------------------------------------------------------------------------------------------------------
    Dim iBrakujaceZnaki As Integer
    Dim lLiczba As Long
    '------------------------------------------------------------------------------------------------------


    'Funkcja sprawdza czy podany argument wejściowy jest liczbą. Jeżeli nie, nie jest podejmowane -------|
    'żadne działanie i zwracana jest oryginalna wartość argumentu bazowego.                             '|
    If VBA.IsNumeric(wartosc) Then                                                                      '|
                                                                                                        '|
        'Usuwa z liczby bazowej minus i część ułamkową                                                  '|
        lLiczba = VBA.Int(VBA.Abs(wartosc))                                                             '|
                                                                                                        '|
        'Sprawdza z ilu znaków składa się bazowa liczba i ile znaków trzeba do niej dodać, żeby         '|
        'wynikowy tekst posiadał oczekiwaną długość.                                                    '|
        iBrakujaceZnaki = dlugosc - VBA.Len(VBA.CStr(lLiczba))                                          '|
                                                                                                        '|
        'Jeśli brakująca liczba znaków jest ujemna, oznacza to, że tekstowa reprezentacja -----------|  '|
        'bazowej liczby jest dłuższa od oczekiwanej ilości znaków i zostaje zwrócona w całości.     '|  '|
        'W przeciwnym razie na początku dołączana jest odpowiednia liczba zer.                      '|  '|
        If iBrakujaceZnaki > 0 Then                                                                 '|  '|
                                                                                                    '|  '|
            'Do dodania odpowiedniej liczby zer wykorzystana jest funkcja [String]                  '|  '|
            'powtarzająca n razy określony znak.                                                    '|  '|
            dodajWiodaceZera = VBA.String(iBrakujaceZnaki, "0") & lLiczba                           '|  '|
                                                                                                    '|  '|
        Else                                                                                        '|  '|
                                                                                                    '|  '|
            dodajWiodaceZera = lLiczba                                                              '|  '|
                                                                                                    '|  '|
        End If                                                                                      '|  '|
        '--------------------------------------------------------------------------------------------|  '|
                                                                                                        '|
    Else                                                                                                '|
                                                                                                        '|
        'Jeżeli podany argument nie jest liczbą, zwracana jest jego tekstowa reprezentacja.             '|
        'Jeżeli jest to niemożliwe, wykonanie kodu jest przenoszone do etykiety NieprawidlowyTyp.       '|
        On Error GoTo NiedozwolonyTypZmiennej                                                           '|
        dodajWiodaceZera = VBA.CStr(wartosc)                                                            '|
                                                                                                        '|
    End If                                                                                              '|
    '----------------------------------------------------------------------------------------------------|


'==========================================================================================================
PunktWyjscia:
    Exit Function

'----------------------------------------------------------------------------------------------------------
NiedozwolonyTypZmiennej:
    '(...)
    'Obsługa błędów dla sytuacji, kiedy podany parametr jest obiektem lub tablicą i nie da się go
    'przekonwertować do typu tekstowego.

    GoTo PunktWyjscia


End Function