在excel中的大量数据中,如何查找出相同的四个单元格内容,并引用后面的单元格内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在excel中的大量数据中,如何查找出相同的四个单元格内容,并引用后面的单元格内容相关的知识,希望对你有一定的参考价值。

在excel中的大量数据中,如何查找出相同的四个单元格内容,如:A2=4,B2=5,C2=
6,D2=7,要查找该工作表中H列到K列所有相邻的四个单元格内容都是4,5,6,7,然后E2引用L列中4,5,6,7后面的单元格内容?

VLOOKUP函数
在表格或数值数组的首列查找指定的数值,并由此返回表格或数组中该数值所在行中指定列处的数值。
这里所说的“数组”,可以理解为表格中的一个区域。数组的列序号:数组的“首列”,就是这个区域的第一纵列,此列右边依次为第2列、3列……。假定某数组区域为B2:E10,那么,B2:B10为第1列、C2:C10为第2列……。
语法:
VLOOKUP(查找值,区域,列序号,逻辑值)
“查找值”:为需要在数组第一列中查找的数值,它可以是数值、引用或文字符串。
“区域”:数组所在的区域,如“B2:E10”,也可以使用对区域或区域名称的引用,例如数据库或数据清单。
“列序号”:即希望区域(数组)中待返回的匹配值的列序号,为1时,返回第一列中的数值,为2时,返回第二列中的数值,以此类推;若列序号小于1,函数VLOOKUP 返回错误值 #VALUE!;如果大于区域的列数,函数VLOOKUP返回错误值 #REF!。
“逻辑值”:为TRUE或FALSE。它指明函数 VLOOKUP 返回时是精确匹配还是近似匹配。如果为 TRUE 或省略,则返回近似匹配值,也就是说,如果找不到精确匹配值,则返回小于“查找值”的最大数值;如果“逻辑值”为FALSE,函数 VLOOKUP 将返回精确匹配值。如果找不到,则返回错误值 #N/A。如果“查找值”为文本时,“逻辑值”一般应为 FALSE 。另外:
·如果“查找值”小于“区域”第一列中的最小数值,函数 VLOOKUP 返回错误值 #N/A。
·如果函数 VLOOKUP 找不到“查找值” 且“逻辑值”为 FALSE,函数 VLOOKUP 返回错误值 #N/A。
下面举例说明VLOOKUP函数的使用方法。
假设在Sheet1中存放小麦、水稻、玉米、花生等若干农产品的销售单价:
A B
1 农产品名称 单价
2 小麦 0.56
3 水稻 0.48
4 玉米 0.39
5 花生 0.51
…………………………………
100 大豆 0.45
Sheet2为销售清单,每次填写的清单内容不尽相同:要求在Sheet2中输入农产品名称、数量后,根据Sheet1的数据,自动生成单价和销售额。设下表为Sheet2:
A B C D
1 农产品名称 数量 单价 金额
2 水稻 1000 0.48 480
3 玉米 2000 0.39 780
…………………………………………………
在D2单元格里输入公式:
=C2*B2 ;
在C2单元格里输入公式:
=VLOOKUP(A2,Sheet1!A2:B100,2,FALSE) 。
如用语言来表述,就是:在Sheet1表A2:B100区域的第一列查找Sheet2表单元格A2的值,查到后,返回这一行第2列的值。
这样,当Sheet2表A2单元格里输入的名称改变后,C2里的单价就会自动跟着变化。当然,如Sheet1中的单价值发生变化,Sheet2中相应的数值也会跟着变化。
其他单元格的公式,可采用填充的办法写入。
VLOOKUP函数使用注意事项
说到VLOOKUP函数,相信大家都会使用,而且都使用得很熟练了。不过,有几个细节问题,大家在使用时还是留心一下的好。
一.VLOOKUP的语法
VLOOKUP函数的完整语法是这样的:
VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)
1.括号里有四个参数,是必需的。最后一个参数range_lookup是个逻辑值,我们常常输入一个0字,或者False;其实也可以输入一个1字,或者true。两者有什么区别呢?前者表示的是完整寻找,找不到就传回错误值#N/A;后者先是找一模一样的,找不到再去找很接近的值,还找不到也只好传回错误值#N/A。这对我们其实也没有什么实际意义,只是满足好奇而已,有兴趣的朋友可以去体验体验。
2.Lookup_value是一个很重要的参数,它可以是数值、文字字符串、或参照地址。我们常常用的是参照地址。用这个参数时,有两点要特别提醒:
A)参照地址的单元格格式类别与去搜寻的单元格格式的类别要一致,否则的话有时明明看到有资料,就是抓不过来。特别是参照地址的值是数字时,最为明显,若搜寻的单元格格式类别为文字,虽然看起来都是123,但是就是抓不出东西来的。
而且格式类别在未输入数据时就要先确定好,如果数据都输入进去了,发现格式不符,已为时已晚,若还想去抓,则需重新输入。
B)第二点提醒的,是使用时一个方便实用的小技巧,相信不少人早就知道了的。我们在使用参照地址时,有时需要将lookup_value的值固定在一个格子内,而又要使用下拉方式(或复制)将函数添加到新的单元格中去,这里就要用到“$”这个符号了,这是一个起固定作用的符号。比如说我始终想以D5格式来抓数据,则可以把D5弄成这样:$D$5,则不论你如何拉、复制,函数始终都会以D5的值来抓数据。
3.Table_array是搜寻的范围,col_index_num是范围内的栏数。Col_index_num 不能小于1,其实等于1也没有什么实际用的。如果出现一个这样的错误的值#REF!,则可能是col_index_num的值超过范围的总字段数。
二.VLOOKUP的错误值处理。
我们都知道,如果找不到数据,函数总会传回一个这样的错误值#N/A,这错误值其实也很有用的。比方说,如果我们想这样来作处理:如果找到的话,就传回相应的值,如果找不到的话,我就自动设定它的值等于0,那函数就可以写成这样:
=if(iserror(vlookup(1,2,3,0))=true,0,vlookup(1,2,3,0))
这句话的意思是这样的:如果VLOOKUP函数返回的值是个错误值的话(找不到数据),就等于0,否则,就等于VLOOKUP函数返回的值(即找到的相应的值)。
这里面又用了两个函数。
第一个是iserror函数。它的语法是iserror(value),即判断括号内的值是否为错误值,如果是,就等于true,不是,就等于false。
第二个是if函数,这也是一个常用的函数的,后面有机会再跟大家详细讲解。它的语法是if(条件判断式,结果1,结果2)。如果条件判断式是对的,就执行结果1,否则就执行结果2。举个例子:=if(D2=””,”空的”,”有东西”),意思是如D2这个格子里是空的值,就显示文字“空的”,否则,就显示“有东西”。(看起来简单吧?其实编程序,也就是这样子判断来判断去的。)
三.含有VLOOKUP函数的工作表档案的处理。
一般来说,含有VLOOKUP函数的工作表,如果又是在别的档案里抓取数据的话,档案往往是比较大的。尤其是当你使用的档案本身就很大的时候,那每次开启和存盘都是很受伤的事情。
有没有办法把文件压缩一下,加快开启和存盘的速度呢。这里提供一个小小的经验。
在工作表里,点击工具——选项——计算,把上面的更新远程参照和储存外部连结的勾去掉,再保存档案,则会加速不少,不信你可以试试。
下面详细的说一下它的原理。
1.含有VLOOKUP函数的工作表,每次在保存档案时,会同时保存一份其外部连结的档案。这样即使在单独打开这个工作表时,VLOOKUP函数一样可以抓取到数值。
2.在工作表打开时,微软会提示你,是否要更新远程参照。意思是说,你要不要连接最新的外部档案,好让你的VLOOKUP函数抓到最新的值。如果你有足够的耐心,不妨试试。
3.了解到这点,我们应该知道,每次单独打开含有VLOOKUP函数的工作表时,里面抓取外部档案的数值,只是上次我们存盘时保存的值。若要连结最新的值,必须要把外部档案同时打开。
VLOOKUP函数我所了解的,也只是这些,大家有什么好的经验或有什么疑问,欢迎大家提出,一起探讨。
参考技术A 首先选中你要查询的 列中或横中所有的内容, 在上方的 数据 选项中有一个筛选功能,里边输入关键字,然后前面函数选项里选中相关列如 等于 大于等等 就可以了。 参考技术B e2输入=lookup(1,0/((h:h=a2)*(i:i=b2)*(j:j=c2)*(k:k=d2)),l:l)
下拉复制公式本回答被提问者采纳

比较季度数据:在 Python(Pandas)中迭代以比较来自作为数据框导入的四个不同 excel 文件的多列

【中文标题】比较季度数据:在 Python(Pandas)中迭代以比较来自作为数据框导入的四个不同 excel 文件的多列【英文标题】:Comparing quarterly data: Iteration in Python(Pandas) to compare multiple columns from four different excel files imported as dataframe 【发布时间】:2021-08-29 01:33:34 【问题描述】:

尊敬的 *** 社区, 我有一个 excel 文件 "big_excel.xlsx",它由四列组成,即 "date_column""efficacy""组合”“测试组”。基本上,我已将这个 excel 每季度拆分一次“q1..q4”,这样我就可以将每列中的值与我从 4 个不同来源收到的 4 个不同的 excel 进行比较,这些 excel 应该是 100% 相同的.来自发件人的这个 excel 元素已经以这样的方式排序,它应该与每季度拆分的 excel 完全匹配。我的代码非常适合第一季度。为了比较,我使用了“.equals”,因为它可以有 nans。现在我必须对剩余的季度应用相同的代码概念q2..q4

import pandas as pd
from os.path import expanduser as ospath
import numpy as np


df = pd.read_excel(ospath('big_excel.xlsx'))

df.date_column = pd.to_datetime(df.date_column)

df['quarters'] = df.date_column.dt.quarter

q1 = df[df.quarters == 1]

q2 = df[df.quarters == 2].reset_index(drop=True)

q3 = df[df.quarters == 3].reset_index(drop=True)

q4 = df[df.quarters == 4].reset_index(drop=True)


test_excel_q1 = pd.read_excel(ospath('from_biontech.xlsx'))

test_excel_q2 = pd.read_excel(ospath('from_astrazeneca.xlsx'))

test_excel_q3 = pd.read_excel(ospath('from_sputnik.xlsx'))

test_excel_q4 = pd.read_excel(ospath('from_moderna.xlsx'))




q1['compare_date_column'] = np.where(q1[q1.columns[1]].equals(test_excel_q1[test_excel_q1.columns[1]]), 'True', 'False')  
q1['compare_efficacy'] = np.where(q1[q1.columns[2]].equals(test_excel_q1[test_excel_q1.columns[2]]), 'True', 'False')
q1['compare_composition'] = np.where(q1[q1.columns[3]].equals(test_excel_q1[test_excel_q1.columns[3]]), 'True', 'False')
q1['compare_testgroups'] = np.where(q1[q1.columns[4]].equals(test_excel_q1[test_excel_q1.columns[4]]), 'True', 'False')

为此,我显然可以在q1['compare_date_column']q1['compare_efficacy']q1['compare_composition']q1['compare_testgroups'] 中更改q1-> q2,q3,q4,然后复制和粘贴。但是,这是一个肮脏的解决方案,如果我将来增加列,我会很困惑。所以,我想知道我的问题是否可以通过迭代来解决。

我的想法:创建一个变量列表var_list = [q1,q2,q3,q4],其中对于 var_list 中的每个索引,它采用索引 i 并迭代替换它

q1['compare_date_column'] = np.where(q1[q1.columns[1]].equals(test_excel_q1[test_excel_q1.columns[1]]), 'True', 'False')  
q1['compare_efficacy'] = np.where(q1[q1.columns[2]].equals(test_excel_q1[test_excel_q1.columns[2]]), 'True', 'False')
q1['compare_composition'] = np.where(q1[q1.columns[3]].equals(test_excel_q1[test_excel_q1.columns[3]]), 'True', 'False')
q1['compare_testgroups'] = np.where(q1[q1.columns[4]].equals(test_excel_q1[test_excel_q1.columns[4]]), 'True', 'False')

我是否需要为此定义一个函数,如果是,任何人都可以帮助我,因为我还在学习 python。我将非常感谢您为我提供的任何意见。非常感谢您的时间和精力。

【问题讨论】:

也许您可以将appendpd.concat 组合在一起测试数据帧,然后将生成的测试数据帧与第一个df 进行比较,而不是为每个季度拆分df 感谢您的回复。是的,这也可能是一个解决方案。这只是一个例子。在我真实的公司场景中,我们将测试环境拆分为 4 个不同的实例。每次,来自大 excel 的数据都被分成四等份并输入到每个实例中。然后在每个实例(跳跃隧道、连接和​​实例)中使用脚本一一验证数据。很难从每个环境中提取此 excel 以进行连接或附加。对不起,如果我混淆了你。无论如何,我还想学习如何在我提供的给定场景中进行迭代。 【参考方案1】:

一种方法可能是定义一个函数,该函数采用四分之一数据帧和该季度的相应测试数据帧,并返回带有比较列的原始数据帧。 比如:

# you can also use this function to compare just one quarter
def compare_quarter(df_q:pd.DataFrame, df_test_q:pd.DataFrame):
    # this do exactly the same as your 4 comparing code lines
    df_q[[
        'compare_date_column',
        'compare_efficacy',
        'compare_composition',
        'compare_testgroups'
    ]] = \
        [np.where(df_q.iloc[:, i].equals(df_test_q.iloc[:, i]), 'True', 'False') for i in range(1,5)]

    return df_q

然后你只需在四分之一上迭代函数:

for q, t in zip([q1, q2, q3, q4], [test_excel_q1, test_excel_q2, test_excel_q3, test_excel_q4]):
    q = compare_quarter(q, t)

注意: 我注意到,当您比较每一列时,您是在比较整个季度和测试列。这意味着:如果只有一行不同,则整个 compare_column(所有行)将是 False。如果您想逐元素比较,请在如下函数中使用 eq 方法:

def compare_quartals(df_q:pd.DataFrame, df_test_q:pd.DataFrame):
    comp_cols = [
        'compare_date_column',
        'compare_efficacy',
        'compare_composition',
        'compare_testgroups'
    ]

    for i in range(1,5):
        df_q[comp_cols[i-1]] = df_q.iloc[:, i].eq(df_test_q.iloc[:, i])

    return df_q

【讨论】:

哇!非常感谢您的回答!对我帮助很大!

以上是关于在excel中的大量数据中,如何查找出相同的四个单元格内容,并引用后面的单元格内容的主要内容,如果未能解决你的问题,请参考以下文章

excel中查找两个表格相同数据的方法

excel如何在一堆数据中查找出需要的数据

如何在两个excel表中查找相同数据

找个可以把excel中的大量数据自动输入到单位办公系统里的,啥软件能做到批量导入?

试述在Excel中创建图表的四个步骤。(

比较季度数据:Python(Pandas) 中的迭代以比较来自作为数据框导入的四个不同 excel 文件的多列