数据匹配脚本
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,简直法力无边。