這篇blog討論的事兒, 是關於使用Excel, 如何根據一個單元格的用戶輸入值, 自動設置另一個單元格的值.
這個需求最開始的動機是這樣的,
我們需要維護一個員工表, 員工便上面有員工所屬於的部門名, 以及這個部門的編碼這樣的信息,
對於員工所屬於的部門的名字, 我們可以使用數據有效性, 通過下拉列表的方式實現
但是, 員工部門的編碼, 一來不好記憶, 二來他們彼此還十分相似, 很容易混淆.
因此我們希望:
當用戶選擇了部門名稱之後, 可以在excel, 將部門的編碼自動補全.
類似的情形還有, 比如:
使用excel管理圖書的信息表,這個表裏面很可能有圖書名和ISBN,
我們希望當編輯圖書名字的單元格的時候, 可以自動補全ISBN,
對於類似的需求, 我們可以使用vba來做,
但是如果在excel裏面插入了vba, 用戶在打開excel的時候, 會彈出安全性提示(根據安全性級別的設置而定).
所以跟vba比較, 我們還是更傾向於公式.
感謝S同學, :-) 通過公式我們可以有一下兩種方法.
(在附件的excel文件中, 有這兩種方法的具體示例)
方法一: 利用INDEX和MATCH函數
寫出來的公式是形如下面這樣, 其中method_1_config是一個單獨的sheet, 用於配置連動的對應關係.
=IF(($B3<>""),INDEX(method_1_config!$A:$B,MATCH($B3,method_1_config!$A:$A,0),2),"")
方法二: 利用LOOKUP函數
寫出來的公式是形如下面這樣, 其中method_2_config是一個單獨的sheet, 用於配置連動的對應關係.
=IF(($D3<>""),LOOKUP($D3,method_2_config!A:A,method_2_config!B:B),"")
注意的問題
在我們的測試中, 我們發現第二種方法LOOKUP函數, 不支持中文,日本等全角字符, 有匹配錯誤的現象.
詳見附件.
而方法一則可以支持這些全角字符,
因此我們最終採用方法一實現.
另: 而且在附件中, 也測試了空格, -, 還有括號的情況.