| Excel samples - Χρήσιμα αρχεία & παραδείγματα Αρχεία Ms-Excel διαθέσιμα για τα μέλη του Forum. |
| | Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
|
#1
| ||||
| ||||
| Δημιουργός: Τάσος Φιλοξενίδης (έτος 2025) Περιβάλλον: Excel 2003 - Excel 365 Η μεταγραφή των ελληνικών χαρακτήρων σε λατινικούς είναι ένα απαραίτητο εργαλείο για πολλές εφαρμογές, όπως:
Η μεταγραφή βάσει του προτύπου ΕΛΟΤ 743 διασφαλίζει συμβατότητα, αναγνωσιμότητα και συνέπεια στη χρήση των ελληνικών χαρακτήρων με λατινικά στοιχεία. Τι κάνει ο κώδικας Παρακάτω παραθέτω μία πλήρη υλοποίηση σε VBA (Visual Basic for Applications), η οποία:
Πώς να τον χρησιμοποιήσετε Μπορείτε να καλέσετε τη συνάρτηση: Debug.Print GreekToLatin("Καλημέρα σας!") ή να την ενσωματώσετε σε φόρμα Excel / Access για μεταγραφή μαζικών δεδομένων. Ο πλήρης κώδικας ακολουθεί με επεξηγηματικά σχόλια για κάθε λειτουργία. Κώδικας: Option Explicit ' Εξαναγκάζει τη δήλωση μεταβλητών
' Συνάρτηση: GreekToLatin
' Περιγραφή: Μετατρέπει ελληνικό κείμενο (σε χαρακτήρες Unicode) σε λατινικό.
' Χειρίζεται διφθόγγους, ειδικούς συνδυασμούς και συμφωνικά συμπλέγματα.
' Επιστρέφει: Τη μεταγραφή ως λατινική αλφαβητική συμβολοσειρά.
' ==========================================
Function GreekToLatin(strText As String) As String
Dim i As Long
Dim output As String
Dim ch As String, ch2 As String
Dim grSet As String: grSet = "αάεέηήιίϊΐοόυύϋΰωώ" ' Χαρακτήρες που θεωρούνται "φωνήεντα"
Dim viSet As String: viSet = "αάεέηήοόβγδζλμνρ" ' "Σύμφωνα φωνής" για τον κανόνα αυ/ευ/ηυ
i = 1
Do While i <= Len(strText)
ch = Mid(strText, i, 1)
ch2 = IIf(i < Len(strText), Mid(strText, i + 1, 1), "")
Dim originalChunk As String: originalChunk = ch & ch2
Dim translit As String: translit = ""
' Ανίχνευση ειδικών συνδυασμών
Select Case LCase(originalChunk)
Case "αι", "αί": translit = "ai": i = i + 2
Case "ει", "εί": translit = "ei": i = i + 2
Case "οι", "οί": translit = "oi": i = i + 2
Case "ου", "ού": translit = "ou": i = i + 2
Case "ντ": translit = "nt": i = i + 2
Case "τσ", "τς": translit = "ts": i = i + 2
Case "τζ": translit = "tz": i = i + 2
Case "γγ": translit = "ng": i = i + 2
Case "γκ": translit = "gk": i = i + 2
Case "γχ": translit = "nch": i = i + 2
Case "γξ": translit = "nx": i = i + 2
' Ειδικός χειρισμός "μπ"
Case "μπ"
Dim prev As String, nextChar As String
prev = IIf(i > 1, Mid(strText, i - 1, 1), "")
nextChar = IIf(i + 2 <= Len(strText), Mid(strText, i + 2, 1), "")
If InStr(grSet, LCase(prev)) > 0 And InStr(grSet, LCase(nextChar)) > 0 Then
translit = "mp"
Else
translit = "b"
End If
i = i + 2
' Ειδικός χειρισμός αυ/ευ/ηυ ανάλογα με το επόμενο σύμφωνο
Case "αυ", "αύ", "ευ", "εύ", "ηυ", "ηύ"
Dim nextLetter As String: nextLetter = IIf(i + 2 <= Len(strText), Mid(strText, i + 2, 1), "")
Dim baseChar As String: baseChar = LCase(Left(originalChunk, 1))
Dim fivi As String
If InStr(viSet, LCase(nextLetter)) > 0 Then
If baseChar = "α" Then fivi = "av"
If baseChar = "ε" Then fivi = "ev"
If baseChar = "η" Then fivi = "iv"
Else
If baseChar = "α" Then fivi = "af"
If baseChar = "ε" Then fivi = "ef"
If baseChar = "η" Then fivi = "if"
End If
translit = fivi
i = i + 2
Case Else
' Μονός χαρακτήρας
translit = GreekCharToLatin(ch)
originalChunk = ch
i = i + 1
End Select
' Διατήρηση κεφαλαίων/πεζών
output = output & CetCharCase(translit, originalChunk)
Loop
GreekToLatin = output
End Function
' ==========================================
' Συνάρτηση: GreekCharToLatin
' Περιγραφή: Επιστρέφει τη λατινική αντιστοιχία ενός ελληνικού χαρακτήρα
' ==========================================
Function GreekCharToLatin(ch As String) As String
Select Case LCase(ch)
Case "α", "ά": GreekCharToLatin = "a"
Case "β": GreekCharToLatin = "v"
Case "γ": GreekCharToLatin = "g"
Case "δ": GreekCharToLatin = "d"
Case "ε", "έ": GreekCharToLatin = "e"
Case "ζ": GreekCharToLatin = "z"
Case "η", "ή": GreekCharToLatin = "i"
Case "θ": GreekCharToLatin = "th"
Case "ι", "ί", "ϊ", "ΐ": GreekCharToLatin = "i"
Case "κ": GreekCharToLatin = "k"
Case "λ": GreekCharToLatin = "l"
Case "μ": GreekCharToLatin = "m"
Case "ν": GreekCharToLatin = "n"
Case "ξ": GreekCharToLatin = "x"
Case "ο", "ό": GreekCharToLatin = "o"
Case "π": GreekCharToLatin = "p"
Case "ρ": GreekCharToLatin = "r"
Case "σ", "ς": GreekCharToLatin = "s"
Case "τ": GreekCharToLatin = "t"
Case "υ", "ύ", "ϋ", "ΰ": GreekCharToLatin = "y"
Case "φ": GreekCharToLatin = "f"
Case "χ": GreekCharToLatin = "ch"
Case "ψ": GreekCharToLatin = "ps"
Case "ω", "ώ": GreekCharToLatin = "o"
Case Else: GreekCharToLatin = ch
End Select
End Function
' ==========================================
' Συνάρτηση: CetCharCase
' Περιγραφή: Διατηρεί την κεφαλαιοποίηση του αρχικού ελληνικού χαρακτήρα ή συνδυασμού
' ==========================================
Function CetCharCase(translit As String, original As String) As String
' Ειδική περίπτωση για τελικό σίγμα
Select Case True
Case original = "ς": CetCharCase = "s": Exit Function
Case original = "ΐ", original = "ϊ": CetCharCase = "i": Exit Function
Case original = "Ϊ": CetCharCase = "I": Exit Function
Case original = "ΰ", original = "ϋ": CetCharCase = "y": Exit Function
Case original = "Ϋ": CetCharCase = "Y": Exit Function
End Select
' Έλεγχος κεφαλαίων/πεζών
Dim allUpper As Boolean: allUpper = True
Dim allLower As Boolean: allLower = True
Dim i As Long
For i = 1 To Len(original)
Dim ch As String: ch = Mid(original, i, 1)
If ch <> UCase(ch) Then allUpper = False
If ch <> LCase(ch) Then allLower = False
Next i
If allUpper Then
CetCharCase = UCase(translit)
ElseIf Left(original, 1) = UCase(Left(original, 1)) And Mid(original, 2) = LCase(Mid(original, 2)) Then
CetCharCase = UCase(Left(translit, 1)) & Mid(translit, 2)
Else
CetCharCase = LCase(translit)
End If
End Function
Ο πλήρης κώδικας για συστήματα χωρίς ελληνικό locale (π.χ. servers, αγγλικά Windows) ακολουθεί με επεξηγηματικά σχόλια για κάθε λειτουργία. Πώς να τον χρησιμοποιήσετε Μπορείτε να καλέσετε τη συνάρτηση: Debug.Print GreekToLatinEX("Καλημέρα σας!") ή να την ενσωματώσετε σε φόρμα Excel / Access για μεταγραφή μαζικών δεδομένων. Κώδικας: Option Explicit ' Εξαναγκάζει τη δήλωση μεταβλητών
' ==========================================
' Συνάρτηση: GreekToLatinEX
' Περιγραφή:
' Μετατρέπει ελληνικό κείμενο Unicode σε λατινικό (transliteration),
' χρησιμοποιώντας χαρακτήρες Unicode (ChrW) ώστε να λειτουργεί σωστά
' σε συστήματα χωρίς ελληνικό locale (π.χ. servers, αγγλικά Windows).
'
' Επιστρέφει: Το λατινικό αντίστοιχο της ελληνικής εισόδου
' ==========================================
Function GreekToLatinEX(strText As String) As String
Dim i As Long
Dim output As String
Dim ch As String, ch2 As String
Dim grSet As String
grSet = ChrW(945) & ChrW(940) & ChrW(949) & ChrW(941) & ChrW(951) & ChrW(942) & ChrW(953) & ChrW(943) & _
ChrW(970) & ChrW(912) & ChrW(959) & ChrW(972) & ChrW(965) & ChrW(973) & ChrW(971) & ChrW(944) & _
ChrW(969) & ChrW(974)
Dim viSet As String
viSet = ChrW(945) & ChrW(940) & ChrW(949) & ChrW(941) & ChrW(951) & ChrW(942) & ChrW(959) & ChrW(972) & _
ChrW(946) & ChrW(947) & ChrW(948) & ChrW(950) & ChrW(955) & ChrW(956) & ChrW(957) & ChrW(961)
i = 1
Do While i <= Len(strText)
ch = Mid(strText, i, 1)
ch2 = IIf(i < Len(strText), Mid(strText, i + 1, 1), "")
Dim originalChunk As String
originalChunk = ch & ch2
Dim translit As String
translit = ""
' Ειδικοί συνδυασμοί χαρακτήρων
Select Case LCase(originalChunk)
Case ChrW(945) & ChrW(953), ChrW(945) & ChrW(943): translit = "ai": i = i + 2
Case ChrW(949) & ChrW(953), ChrW(949) & ChrW(943): translit = "ei": i = i + 2
Case ChrW(959) & ChrW(953), ChrW(959) & ChrW(943): translit = "oi": i = i + 2
Case ChrW(959) & ChrW(965), ChrW(959) & ChrW(973): translit = "ou": i = i + 2
Case ChrW(957) & ChrW(964): translit = "nt": i = i + 2
Case ChrW(964) & ChrW(963), ChrW(964) & ChrW(962): translit = "ts": i = i + 2
Case ChrW(964) & ChrW(950): translit = "tz": i = i + 2
Case ChrW(947) & ChrW(947): translit = "ng": i = i + 2
Case ChrW(947) & ChrW(954): translit = "gk": i = i + 2
Case ChrW(947) & ChrW(967): translit = "nch": i = i + 2
Case ChrW(947) & ChrW(958): translit = "nx": i = i + 2
' "μπ" -> "mp" ή "b" ανάλογα με συμφραζόμενα
Case ChrW(956) & ChrW(960)
Dim prev As String, nextChar As String
prev = IIf(i > 1, Mid(strText, i - 1, 1), "")
nextChar = IIf(i + 2 <= Len(strText), Mid(strText, i + 2, 1), "")
If InStr(grSet, LCase(prev)) > 0 And InStr(grSet, LCase(nextChar)) > 0 Then
translit = "mp"
Else
translit = "b"
End If
i = i + 2
' "αυ", "ευ", "ηυ" -> av/af, ev/ef, iv/if ανάλογα με επόμενο γράμμα
Case ChrW(945) & ChrW(965), ChrW(945) & ChrW(973), _
ChrW(949) & ChrW(965), ChrW(949) & ChrW(973), _
ChrW(951) & ChrW(965), ChrW(951) & ChrW(973)
Dim nextLetter As String
nextLetter = IIf(i + 2 <= Len(strText), Mid(strText, i + 2, 1), "")
Dim baseChar As String: baseChar = LCase(Left(originalChunk, 1))
Dim fivi As String
If InStr(viSet, LCase(nextLetter)) > 0 Then
If baseChar = ChrW(945) Then fivi = "av"
If baseChar = ChrW(949) Then fivi = "ev"
If baseChar = ChrW(951) Then fivi = "iv"
Else
If baseChar = ChrW(945) Then fivi = "af"
If baseChar = ChrW(949) Then fivi = "ef"
If baseChar = ChrW(951) Then fivi = "if"
End If
translit = fivi
i = i + 2
Case Else
' Μονός χαρακτήρας
translit = GreekCharToLatinEX(ch)
originalChunk = ch
i = i + 1
End Select
output = output & CetCharCaseEX(translit, originalChunk)
Loop
GreekToLatinEX = output
End Function
' ==========================================
' Συνάρτηση: GreekCharToLatinEX
' Περιγραφή: Επιστρέφει τη λατινική μορφή ενός ελληνικού χαρακτήρα Unicode.
' ==========================================
Function GreekCharToLatinEX(ch As String) As String
Select Case LCase(ch)
Case ChrW(945), ChrW(940): GreekCharToLatinEX = "a"
Case ChrW(946): GreekCharToLatinEX = "v"
Case ChrW(947): GreekCharToLatinEX = "g"
Case ChrW(948): GreekCharToLatinEX = "d"
Case ChrW(949), ChrW(941): GreekCharToLatinEX = "e"
Case ChrW(950): GreekCharToLatinEX = "z"
Case ChrW(951), ChrW(942): GreekCharToLatinEX = "i"
Case ChrW(952): GreekCharToLatinEX = "th"
Case ChrW(953), ChrW(943), ChrW(970), ChrW(912): GreekCharToLatinEX = "i"
Case ChrW(954): GreekCharToLatinEX = "k"
Case ChrW(955): GreekCharToLatinEX = "l"
Case ChrW(956): GreekCharToLatinEX = "m"
Case ChrW(957): GreekCharToLatinEX = "n"
Case ChrW(958): GreekCharToLatinEX = "x"
Case ChrW(959), ChrW(972): GreekCharToLatinEX = "o"
Case ChrW(960): GreekCharToLatinEX = "p"
Case ChrW(961): GreekCharToLatinEX = "r"
Case ChrW(963), ChrW(962): GreekCharToLatinEX = "s"
Case ChrW(964): GreekCharToLatinEX = "t"
Case ChrW(965), ChrW(973), ChrW(971), ChrW(944): GreekCharToLatinEX = "y"
Case ChrW(966): GreekCharToLatinEX = "f"
Case ChrW(967): GreekCharToLatinEX = "ch"
Case ChrW(968): GreekCharToLatinEX = "ps"
Case ChrW(969), ChrW(974): GreekCharToLatinEX = "o"
Case Else: GreekCharToLatinEX = ch
End Select
End Function
' ==========================================
' Συνάρτηση: CetCharCaseEX
' Περιγραφή:
' Επαναφέρει την κεφαλαιοποίηση της μεταγραμμένης λέξης (translit),
' με βάση την ελληνική λέξη (original), χωρίς εξάρτηση από locale.
'
' Ιδανική για συστήματα χωρίς ελληνικές ρυθμίσεις (intl.cpl).
' ==========================================
Function CetCharCaseEX(translit As String, original As String) As String
' Ειδική περίπτωση για τελικό σίγμα (ς)
If original = ChrW(962) Then
CetCharCaseEX = "s"
Exit Function
End If
Select Case True
original = ChrW(962): CetCharCase = "s": Exit Function
Case LCase(original) = ChrW(912), LCase(original) = ChrW(970): CetCharCase = "i": Exit Function
Case LCase(original) = ChrW(944), LCase(original) = ChrW(971): CetCharCase = "y": Exit Function
End Select
' Έλεγχος αν όλοι οι χαρακτήρες είναι κεφαλαίοι ή πεζοί
Dim allUpper As Boolean: allUpper = True
Dim allLower As Boolean: allLower = True
Dim i As Long
For i = 1 To Len(original)
Dim ch As String: ch = Mid(original, i, 1)
If ch <> UCase(ch) Then allUpper = False
If ch <> LCase(ch) Then allLower = False
Next i
' Εφαρμογή μορφοποίησης
If allUpper Then
CetCharCaseEX = UCase(translit)
ElseIf Left(original, 1) = UCase(Left(original, 1)) And Mid(original, 2) = LCase(Mid(original, 2)) Then
CetCharCaseEX = UCase(Left(translit, 1)) & Mid(translit, 2)
Else
CetCharCaseEX = LCase(translit)
End If
End Function
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών Τελευταία επεξεργασία από το χρήστη Tasos : 05-04-25 στις 18:42. |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
| ||||
| Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
| [ Φόρμες ] Μετονομασία ελληνικών χαρακτήρων βάσης δεδομένων | dimitrisp | Access - Ερωτήσεις / Απαντήσεις | 3 | 16-06-20 09:12 |
| [Excel07] Μετατροπή Ελληνικών χαρακτήρων σε Greeklis ή Αγγλικά. | agrbita | Excel - Ερωτήσεις / Απαντήσεις | 1 | 25-01-17 14:56 |
| [Συναρτήσεις] Εύρεση μη Ελληνικών χαρακτήρων σε κελί | Οδυσσέας | Excel - Ερωτήσεις / Απαντήσεις | 5 | 15-04-13 16:35 |
| Μεταγραφή Ελληνικών λέξεων με Λατινικούς χαρακτήρες. | ΚΩΣΤΑΣ | Access - Ερωτήσεις / Απαντήσεις | 0 | 07-06-11 18:32 |
| Μετατροπή ελληνικών χαρακτήρων σε λατινικούς | Χρήστος | Access - Ερωτήσεις / Απαντήσεις | 5 | 17-03-11 15:27 |
Η ώρα είναι 08:28.



Θεματικός Τρόπος
