數據匹配腳本
1. excel里不同行與列根據部分的值找出部分匹配的
如果中介找出來,CTRL+F就可以,如果要是找出來相對應的後面的數據,則VLOOKUP就可以</FORM>警告: 此網站要求使用腳本,但是您的瀏覽器當前不允許使用。 了解如何啟用腳本。
VLOOKUP全部顯示全部隱藏 在表格數組的首列查找值,並由此返回表格數組當前行中其他列的值。 VLOOKUP 中的 V 表示垂直方向。當比較值位於需要查找的數據左邊的一列時,可以使用 VLOOKUP,而不用 HLOOKUP。語法 VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)Lookup_value 為需要在表格數組 (數組:用於建立可生成多個結果或可對在行和列中排列的一組參數進行運算的單個公式。數組區域共用一個公式;數組常量是用作參數的一組常量。)第一列中查找的數值。Lookup_value 可以為數值或引用。若 lookup_value 小於 table_array 第一列中的最小值,VLOOKUP 將返回錯誤值 #N/A。Table_array 為兩列或多列數據。請使用對區域的引用或區域名稱。table_array 第一列中的值是由 lookup_value 搜索的值。這些值可以是文本、數字或邏輯值。不區分大小寫。 Col_index_num 為 table_array 中待返回的匹配值的列序號。Col_index_num 為 1 時,返回 table_array 第一列中的數值;col_index_num 為 2,返回 table_array 第二列中的數值,以此類推。如果 col_index_num :小於 1,VLOOKUP 返回錯誤值 #VALUE!。 大於 table_array 的列數,VLOOKUP 返回錯誤值 #REF!。 Range_lookup 為邏輯值,指定希望 VLOOKUP 查找精確的匹配值還是近似匹配值:如果為 TRUE 或省略,則返回精確匹配值或近似匹配值。也就是說,如果找不到精確匹配值,則返回小於 lookup_value 的最大數值。 table_array 第一列中的值必須以升序排序;否則 VLOOKUP 可能無法返回正確的值。可以選擇「數據」菜單上的「排序」命令,再選擇「遞增」,將這些值按升序排序。有關詳細信息,請參閱默認排序次序。如果為 FALSE,VLOOKUP 將只尋找精確匹配值。在此情況下,table_array 第一列的值不需要排序。如果 table_array 第一列中有兩個或多個值與 lookup_value 匹配,則使用第一個找到的值。如果找不到精確匹配值,則返回錯誤值 #N/A。 說明 在 table_array 第一列中搜索文本值時,請確保 table_array 第一列中的數據沒有前導空格、尾隨空格、不一致的直引號(' 或 ")、彎引號(『或「)或非列印字元。在上述情況下,VLOOKUP 可能返回不正確或意外的值。有關用於清除文本數據的函數的詳細信息,請參閱文本和數據函數。 在搜索數字或日期值時,請確保 table_array 第一列中的數據未保存為文本值。否則,VLOOKUP 可能返回不正確或意外的值。有關詳細信息,請參閱將保存為文本的數字轉換為數字值。 如果 range_lookup 為 FALSE 且 lookup_value 為文本,則可以在 lookup_value 中使用通配符、問號 (?) 和星號 (*)。問號匹配任意單個字元;星號匹配任意字元序列。如果您要查找實際的問號或星號本身,請在該字元前鍵入波形符 (~)。 示例 1 如果將示例復制到一個空白工作表中,可能會更容易理解該示例。如何復制示例創建一個空白工作簿或工作表。 選擇「幫助」主題中的示例。 注釋 不要選擇行或列標題。從「幫助」中選擇示例 按 Ctrl+C。 在工作表中,選擇單元格 A1,然後按 Ctrl+V。 要在查看結果和查看返回結果的公式之間進行切換,請按 Ctrl+`(重音符),或在「公式」選項卡上的「公式審核」組中,單擊「顯示公式」按鈕。 本示例搜索大氣特徵表的「密度」列以查找「粘度」和「溫度」列中對應的值。(該值是在海平面 0 攝氏度或 1 個大氣壓下對空氣進行測定的結果。) 12345678910ABC密度粘度溫度 0.4573.555000.5253.254000.6162.933000.6752.752500.7462.572000.8352.381500.9462.171001.091.95501.291.710公式說明(結果)=VLOOKUP(1,A2:C10,2)使用近似匹配搜索 A 列中的值 1,在 A 列中找到小於等於 1 的最大值 0.946,然後返回同一行中 B 列的值。(2.17)=VLOOKUP(1,A2:C10,3,TRUE)使用近似匹配搜索 A 列中的值 1,在 A 列中找到小於等於 1 的最大值 0.946,然後返回同一行中 C 列的值。(100)=VLOOKUP(.7,A2:C10,3,FALSE)使用精確匹配在 A 列中搜索值 0.7。因為 A 列中沒有精確匹配的值,所以返回一個錯誤值。(#N/A)=VLOOKUP(0.1,A2:C10,2,TRUE)使用近似匹配在 A 列中搜索值 0.1。因為 0.1 小於 A 列中最小的值,所以返回一個錯誤值。(#N/A)=VLOOKUP(2,A2:C10,2,TRUE)使用近似匹配搜索 A 列中的值 2,在 A 列中找到小於等於 2 的最大值 1.29,然後返回同一行中 B 列的值。(1.71)示例 2 如果將示例復制到一個空白工作表中,可能會更容易理解該示例。如何復制示例創建一個空白工作簿或工作表。 選擇「幫助」主題中的示例。 注釋 不要選擇行或列標題。從「幫助」中選擇示例 按 Ctrl+C。 在工作表中,選擇單元格 A1,然後按 Ctrl+V。 要在查看結果和查看返回結果的公式之間進行切換,請按 Ctrl+`(重音符),或在「公式」選項卡上的「公式審核」組中,單擊「顯示公式」按鈕。 本示例搜索嬰幼兒用品表中的「貨品 ID」列,並在「成本」和「漲幅」列中查找與之匹配的值,以計算價格和測試條件。 123456ABCD貨品 ID 貨品 成本 漲幅 ST-340童車¥145.67 30% BI-567圍嘴¥3.56 40% DI-328尿布 ¥21.45 35% WI-989柔濕紙巾 ¥5.12 40% AS-469吸出器¥2.56 45% 公式說明(結果)= VLOOKUP("DI-328", A2:D6, 3, FALSE) * (1 + VLOOKUP("DI-328", A2:D6, 4, FALSE)) 漲幅加上成本,計算尿布的零售價。(¥28.96)= (VLOOKUP("WI-989", A2:D6, 3, FALSE) * (1 + VLOOKUP("WI-989", A2:D6, 4, FALSE))) * (1 - 20%)零售價減去指定折扣,計算柔濕紙巾的銷售價格。(¥5.73)= IF(VLOOKUP(A2, A2:D6, 3, FALSE) >= 20, "漲幅為 " & 100 * VLOOKUP(A2, A2:D6, 4, FALSE) &"%", "成本低於 ¥20.00")如果某一貨品的成本大於或等於 ¥20.00,則顯示字元串「漲幅為 nn%」;否則,顯示字元串「成本低於 ¥20.00」。(漲幅為 30%)= IF(VLOOKUP(A3, A2:D6, 3, FALSE) >= 20, "漲幅為: " & 100 * VLOOKUP(A3, A2:D6, 4, FALSE) &"%", "成本為 ¥" & VLOOKUP(A3, A2:D6, 3, FALSE)) 如果某一貨品的成本大於或等於 ¥20.00,則顯示字元串「漲幅為 nn%」;否則,顯示字元串「成本為 ¥n.nn」。(成本為 ¥3.56)示例 3 如果將示例復制到一個空白工作表中,可能會更容易理解該示例。如何復制示例創建一個空白工作簿或工作表。 選擇「幫助」主題中的示例。 注釋 不要選擇行或列標題。從「幫助」中選擇示例 按 Ctrl+C。 在工作表中,選擇單元格 A1,然後按 Ctrl+V。 要在查看結果和查看返回結果的公式之間進行切換,請按 Ctrl+`(重音符),或在「公式」選項卡上的「公式審核」組中,單擊「顯示公式」按鈕。 本示例搜索員工表的 ID 列並查找其他列中的匹配值,以計算年齡並測試錯誤條件。 1234567ABCDEID 姓氏 名字 職務出生日期 1李小明銷售代表 12/8/19682林彩瑜銷售部副總2/19/19523王志東銷售代表8/30/19634潘金銷售代表9/19/19585林丹銷售經理3/4/19556蘇術平銷售代表 7/2/1963公式說明(結果)=INT(YEARFRAC(DATE(2004,6,30), VLOOKUP(5,A2:E7,5, FALSE), 1))針對 2004 財政年度,查找 ID 為 5 的員工的年齡。使用 YEARFRAC 函數,以此財政年度的結束日期減去出生日期,然後使用 INT 函數將結果以整數形式顯示。(49) =IF(ISNA(VLOOKUP(5,A2:E7,2,FALSE)) = TRUE, "未找到員工", VLOOKUP(5,A2:E7,2,FALSE))如果有 ID 為 5 的員工,則顯示該員工的姓氏;否則,顯示消息「未找到員工」。(林) 當 VLOOKUP 函數返回錯誤值 #NA 時,ISNA 函數返回值 TRUE。=IF(ISNA(VLOOKUP(15,A3:E8,2,FALSE)) = TRUE, "未找到員工", VLOOKUP(15,A3:E8,2,FALSE))如果有 ID 為 15 的員工,則顯示該員工的姓氏;否則,顯示消息「未找到員工」。(未找到員工) 當 VLOOKUP 函數返回錯誤值 #NA 時,ISNA 函數返回值 TRUE。=VLOOKUP(4,A2:E7,3,FALSE) & " " & VLOOKUP(4,A2:E7,2,FALSE) & "是" & VLOOKUP(4,A2:E7,4,FALSE) & "。"對於 ID 為 4 的員工,將三個單元格的值連接為一個完整的句子。(潘金是銷售代表。) </p>
2. python導入excel數據
這次我們會介紹如何使用xlwings將Python和Excel兩大數據工具進行集成,更便捷地處理日常工作。
說起Excel,那絕對是數據處理領域王者般的存在,盡管已經誕生三十多年了,現在全球仍有7.5億忠實用戶,而作為網紅語言的Python,也僅僅只有700萬的開發人員。
Excel是全世界最流行的編程語言。對,你沒看錯,自從微軟引入了LAMBDA定義函數後,Excel已經可以實現編程語言的演算法,因此它是具備圖靈完備性的,和JavaScript、Java、Python一樣。
雖然Excel對小規模數據場景來說是剛需利器,但它面對大數據時就會有些力不從心。
我們知道一張Excel表最多能顯示1048576行和16384列,處理一張幾十萬行的表可能就會有些卡頓,當然你可以使用VBA進行數據處理,也可以使用Python來操作Excel。
這就是本文要講到的主題,Python的第三方庫-xlwings,它作為Python和Excel的交互工具,讓你可以輕松地通過VBA來調用Python腳本,實現復雜的數據分析。
比如說自動導入數據:
或者隨機匹配文本:
一、為什麼將Python與Excel VBA集成?
VBA作為Excel內置的宏語言,幾乎可以做任何事情,包括自動化、數據處理、分析建模等等,那為什麼要用Python來集成Excel VBA呢?主要有以下三點理由:
如果你對VBA不算精通,你可以直接使用Python編寫分析函數用於Excel運算,而無需使用VBA;Python相比VBA運行速度更快,且代碼編寫更簡潔靈活;Python中有眾多優秀的第三方庫,隨用隨取,可以節省大量代碼時間;
對於Python愛好者來說,pandas、numpy等數據科學庫用起來可能已經非常熟悉,如果能將它們用於Excel數據分析中,那將是如虎添翼。
二、為什麼使用xlwings?
Python中有很多庫可以操作Excel,像xlsxwriter、openpyxl、pandas、xlwings等。
但相比其他庫,xlwings性能綜合來看幾乎是最優秀的,而且xlwings可以實現通過Excel宏調用Python代碼。
圖片來自早起Python
xlwings的入門使用這里不多做講解,如果大家還不了解,先看看我之前寫的入門介紹: xlwings,讓excel飛起來!
安裝xlwings非常簡單,在命令行通過pip實現快速安裝:
pip install python
安裝好xlwings後,接下來需要安裝xlwings的 Excel集成插件,安裝之前需要關閉所有 Excel 應用,不然會報錯。
同樣在命令行輸入以下命令:
xlwings addin install
出現下面提示代表集成插件安裝成功。
xlwings和插件都安裝好後,這時候打開Excel,會發現工具欄出現一個xlwings的菜單框,代表xlwings插件安裝成功,它起到一個橋梁的作用,為VBA調用Python腳本牽線搭橋。
另外,如果你的菜單欄還沒有顯示「開發工具」,那需要把「開發工具」添加到功能區,因為我們要用到宏。
步驟很簡單:
1、在"文件"選項卡上,轉到"自定義選項"。
2、在「自定義功能區」和「主選項卡」下,選中「開發工具」復選框。
菜單欄顯示開發工具,就可以開始使用宏。
如果你還不知道什麼是宏,可以暫且把它理解成實現自動化及批量處理的工具。
到這一步,前期的准備工作就完成了,接下來就是實戰!
三、玩轉xlwings
要想在excel中調用python腳本,需要寫VBA程序來實現,但對於不懂VBA的小夥伴來說就是個麻煩事。
但xlwings解決了這個問題,不需要你寫VBA代碼就能直接在excel中調用python腳本,並將結果輸出到excel表中。
xlwings會幫助你創建.xlsm和.py兩個文件,在.py文件里寫python代碼,在.xlsm文件里點擊執行,就完成了excel與python的交互。
怎麼創建這兩個文件呢?非常簡單,直接在命令行輸入以下代碼即可:
xlwings quickstart ProjectName
這里的ProjectName可以自定義,是創建後文件的名字。
如果你想把文件創建到指定文件夾里,需要提前將命令行導航到指定目錄。
創建好後,在指定文件夾里會出現兩個文件,就是之前說的.xlsm和.py文件。
我們打開.xlsm文件,這是一個excel宏文件,xlwings已經提前幫你寫好了調用Python的VBA代碼。
按快捷鍵Alt F11,就能調出VBA編輯器。
裡面這串代碼主要執行兩個步驟:
1、在.xlsm文件相同位置查找相同名稱的.py文件
2、調用.py腳本里的main()函數
我們先來看一個簡單的例子,自動在excel表裡輸入
第一步: 我們把.py文件里的代碼改成以下形式。
import xlwings as xwimport pandas as pddef main(): wb = xw.Book.caller() values =
wb.sheets
.range('A1').value = [email protected] hello(name): return f"Hello {name}!"if __name__ == "__main__": xw.Book("PythonExcelTest.xlsm").set_mock_caller() main()
然後在.xlsm文件sheet1中創建一個按鈕,並設置默認的宏,變成一個觸發按鈕。
設置好觸發按鈕後,我們直接點擊它,就會發現第一行出現了
。
同樣的,我們可以把鳶尾花數據集自動導入到excel中,只需要在.py文件里改動代碼即可,代碼如下:
import xlwings as xwimport pandas as pddef main(): wb = xw.Book.caller() df = pd.read_csv(r"E:\test\PythonExcelTest\iris.csv") df
= df
df
wb.sheets
.range('A1').value = [email protected] hello(name): return f"Hello {name}!"if __name__ == "__main__": xw.Book("PythonExcelTest.xlsm").set_mock_caller() main()
好了,這就是在excel中調用Python腳本的全過程,你可以試試其他有趣的玩法,比如實現機器學習演算法、文本清洗、數據匹配、自動化報告等等。
Excel Python,簡直法力無邊。