14. januar 2008 - 11:04
Der er
7 kommentarer og
1 løsning
Autoudfyld med nuller
Hejsa
Et lille nemt spørgsmål.
I en celle skal der altid stå 14 cifre. Dvs. en masse nuller efterfulgt af eet fakturanummer.
Da fakturanummeret kan ændre sig fra at være enten 1-cifret, 2-cifret osv. over tid skal antallet af nuller jo også ændre sig automatisk.
Hvordan laver man lige sådan en formel.
14. januar 2008 - 11:19
#2
Jeg kan godt se at det virker, men
De første 14 cifre bruges til at beregne det 15ende. Det er til brug til et indbetalingskort.
Dvs. at nullerne skal skrives. Når jeg laver det sådan som du har skrevet vil den ikke beregne på baggrund heraf.. Skriver jeg nullerne manuelt vil den godt.
14. januar 2008 - 12:08
#4
Umiddelbart har jeg fundet denne makro som klarer beregningen af det sidste ciffer:
Public Function FindCheckCiffer(Number, Cardtype)
Select Case Cardtype
Case "01", "73": GoTo fejl
Case "04", "15": FindCheckCiffer = MakeCheckCiffer(Number, 12, 15)
Case "71": FindCheckCiffer = MakeCheckCiffer(Number, 14, 14)
Case "75": FindCheckCiffer = MakeCheckCiffer(Number, 15, 15)
Case " ", """ """
If Left(Number, 1) Like "[2,4,8]" And Len(Number) = 18 Then
FindCheckCiffer = MakeCheckCiffer(Number, 18, 18)
Else
GoTo fejl
End If
Case Else: GoTo fejl
End Select
Exit Function
fejl:
FindCheckCiffer = CVErr(xlErrNA)
End Function
Public Function IsCheckCifferOK(Number As String, Cardtype) As String
Dim vTemp As Variant
Dim vNumber As Variant
vNumber = Left(Number, Len(Number) - 1)
Select Case Cardtype
Case "01", "73": GoTo fejl
Case "04", "15": vTemp = MakeCheckCiffer(vNumber, 12, 15)
Case "71": vTemp = MakeCheckCiffer(vNumber, 14, 14)
Case "75": vTemp = MakeCheckCiffer(vNumber, 15, 15)
Case " ", """ """
If Left(vNumber, 1) Like "[2,4,8]" And Len(vNumber) = 18 Then
vTemp = MakeCheckCiffer(vNumber, 18, 18)
Else
GoTo fejl
End If
Case Else: GoTo fejl
End Select
If vTemp = CInt(Right(Number, 1)) Then
IsCheckCifferOK = "OK"
Else
IsCheckCifferOK = "Ikke OK"
End If
Exit Function
fejl:
IsCheckCifferOK = CVErr(xlErrNA)
End Function
Private Function MakeCheckCiffer(Number, lmin As Long, lmax As Long) As Variant
Dim Chksum As Long
Dim tsum As Long
Dim x As Long
Dim chk As Long
Dim start As Boolean
On Error GoTo fejl
If Len(Number) < lmin Or Len(Number) > lmax Then GoTo fejl
chk = Len(Number)
Chksum = 0
start = False
For x = chk To 1 Step -1
tsum = CInt(Mid(Number, x, 1)) * (start + 2)
start = Not start
If tsum > 9 Then tsum = CInt(Left(tsum, 1)) + CInt(Mid(tsum, 2, 1))
Chksum = Chksum + tsum
Next
Chksum = Chksum Mod 10
If Chksum <> 0 Then Chksum = 10 - Chksum
MakeCheckCiffer = Chksum
Exit Function
fejl:
MakeCheckCiffer = CVErr(xlErrNA)
End Function
Og formel i regnearket:
findcheckciffer(F57;F56)
14. januar 2008 - 12:13
#5
Ups, når vi er ude i VBA står jeg desværre af.
Men der er jo heldigvis så mange andre herinde som er stærke i den sag, så du får sikkert hurtig svar. :-)
14. januar 2008 - 13:40
#7
Det kan jeg desværre ikke lige forstå Excelent ?
Men jeg har løst det sådan:
Slettet linien:
If Len(Number) < lmin Or Len(Number) > lmax Then GoTo fejl
Da jeg ved at jeg altid bruger et 71-indbetalingskort
Og tilføjet denne formel i cellen med betalingsID:
=HØJRE(GENTAG(0;15)&I10;15-1) &findcheckciffer(I10;71)