Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 70546 Skopiuj do schowka Wyliczanie cyfry kontrolnej kodu SSCC
Autor Wiadomość
Pawel1624 
Świeżak


Wersja: Win Office 2019
Posty: 4
Wysłany: 29-03-2021, 16:18   Wyliczanie cyfry kontrolnej kodu SSCC

Witam serdecznie,

Jestem raczej poczatkujaca osoba i chciałbym prosić o pomoc. Potrzebuję utworzyć makro bądź formułę, która będzie mi wyliczała cyfrę kontrolną dla kodu SSCC 17 cyfrowego plus cyfra kontrolna. Przegladam internet, ale im wiecej czytam tym coraz mniej rozumiem.
Metoda wyliczania tej cyfry jest raczej prosta, zalaczam ja w pliku, a cyfre kontrolna oznaczylem na zolto, ale nie potrafie niestety przelozyc jej na formule w excelu.

Na ten moment mam taką formułę, ale niestety nie przelicza ona poprawnie.
=10MOD(((FRAGMENT.TEKSTU($A1;2;1)+FRAGMENT.TEKSTU($A1;4;1)+FRAGMENT.TEKSTU($A1;6;1)+FRAGMENT.TEKSTU($A1;8;1)+FRAGMENT.TEKSTU($A1;10;1)+FRAGMENT.TEKSTU($A1;12;1)+FRAGMENT.TEKSTU($A1;14;1)+FRAGMENT.TEKSTU($A1;16;1))*3+(FRAGMENT.TEKSTU($A1;1;1)+FRAGMENT.TEKSTU($A1;3;1)+FRAGMENT.TEKSTU($A1;5;1)+FRAGMENT.TEKSTU($A1;7;1)+FRAGMENT.TEKSTU($A1;9;1)+FRAGMENT.TEKSTU($A1;11;1)+FRAGMENT.TEKSTU($A1;13;1)+FRAGMENT.TEKSTU($A1;15;1)+FRAGMENT.TEKSTU($A1;17;1)));10)

Adnotacja 2021-03-29 161012.png
Obliczanie cyfry kontrolnej
Plik ściągnięto 23 raz(y) 55.56 KB

ID posta: 402922 Skopiuj do schowka
 
 
DwaNiedźwiedzie 
Excel Expert



Wersja: Win Office 2016
Pomógł: 284 razy
Posty: 705
Wysłany: 29-03-2021, 17:04   

Dla kodu wpisanego w komórce A1 (formuła tablicowa, zatwierdź przez ctrl+shift+enter):
Kod:
=10-MOD(SUMA.ILOCZYNÓW(FRAGMENT.TEKSTU(A1;WIERSZ($1:$17);1)*JEŻELI(MOD(WIERSZ($1:$17);2);3;1));10)
ID posta: 402924 Skopiuj do schowka
 
 
Maciej Gonet 
Excel Expert


Wersja: Win Office 2016
Pomógł: 2118 razy
Posty: 6628
Wysłany: 29-03-2021, 17:13   

Zakładając, że kod w postaci tekstu jest w A1 można zastosować taki wzór:
Kod:
=MOD(-MOD(SUMA.ILOCZYNÓW(FRAGMENT.TEKSTU(A1;wn;1)*(1+2*MOD(wn;2)));10);10)
Oznaczenie wn jest nazwą zdefiniowaną w Menedżerze nazw wg wzoru:
Kod:
=WIERSZ(ADR.POŚR("1:17"))
dla Exceli do 2019 albo
Kod:
=SEKWENCJA(17)
w Excelu 365.

PS. Wzór podany przez DwaNiedźwiedzie może zwracać 10. Rozumiem, że wtedy należy przyjąć 0. Ja przynajmniej przyjąłem taką interpretację.

Liczba_kontr.xlsx
Pobierz Plik ściągnięto 5 raz(y) 65.81 KB

ID posta: 402927 Skopiuj do schowka
 
 
Artik 



Wersja: Win Office 365
Pomógł: 3139 razy
Posty: 10389
Wysłany: 30-03-2021, 10:31   

Co prawda Pawel1624 nie miał problemów z makrem, bo go nie ma, ale może teraz będzie miał mniejsze. ;-)
Poniżej trzy funkcje do walidacji kodów SSCC.
Kod:
Function ValidSSCC(ByVal sCode As String) As Boolean
  'Sprawdza, czy kod SSCC jest prawidłowy
  'Zwraca PRAWDA,FAŁSZ
  'Należy przekazać pełny kod wraz z liczbą kontrolną
    Dim sCode1      As String
    Dim i           As Long
    Dim lSum        As Long
    Dim lDigit      As Long


    Select Case Len(sCode)

        Case 8, 12, 13, 14, 17, 18
            sCode1 = Left(sCode, Len(sCode) - 1)
            lDigit = DigitSSCC(sCode1)

            ValidSSCC = (Right(sCode, 1) = CStr(lDigit))

        Case Else

            ValidSSCC = False

    End Select

End Function


Function DigitSSCC(ByVal sCode As String) As Long
  'Wylicza liczbę kontrolną
  'Zwraca cyfrę 0-9
  'Należy przekazać kod bez liczby kontrolnej
  Dim i As Long
  Dim lSum As Long

            For i = 0 To Len(sCode) - 1
                If i Mod 2 = 0 Then
                    lSum = lSum + Mid(sCode, i + 1, 1) * 3
                Else
                    lSum = lSum + Mid(sCode, i + 1, 1)
                End If
            Next i

            DigitSSCC = Application.RoundUp(lSum, -1) - lSum
End Function


Function SSCCCode(ByVal sCode As String) As String
  'Zwraca pełny kod SSCC
  'Należy przekazać kod bez liczby kontrolnej
   
    Select Case Len(sCode)

        Case 7, 11, 12, 13, 16, 17
            SSCCCode = sCode & DigitSSCC(sCode)

        Case Else

            SSCCCode = False

    End Select
 
End Function

Można je użyć w kodzie lub jako funkcje arkuszowe. Ale jako UDF (funkcja arkuszowa) nie zostały właściwie przygotowane, szczególnie SSCCCode.

Artik
_________________
Persistence is a virtue in the world of programming.
ID posta: 402952 Skopiuj do schowka
 
 
Pawel1624 
Świeżak


Wersja: Win Office 2019
Posty: 4
Wysłany: 05-04-2021, 19:23   

Bardzo dziękuję wszystkim za pomoc :)

Uzyłem ponizszej funkcji
Kod:
=MOD(-MOD(SUMA.ILOCZYNÓW(FRAGMENT.TEKSTU(A1;wn;1)*(1+2*MOD(wn;2)));10);10)


oraz ponizszego kodu:
Kod:
Function DigitSSCC(ByVal sCode As String) As Long
  'Wylicza liczbę kontrolną
  'Zwraca cyfrę 0-9
  'Należy przekazać kod bez liczby kontrolnej
  Dim i As Long
  Dim lSum As Long

            For i = 0 To Len(sCode) - 1
                If i Mod 2 = 0 Then
                    lSum = lSum + Mid(sCode, i + 1, 1) * 3
                Else
                    lSum = lSum + Mid(sCode, i + 1, 1)
                End If
            Next i

            DigitSSCC = Application.RoundUp(lSum, -1) - lSum
End Function


Jeszcze raz bardzo dziekuje za pomoc w temacie, pozdrawiam.



A ponizsza funkcja zle przelicza cyfre kontrolna.
Kod:
=10-MOD(SUMA.ILOCZYNÓW(FRAGMENT.TEKSTU(A1;WIERSZ($1:$17);1)*JEŻELI(MOD(WIERSZ($1:$17);2);3;1
  
ID posta: 403201 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe