2016-09-11 15 views
3

私は財政のためにスプレッドシートを作成しています。私は取引のシートを持っていて、別のシートのルールセットを使って各取引が割り当てられているアカウントを自動化したいと考えています。例えばExcelのファジーマッチングルックアップ

私の取引のようになります。私のトランザクション名はから何かが含まれている場合 Backblaze 275 Countdown 300 Dropbox 275 Hot 300 Z 387 Pizzahut 300 Graham 184

1/04/16 -5.9 TEA'S ME acc_num 1/04/16 -8.5 CAFE 101 acc_num 1/04/16 -4.8 HOT WOK acc_num

私はルックアップテーブルにこのようなルールのセットを持ってできるようにしたいですルックアップテーブル、口座番号が検索され、acc_numが現在あるセルに配置されます。

私はこのようなvlookup機能を使用しようとしましたが、役に立たないです。私は上記の機能は、それが内の値を探していることをルックアップ値ではなく、テーブルの上にファジーマッチを行うことを実現しています。

私はこれを行う方法のいずれかの提案をいただければと思います

=IF(C2="", "", VLOOKUP("*"&C20&"*",'Chart Rules'!$A$2:$C$1001,2,0))

! 乾杯

+1

Excelには、ダウンロード可能なファジールックアップアドインがあります。https://www.microsoft.com/en-us/download/details.aspx?id=15011ここでは、http: /www.k2e.com/tech-update/tips/431-tip-fuzzy-lookups-in-excel –

+0

ああ、@ JohnColemanについて言及しなかった、私はOSX上にいるので、ファジールックアップのための互換性のあるダウンロードはない。 Googleスプレッドシートソリューションが見つかるかどうかがわかります。 –

+0

私は参照してください。タグ「follow-vba-mac」を追加する自由を取ったのは、そのタグのフォロワーが私の解決策よりも良いアイデアを持っていたからです。私は、Mac上でUDF(ユーザ定義関数)として動作するはずの純粋なvba関数を追加しましたが、あなたのために十分に曖昧ではないかもしれません。 –

答えて

0

ここでは、弱いファジールックアップを実装するVBAソリューションです。このコードs

Function FLOOKUP(pat As String, arr As Variant, ColNum As Long, Optional CaseSensitive = True) As Variant 
    'does a linear search of first column of array or range arr until it finds a 
    'string which is a fuzzy match for pat, returning the corresponding 
    'entry in column ColNum of arr. If no match is found NA is returned 

    Dim A As Variant, i As Long, s As String, p As String, pStar As String 

    p = IIf(CaseSensitive, pat, UCase(pat)) 
    pStar = "*" & p & "*" 

    If TypeName(arr) = "Range" Then 
     A = arr.Value 
    Else 
     A = arr 
    End If 

    For i = LBound(A) To UBound(A) 
     s = A(i, 1) 
     If Not CaseSensitive Then s = UCase(s) 
     If p Like "*" & s & "*" Or s Like pStar Then 
      FLOOKUP = A(i, ColNum) 
      Exit Function 
     End If 
    Next i 

    FLOOKUP = CVErr(xlErrNA) 
End Function 

と考えられている:多分それはそうでないかもしれないが(マックを持っている同僚が私のプログラムの一部を実行しようとしたとき、私は混合の経験を持っていた)、Mac上で動作しますファジー一致がtの場合は、s Like "*" & t & "*"またはt Like "*" & s & "*"のいずれかの場合にのみ一致します。つまり、sのいずれかがtの部分文字列であるか、またはその逆の場合です。

Mac用のExcel VBAがxlErrNAを知らない場合、実験ではこれが2042であることが示唆されています。一致するものが見つからない場合は、エラーコードではなくFalse。

検索の線形性は、スケールがあまり大きくない可能性があることを意味しますが、おそらくあなたのアプリケーションでは機能します。