Römische Zahlen in Arabische umwandeln

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Römische Zahlen in Arabische umwandeln
von: Alifa
Geschrieben am: 20.09.2015 10:35:21

Hallo,
leider habe ich im Netz keine entsprechende Lösung gefunden. Die vorhandenen Funktionen in VBA akzeptieren auch fehlerhafte römische Zahlen und wandeln sie um. Kann mir jemand mit einer Funktion helfen, die "VX", zum Beispiel, nicht in 5 umwandelt, sondern "False" ausgibt. Danke im Voraus.
Gruß, Erhard

Bild

Betrifft: AW: Römische Zahlen in Arabische umwandeln
von: Sepp
Geschrieben am: 20.09.2015 10:43:27
Hallo Alifa,
http://www.excelformeln.de/formeln.html?welcher=228
Tabelle2

 ABC
1ArabischRömischArabisch
22230MMCCXXX2230
3797DCCXCVII797
41998MCMXCVIII1998
53218MMMCCXVIII3218
61358MCCCLVIII1358
765LXV65
82611MMDCXI2611
9581DLXXXI581
101520MDXX1520
112035MMXXXV2035
12 VX#NV
13 XV15

Formeln der Tabelle
ZelleFormel
B2=RÖMISCH(A2)
C2{=VERGLEICH(B2;RÖMISCH(ZEILE(INDIREKT("$1:$3999"))); 0)}
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
Matrix verstehen


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruß Sepp


Bild

Betrifft: AW: Römische Zahlen in Arabische umwandeln
von: Alifa
Geschrieben am: 20.09.2015 11:13:23
Hallo Sepp,
danke für die Antwort. Ich suche eigentlich eine Funktion für mein Makro in VBA. Zunächst sollen die römischen Zahlen auf Gültigkeit geprüft und anschließend in arabische übersetzt werden. Mein Makro stellt Bedingungen betreff Additionen verschiedener Werte.
Gruß, Erhard

Bild

Betrifft: AW: Römische Zahlen in Arabische umwandeln
von: Sepp
Geschrieben am: 20.09.2015 12:03:13
Hallo Alifa,
probier mal.

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub test()
Dim RN As String

RN = "MDCCCLXXXVII"

If IsRomanNumerial(RN) Then
  MsgBox RomToArab(RN)
Else
  MsgBox "Ungültige Eingabe!"
End If
End Sub


Private Function IsRomanNumerial(RomanNumerial As String) As Boolean
Dim objRegExp As Object

Set objRegExp = CreateObject("Vbscript.regexp")

With objRegExp
  .IgnoreCase = True
  .Global = True
  .Pattern = "(([IXCM])\2{3,})|[^IVXLCDM]|([IL][LCDM])|([XD][DM])|(V[VXLCDM])|(IX[VXLC])|" & _
    "(VI[VX])|(XC[LCDM])|(LX[LC])|((CM|DC)[DM])|(I[VX]I)|(X[CL]X)|(C[DM]C)|(I{2,}[VX])|" & _
    "(X{2,}[CL])|(C{2,}[DM])"
  If .test(RomanNumerial) = True Then GoTo ErrExit
End With
IsRomanNumerial = True
Exit Function
ErrExit:
IsRomanNumerial = False
End Function


Private Function RomToArab(r As String) As Integer
Dim p As Integer
Dim z As String
r = UCase(r)
If Len(r) = 1 Then '1. Basisklausel
  Select Case r
    Case "I"
      RomToArab = 1
    Case "V"
      RomToArab = 5
    Case "X"
      RomToArab = 10
    Case "L"
      RomToArab = 50
    Case "C"
      RomToArab = 100
    Case "D"
      RomToArab = 500
    Case "M"
      RomToArab = 1000
  End Select
ElseIf Len(r) = 0 Then '2. Basisklausel
  RomToArab = 0
Else 'rekursive Klausel
  search_max r, z, p
  RomToArab = RomToArab(z) - _
    RomToArab(Mid(r, 1, p - 1)) + _
    RomToArab(Mid(r, p + 1, 1000))
End If
End Function


Private Sub search_max(r As String, z As String, p As Integer)
Dim i As Integer
Dim j As Integer
Const f = "MDCLXVI"

For i = 1 To Len(f)
  For j = 1 To Len(r)
    If Mid(r, j, 1) = Mid(f, i, 1) Then
      p = j
      z = Mid(f, i, 1)
      Exit Sub
    End If
  Next j
Next i
End Sub


Gruß Sepp


Bild

Betrifft: AW: Römische Zahlen in Arabische umwandeln
von: Alifa
Geschrieben am: 20.09.2015 15:17:53
Hallo Sepp,
finde Dein Konzept Prima. So funktioniert die Funktion "RomToArab", wenn der Strng vorher auf Gültigkeit geprüft wird. Vielen Dank.
Gruß, Erhard

Bild

Betrifft: Im Ggsatz zur UDF 'RomToArab' fktioniert ...
von: Luc:-?
Geschrieben am: 20.09.2015 13:59:42
…die Fml aus excelformeln nicht für alle RÖMISCH-Varianten (Arg2=1…4), Sepp!
Gruß + schöSo, Luc :-?

Bild

Betrifft: AW: Römische Zahlen in Arabische umwandeln
von: Daniel
Geschrieben am: 20.09.2015 11:55:56
Hi
hast du eine Funktion, die auch arabisch in römisch wandeln kann?
wenn ja, dann wandle doch einfach die arabische Zahl zurück in eine römische und prüfe, ob das Ergebnis das gleiche ist wie die ursprüngliche römische Zahl.
Gruss Daniel

Bild

Betrifft: Das wären aber bis 5 mögliche Varianten je Zahl!
von: Luc:-?
Geschrieben am: 20.09.2015 14:01:22
Gruß, Luc :-?

Bild

Betrifft: AW: Das wären aber bis 5 mögliche Varianten je Zahl!
von: Alifa
Geschrieben am: 20.09.2015 14:43:07
Hallo,
Wenn den Variabeln a1,b1,a5,b5,c5,b4,c4,d4 die Werte "X","I","V","II","I","I","I","I" zugeordnet werden
gilt:Romar(a1 & b1)=Romar(a5 & b5 & c5)+Romar(b4 & c4 & d4)
Romar ist die gesuchte Funktion, welche die Römischen Zahlen in arabische umwandelt. Wenn diese Funktion falsche Ergebnisse gibt, kann ich das zwar mit der Funktion ArabischRömisch prüfen, hilft mir aber nicht weiter.
Gruß, Erhard

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Römische Zahlen in Arabische umwandeln"