我有一個Excel電子表格兩列:指數與之匹配的條件(Excel或VBA)
A | B
---|---
DL | KO
D4 | KO
SO | PL
SS | PL
這只是一個例子,在我的實際電子表格中我使用更長的字符串。現在我想實現一些東西,這樣下一次我在列A中鍵入一個以S開頭的字符串時,它會自動填充PL給B,或者如果我鍵入一個以D開頭的字符串,KO會出現在B中。如果我鍵入一個字符串,比方說,AL,之前沒有發生過,默認字符串(比如「FILL IN」或者只是空字符串)被放置在B.
這個想法是,我將不得不手動輸入如果將來我輸入一個匹配AL的字符串(不是從A開始,但是完全匹配),它將足夠聰明以識別要填寫的內容B.
第一種方法:Excel
使用折射率匹配:
=INDEX($N:$N;MATCH(ReturnFormattedCredit($K4)&"*";$K:$K;0))
這是應該返回字符串在列N,由K.
在K4的元件匹配如在列中的其它元素的子串的輔助函數ReturnFormattedCredit是VBA功能我創造了自己:
Function ReturnFormattedCredit(c) As String
'Returns the formatted credit: For ZK credits this will be the first 3 alphabetical
'characters + the 4 following digits; for ZL credits this will be the first 2
'alphabetical characters + the following 6 digits; return the full string otherwise
If StrComp(Left(c, 2), "ZL") = 0 Then
ReturnFormattedCredit = Left(c, 8)
ElseIf StrComp(Left(c, 2), "ZK") = 0 Then
ReturnFormattedCredit = Left(c, 7)
Else
ReturnFormattedCredit = c
End If
End Function
我已經測試這個功能,它做什麼,它應該:從可能較大的字符串只提取必要的字符串。現在的問題是它只會查找與K中匹配的頂層元素,然後從該行中的N列返回相應的字符串。但是,如果第一個元素不知道字符串(這意味着:它也使用這個公式,並且在地面真值中手動輸入的內容在列中的其他位置),它將引起一個圓引用,因爲現在該單元格將嘗試查找回答,但會不斷嘗試對自己進行評估。
細胞可以檢查它們是否公式不使用.HasFormula,但是從上面的例子中我似乎無法以提取特定的細胞在INDEX的這種方式的第二個參數返回。
第二種方法:VBA
所以我太缺乏經驗,找出如何在Excel中做到這一點:嘗試在VBA。
Function GetProjectName(targetarray As Range, kredietarray As Range, krediet) As String
For Each el In kredietarray.Cells
targetEl = targetarray(el.Row - 1)
If StrComp(ReturnFormattedCredit(krediet) & "*", el) And Not targetEl.HasFormula Then
GetProjectName = "test"
' GetProjectName = targetEl
End If
Next
GetProjectName = "No project name found"
End Function
我通過列來提取,該列的字符串搜索結束,小區的字符串分別比:
=GetProjectName($N2:$N10;$K2:$K10;$K5)
這應該成爲:
=GetProjectName($N:$N;$K:$K;$K5)
對於K列中的每個單元格,我將嘗試將K5與該單元格相匹配。如果有一個匹配,則第二次檢查:在同一行,但N列不能是一個Excel公式的單元格。如果這是真的,那麼我找到了我想要的字符串,並且該字符串必須被返回。如果這是一個Excel公式,然後繼續尋找。
不幸的是,這要麼沒有找到任何東西(打印無效值)或只是打印0說完垃圾郵件調試。在獲知該函數經常無法正確執行之前,先打印此函數中的消息,但我無法弄清楚原因。