2011-12-04 4 views
3

IBANを検証する準備が整っているシートはありますか?私はIBANに入り、有効か無効かを示します。ExcelでIBANを検証する

私は追加での数を検索し

this oneが見つかりましたが、私はそれを開く方法を知りませんしています。 誰も助けることができますか?

答えて

0

簡単ですが、以下の機能を使用してください。

'' 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 
+0

おかげ – user1080320

+0

申し訳ありません - 否決 - 英国では動作しません。第二に、それは貧しい人の解決策です。完全な検証アルゴリズムについては、http://en.wikipedia.org/wiki/International_Bank_Account_Number#Algorithms – Juliusz

+0

こちらをご覧ください。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

3

これについてどのような、書式設定の問題が解決して運びましたが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 
0

私は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 (ウィキペディア)

0
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/

+1

_StackOverflow_へようこそ。そうする前に[回答を投稿する方法](http://stackoverflow.com/help/how-to-answer)を読んでみてください。なぜあなたがそのコードを投稿したのか、それが何をするのかを説明する少しの文脈を与えてください。 – Nacho

関連する問題