IBANを検証する準備が整っているシートはありますか?私はIBANに入り、有効か無効かを示します。ExcelでIBANを検証する
私は追加での数を検索し
this oneが見つかりましたが、私はそれを開く方法を知りませんしています。 誰も助けることができますか?
IBANを検証する準備が整っているシートはありますか?私はIBANに入り、有効か無効かを示します。ExcelでIBANを検証する
私は追加での数を検索し
this oneが見つかりましたが、私はそれを開く方法を知りませんしています。 誰も助けることができますか?
簡単ですが、以下の機能を使用してください。
'' Validate IBAN
Public Function VALIDATEIBAN(ByVal IBAN As string) As Boolean
On Error GoTo Catch
Dim objRegExp As Object
Dim blnIsValidIBAN As Boolean
Set objRegExp = CreateObject("vbscript.regexp")
objRegExp.IgnoreCase = True
objRegExp.Global = True
objRegExp.Pattern = "^[a-zA-Z]{2}\d{2}[ ]\d{4}[ ]\d{4}[ ]\d{4}[ ]\d{4}[ ]\d{4}|CZ\d{22}$"
blnIsValidIBAN = objRegExp.Test(IBAN)
VALIDATEIBAN = blnIsValidIBAN
Exit Function
Catch:
VALIDATEIBAN = False
MsgBox "Module: " & MODULE_NAME & " - VALIDATEIBAN function" & vbCrLf & vbCrLf _
& "Error#: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Function
使い方:
Copy the code.
In Excel press Alt + F11 to enter the VBE.
Press Ctrl + R to show the Project Explorer.
Insert -> Module.
Paste code.
Save and Exit VBE.
実行機能:
は今、あなただけのSUM、AVG機能に建てられたように、Excelのユーザー定義関数を持っています。 セルA1でIBANを検証し、任意のセルに書き込むだけでよいとします。=VALIDATEIBAN(A1).
TRUEまたはFALSEを返します。
加えて、それは両方に適用されます:
ES65 0800 0000 1920 0014 5399
と
ES6508000000192000145399
ではなく:
ES65-0800-0000-1920-0014-5399
これについてどのような、書式設定の問題が解決して運びましたが97チェックを外してください:
Public Function VALIDATEIBAN(ByVal IBAN As String) As String
' Created by : Koen Rijnsent (www.castoro.nl)
' Inspired by : Chris Fannin (AbbydonKrafts)
' Inspired by : bonsvr (http://stackoverflow.com/users/872583/bonsvr)
On Error GoTo CatchError
Dim objRegExp As Object
Dim IBANformat As Boolean
Dim IBANNR As String
Dim ReplaceChr As String
Dim ReplaceBy As String
'Check format
IBAN = UCase(IBAN)
Set objRegExp = CreateObject("vbscript.regexp")
objRegExp.IgnoreCase = True
objRegExp.Global = True
objRegExp.Pattern = "[a-zA-Z]{2}[0-9]{2}[a-zA-Z0-9]{4}[0-9]{7}([a-zA-Z0-9]?){0,16}"
IBANformat = objRegExp.Test(IBAN)
'Validity of country code will not be checked!
If IBANformat = False Then
VALIDATEIBAN = "FORMAT NOT RECOGNIZED"
Else
'Flip first 4 characters to the back
IBANNR = Right(IBAN, Len(IBAN) - 4) & Left(IBAN, 4)
'Replace letters by the right numbers
For Nr = 10 To 35
ReplaceChr = Chr(Nr + 55)
ReplaceBy = Trim(Str(Nr))
IBANNR = Replace(IBANNR, ReplaceChr, ReplaceBy)
Next Nr
'Loop through the IBAN, as it is too long to calculate at one go
CurrPart = ""
Answer = ""
For CurrDigit = 1 To Len(IBANNR)
CurrPart = CurrPart & Mid$(IBANNR, CurrDigit, 1)
CurrNumber = CLng(CurrPart)
'If the number can be divided
If 97 <= CurrNumber Then
LeftOver = CurrNumber Mod 97
WorkValue = (CurrNumber - LeftOver)/97
Answer = Answer & CStr(WorkValue)
CurrPart = CStr(LeftOver)
Else
'If no division occurred, add a trailing zero
If Len(Answer) > 0 Then
Answer = Answer & "0"
'Exception for the last number
If CurrDigit = Len(IBANNR) Then
LeftOver = CurrNumber Mod 97
Else
End If
Else
End If
End If
Next
If LeftOver = 1 Then
VALIDATEIBAN = "IBAN OK"
Else
VALIDATEIBAN = "97 CHECK FAILED"
End If
End If
Exit Function
CatchError:
VALIDATEIBAN = "ERROR: " & Err.Description
MsgBox "Module: " & MODULE_NAME & " - VALIDATEIBAN function" & vbCrLf & vbCrLf _
& "Error#: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Function
私はbonsvrから答えを見つけました。ありがとうございました。コードの私の読書から、これはCZの口座に固有のものだったようです。
私は、アイルランドの英国とドイツのIBANコードで、主に対処したよう
私は...と...objRegExp.Pattern =
の行を置き換えるために、この正規表現を開発し
objRegExp.Pattern = "^[GB|IE]{2}\d{2}[a-zA-Z]{4}\d{14}|[DE]\d{20}$"
私はこれのように、他の誰かに役立ちます願っています初期コードは私を助けました。自分の国を追加したい場合は、上記を拡張してください。
注:テストしているテキストには空白が含まれていないので、空白の指定を削除しました。
で余分なスペースを切り落とす、スペースを排除するIBAN = Trim(Ucase(Replace(IBAN, " ", "")))
:まだ、と上記のコードの最初の行を交換したり、単純な - あなたはすべての4つの文字がこれらを再び追加したい場合は、これを行うのは簡単です。表と裏を持ち、大文字に変換します。
正規表現は、[GB | IE](GBまたはIE)で構成されているため、ISO国コードの後に2文字の同じ形式を使用することができます。これらの2つの国のIBAN形式の場合と同様に、4桁の銀行コードと14桁の数字が含まれています。 | [DE]はドイツの場合は別の "or"を、その後に22桁の数字を続けます。別の国を追加するには、|で始まる$記号の前にテキストを置くだけです。
他の国のフォーマットを探すhere (ウィキペディア)
Option Compare Database
Option Explicit
' http://en.wikipedia.org/wiki/International_Bank_Account_Number
Private Const IbanCountryLengths As String = "AL28AD24AT20AZ28BH22BE16BA20BR29BG22CR21HR21CY28CZ24DK18DO28EE20FO18" & _
"FI18FR27GE22DE22GI23GR27GL18GT28HU28IS26IE22IL23IT27KZ20KW30LV21LB28" & _
"LI21LT20LU20MK19MT31MR27MU30MC27MD24ME22NL18NO15PK24PS29PL28PT25RO24" & _
"SM27SA24RS22SK24SI19ES24SE24CH21TN24TR26AE23GB22VG24QA29"
Private Function ValidateIbanCountryLength(CountryCode As String, IbanLength As Integer) As Boolean
Dim i As Integer
For i = 0 To Len(IbanCountryLengths)/4 - 1
If Mid(IbanCountryLengths, i * 4 + 1, 2) = CountryCode And _
CInt(Mid(IbanCountryLengths, i * 4 + 3, 2)) = IbanLength Then
ValidateIbanCountryLength = True
Exit Function
End If
Next i
ValidateIbanCountryLength = False
End Function
Private Function Mod97(Num As String) As Integer
Dim lngTemp As Long
Dim strTemp As String
Do While Val(Num) >= 97
If Len(Num) > 5 Then
strTemp = Left(Num, 5)
Num = Right(Num, Len(Num) - 5)
Else
strTemp = Num
Num = ""
End If
lngTemp = CLng(strTemp)
lngTemp = lngTemp Mod 97
strTemp = CStr(lngTemp)
Num = strTemp & Num
Loop
Mod97 = CInt(Num)
End Function
Public Function ValidateIban(IBAN As String) As Boolean
Dim strIban As String
Dim i As Integer
strIban = UCase(IBAN)
' Remove spaces
strIban = Replace(strIban, " ", "")
' Check if IBAN contains only uppercase characters and numbers
For i = 1 To Len(strIban)
If Not ((Asc(Mid(strIban, i, 1)) <= Asc("9") And Asc(Mid(strIban, i, 1)) >= Asc("0")) Or _
(Asc(Mid(strIban, i, 1)) <= Asc("Z") And Asc(Mid(strIban, i, 1)) >= Asc("A"))) Then
ValidateIban = False
Exit Function
End If
Next i
' Check if length of IBAN equals expected length for country
If Not ValidateIbanCountryLength(Left(strIban, 2), Len(strIban)) Then
ValidateIban = False
Exit Function
End If
' Rearrange
strIban = Right(strIban, Len(strIban) - 4) & Left(strIban, 4)
' Replace characters
For i = 0 To 25
strIban = Replace(strIban, Chr(i + Asc("A")), i + 10)
Next i
' Check remainder
ValidateIban = Mod97(strIban) = 1
End Function
ソース:あなたの助けをhttp://www.aswinvanwoudenberg.com/2013/07/18/vba-iban-validator/
_StackOverflow_へようこそ。そうする前に[回答を投稿する方法](http://stackoverflow.com/help/how-to-answer)を読んでみてください。なぜあなたがそのコードを投稿したのか、それが何をするのかを説明する少しの文脈を与えてください。 – Nacho
おかげ – user1080320
申し訳ありません - 否決 - 英国では動作しません。第二に、それは貧しい人の解決策です。完全な検証アルゴリズムについては、http://en.wikipedia.org/wiki/International_Bank_Account_Number#Algorithms – Juliusz
こちらをご覧ください。OPは特定の国を尋ねなかったし、異なるバリデーションアルゴリズムもあります。単にobjRegExp.Pattern = "[a-zA-Z] {2} [0-9] {2} [a-zA-Z0-9] {4}に変更するだけではなく、 } [0-9] {7}([a-zA-Z0-9]?){0,16} "'私は一般的なツールを与え、あなたのニーズにそれを適応させることができます。私はこれが役立つことを願っています – bonsvr