Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [Συναρτήσεις] Μηδεν σε Αφμ στο Excel (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/4285-miden-se-afm-sto-excel.html)

Σπύρος23 18-09-16 18:04

Μηδεν σε Αφμ στο Excel
 
Καλησπέρα σας! θελω μια μεγάλη βοήθεια!!!
Εχω ενα αρχειο excel με μεγαλο αριθμο κελιων με ΑΦΜ όπου το αρχικό μηδέν δε φάινεται.
Πως μπορώ σε όλα αυτά να προσθέσω αυτόματα το μηδέν μπροστά χωρίς να πάω σε ενα ένα και να βάζω 0 κάνοντας το και κείμενο?
Ευχαριστώ εκ των προτέρων

ChrisGT7 18-09-16 18:40

Αν οι Α.Φ.Μ. είναι ελληνικοί και όχι εντός Ε.Ε. (ενδοκοινοτικοί συναλλασσόμενοι), τότε η παρακάτω συνάρτηση θα σε βοηθήσει:
=REPT("0";9-LEN(A1))&A1

π.χ. Αν το κελί Α1 έχει τον ΑΦΜ "5896547", γράψε την παραπάνω συνάρτηση στο Β1 και το αποτέλεσμα θα είναι "005896547".

Μετά απλά τράβα τη συνάρτηση και στα υπόλοιπα κελιά.

Spirosgr 18-09-16 18:53

Καλησπέρα
Επειδή δεν το γνωρίζω, το ρωτάω...
Υπάρχουν ΑΦΜ που αρχίζουν με 2 ή περισσότερα μηδενικά;

ChrisGT7 18-09-16 18:56

Με 2 έχω δει σίγουρα. Μπορεί να υπάρχουν και με περισσότερα, αρκεί φυσικά να επαληθεύονται από τον αλγόριθμο δημιουργίας ΑΦΜ.

Spirosgr 18-09-16 19:02

Επομένως
Αν δεν είμαστε 100% σίγουροι,
για τον αριθμό των μηδενικών που μπορεί να αρχίζει ένας ΑΦΜ,
αν ο χρήστης έχει πχ 45678, εκ παραδρομής,
τότε κάθε τύπος που θα του δώσει αποτέλεσμα 000045678 είναι λάθος απάντηση...
ενώ θα έπρεπε να «ειδοποιεί» για σφάλμα...

ChrisGT7 18-09-16 19:10

Τότε η παρακάτω συνάρτηση πρέπει να χρησιμοποιηθεί μέσω VBA για τον έλεγχο ορθότητας ΑΦΜ:

Κώδικας:

Function ValidAFM(Afm As String) As Boolean
    ValidAFM = False
    If Len(Trim(Afm)) = 9 Then
        Dim Sum As Long
        For I = 8 To 1 Step -1
            Sum = Sum + Val(Mid(Afm, I, 1)) * 2 ^ (9 - I)
        Next
        ValidAFM = (((Sum Mod 11) Mod 10) = Val(Right(Afm, 1)))
    End If
End Function

Προσοχή όμως: Η παραπάνω συνάρτηση ελέγχει αν ένας ΑΦΜ είναι σωστός, όχι αν υπάρχει στην εφορία.

Spirosgr 18-09-16 20:31

Χρήστο, να τσεκάρεις τη συνάρτηση...

Σπύρος23 18-09-16 20:36

Υπάρχουν δυο ειδών κελιά.
Αυτά που είναι 9 ψηφίων και είναι εντάξει
Και υπάρχουν και αυτά που έχουν 8 ψηφία και λείπει μπροστά το μηδέν
Πως βάζω σε όσα είναι 8 ψηφίων ένα μηδέν μπροστά.
Το κελί τι πρέπει να ειναι?
Λογικά αριθμός?

Spirosgr 18-09-16 20:57

Πρόσεξε το σκεπτικό...

Υποθέτω, ότι ένας ΑΦΜ, έχει μέχρι 2 μηδενικά στην αρχή του και πρέπει:
1. Να έχει 9 ψηφία σύνολο...
2. Να είναι έγκυρος (με βάση τον αλγόριθμο ή τον κώδικα που θα τον ελέγξει)

Κανονικά όταν κρατάμε ΑΦΜ σε μια στήλη, θα πρέπει να είναι μορφοποιημένη Text εξ' αρχής.
Αν δεν είναι, (εδώ είναι και το πρόβλημα του φίλου) τότε:

Πρέπει ένας κώδικας να ελέγξει κάθε κελί χωριστά και να κάνει τα εξής:

1. Μορφοποιεί το κελί "@" = text
2.Μετράει το len του ΑΦΜ

2α. Αν είναι 9 τότε ελέγχει την εγκυρότητα...
2β. Αν δεν είναι 9 (και μέχρι 7) τότε:
Για κάθε ψηφίο μέχρι τα 9 που «λείπει» , προσθέτει τόσα μηδενικά και ελέγχει την εγκυρότητα
του «νέου» ΑΦΜ
2γ. Αν είναι λιγότερα από 7 τότε χρωματίζει πχ κόκκινο (ο ΑΦΜ δεν έχει τα απαιτούμενα ψηφία)

Αν το 2α είναι true τότε προχωράει,
αν είναι false τότε χρωματίζει πχ γκρι
(ο ΑΦΜ δεν είναι έγκυρος)

Αν το 2β είναι true (μετά τη προσθήκη των / του μηδενικού) τότε προχωράει,
αν είναι false τότε χρωματίζει πχ γκρι (ο ΑΦΜ δεν είναι έγκυρος)

Καταλαβαίνεις, ότι για να γίνει σωστά η δουλειά, το θέμα είναι όχι δύσκολο, αλλά σύνθετο...

ChrisGT7 18-09-16 20:58

Έκανα μερικές τροποποιήσεις για να μπορεί να χρησιμοποιηθεί και σε Excel ώστε να ελέγχει αν ένας ελληνικός ΑΦΜ είναι ορθός και να τον επιστρέφει πλήρες (αν του λείπουν μηδενικά):

Κώδικας:

Function AFM(Str As String) As String
    Dim I As Long, Sum As Long
   
    If Len(Str) > 9 Or Not IsNumeric(Str) Then
        AFM = "Μη έγκυρος Α.Φ.Μ."
        Exit Function
    End If
   
    Str = String(9 - Len(Str), "0") & Str
    For I = 8 To 1 Step -1
        Sum = Sum + Val(Mid(Str, I, 1)) * 2 ^ (9 - I)
    Next
    AFM = IIf((Sum Mod 11) Mod 10 = Val(Right(Str, 1)), Str, "Μη έγκυρος Α.Φ.Μ.")
End Function

Σπύρος23, χρησιμοποιώντας τον παραπάνω κώδικα, δημιουργείς μια συνάρτηση AFM() που βάζοντας ως τιμή το κελί που περιέχει τον ΑΦΜ, κάνει τους απαραίτητους ελέγχους και σου επιστρέψει "Μη έγκυρος ΑΦΜ" ή τον ΑΦΜ με επιπλέον μηδενικά, αν παραλείπονται.


Η ώρα είναι 10:12.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2