Excel无法vlookup事件
最近由于工作关系,深入的用了一阵excel,并遭遇和处理了一系列关于excel数据的问题。
其中最有趣的一个,就是一个无法vlookup的问题。
问题记录如下:
excel中直接打开csv文件,看到类似如下的数据表:
SN,DATA
A ,Data1
12345789012 ,Data2
C ,Data3
在另外一个数据表中,需要对SN号做关联操作。于是使用常用的vlookup进行关联,但是发现全部数据都只得到N/A:
SN 取值
A #N/A
12345789012 #N/A
C #N/A
在两个表里使用查询功能查询相应的sn,都可以查到。
于是使用sublime查看csv文件本身,发现这个csv中的sn号,后面统一附加了一个tab字符(为清晰展现,使用16进制显示):
00000000: 534e 2c44 4154 410d 0a41 092c 4461 7461 SN,DATA..A.,Data
00000010: 310d 0a31 3233 3435 3738 3930 3132 092c 1..12345789012.,
00000020: 4461 7461 340d 0a43 092c 4461 7461 330d Data4..C.,Data3.
00000030: 0a
csv文件来自于一个软件系统,咨询研发,得到的答复是,sn里有一些号是纯数字,如果不加tab,会被excel显示为科学计数法,引发更多问题。
使用正则表达式移除掉全部tab之后,用excel直接打开,发现确实部分sn被显示为科学计数法,且无法恢复原始值。
经研究,发现excel对于此种情况,其实有处理方法,就是使用csv数据导入功能而不要直接打开csv,经实验,使用文本数据导入功能,并设定sn字段为文本,即可解决科学计数法问题,并且可以正确的vlookup。
由于太忙,研发团队拒绝对系统进行任何修改。同时,各种表格的数据来源非常复杂,大家基本都已经在基于这些excel数据在工作了。
因此,写了一段vba代码针对无法vlookup的excel文档的sn做了处理,解决了这些文档无法vlookup的问题:
Public Sub 去掉SN号两端的空格和TAB()
' TODO:首先把字段设置成文本格式
Dim Rng1 As Range
For Each Rng1 In Range("A2:A9999")
' 处理科学计数法问题
On Error Resume Next
If CStr(Val(Rng1.Value)) = Rng1.Value Then
Rng1.Value = "'" & Rng1.Value
End If
Rng1.Value = Trim(Rng1.Value)
Rng1.Value = Replace(Rng1.Value, vbTab, "")
DoEvents
Next
End Sub
使用的时候,需要修改range的范围,和sn的实际范围对应。
没有使用UsedRange.Rows.count之类的方法,是因为期间发现了很多人的很多表格,数据可能并不多,但rows.count都是一个巨大的数字。(一般这些数据也都是来自于某软件系统导出的数据,看来非常不靠谱),解决这个问题是另外一个话题了,暂且不表。
有一个花絮是,曾经在一个同事的表格,发现了部分匹配成XX的值,实际是因为sn匹配失败,导致得到了其他结果。我深深的怀疑,在此前的工作中,有多少数据是刚好经过了这个坑被计算出来的,这又引发了哪些连锁的数据错误,而这些数据如果刚好被用于计算公司的成本收入或者其他重要的用途,导致的判断错误最终会引发多大的后果。
Excel无法vlookup事件的更多相关文章
- 【图文】Excel中vlookup函数的使用方法
今天统计数据,用到了Excel中vlookup函数,第一次使用当然少不了百度,经过反复研究后,算是解决了问题,现整理成文档. 一.实现效果 Sheet1 Sheet2 注:上图中sheet1商品条 ...
- Excel函数vlookup
最近整理业务文档,需要用到excel,按照教程,操作了20来分钟,却得不到结果. 看了视频,才知道,vlookup仅限关联选中区域的第一列关联,把要关联的行拷贝到第一列,解决. https://www ...
- Excel 中 VLOOKUP() 函数小结
应用场景: 数据仓库上游源系统的数据库表变更,现在需要拆分一部分数据出来,单独放到一张新表中.假设原表为A,新表为B,B表和A表结构大部分一样,只有字段的前缀不同,那么我们如何找出到底有哪些字段不同呢 ...
- excel之VLOOKUP函数的使用
VLOOKUP 函数是excel中比较常用的一个函数.该函数具有有四个参数: 1.查找值:指本表中的值,需要根据本表中的某一值在本表或其他表中查找我们想要获取的值就称为查找值. 2.数据表:指查找的范 ...
- Excel 函数VLOOKUP初学者使用指南
1.基础说明 =VLOOKUP(lookup_value,tabble_array,col_index_num,(range_lookup)) lookup_value:用什么查找 tabble_ar ...
- Excel——使用VLOOKUP函数关联跨工作薄数据
实验环境 有两个工作簿,一个是<花名册>,另一个是<入离职表>,<花名册>上有所有员工的详细信息,包括员工的姓名.部门.出生日期等,<入离职表>上有离职 ...
- Excel的vlookup函数的用法
VLOOKUP函数用于搜索指定区域内首列满足条件的元素,确定待检测单元格在区域中的行序号,再进一步返回选定单元格的值. 为了讲解的需要,特制作如图所示的表格.当然,大家也可以根据自己的实际情况设计合适 ...
- Excel用vlookup方法匹配数据
(1) VLOOKUP是一个查找函数,给定一个查找的目标,它就能从指定的查找区域中查找返回想要查找到的值.它的基本语法为: VLOOKUP(查找目标,查找范围,返回值的列数,精确OR模糊查找) ...
- 【Office Excel】vlookup函数的反向查找实例教程,不只是正向查找,还可以反向查找,实例讲解
VLOOKUP 反向查询 众所周知,vlookup只能从左向右查找,而不能从右至左的反向查找.为此高手们设计了一个让无数新手迷惑的公式.今天优爱酷将彻底帮同学们解开这个迷团. [例]如下图所示要求根据 ...
随机推荐
- a标签实现文件下载
如果想通过纯前端技术实现文件下载,直接把a标签的href属性设置为文件路径即可,如下: <a href="https://cdn.shopify.com/s/files/1/1545/ ...
- unity3D:游戏分解之角色移动和相机跟随
游戏中,我们经常会有这样的操作,点击场景中某个位置,角色自动移动到那个位置,同时角色一直是朝向那个位置移动的,而且相机也会一直跟着角色移动.有些游戏,鼠标滑动屏幕,相机就会围绕角色旋转. ...
- redis五种数据类型
string Redis的字符串和其他编程语言或者其他键值存储提供的字符串非常相似. 命令 行为 GET 获取存储在给定键中的值 SET 设置存储在给定键中的值 DEL 删除存储在给定中的值(这个命令 ...
- 使用KeePass愉快的来管理你的密码
不要老是使用同一个密码 这话说了好多次了,以前的CSDN被拖库,或者是好多xx照门,都告诉我们不宜使用用一个密码. 现在我各个网站的密码都不一样,而且复杂的我都记不住,例如,我的前Google账户密码 ...
- 信号处理——卷积(convolution)的实现
作者:桂. 时间:2017-03-07 22:33:37 链接:http://www.cnblogs.com/xingshansi/p/6517301.html 前言 信号时域.频域对应关系,及其D ...
- go 基础语法
时间有限,简单记一些常用的,麻烦的不写了 定义变量:可以连续定义,也可以单个定义 var a int int类型 var a="ds" 默认string类型 a:=&qu ...
- java hascode
有部分代码如下: Cat cat=new Cat("Kitty",2);system.out.println(cat):问题:输出什么? 调用并执行toString()方法,两种情 ...
- 【转载】Static 关键字的作用
原始日期:2016-07-16 17:53 一 普通的static关键字 1. 静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量.我们先举一个静态全局变 ...
- Lambda(Linq)
在谈到lambda表达式之前,首先要说一下委托,在下一章会详细介绍委托,在这里就是简单说明一下. 委托的关键字段delegate,声明委托 public delegate void NoReturnN ...
- 消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe
消息队列NetMQ 原理分析4-Socket.Session.Option和Pipe 前言 介绍 目的 Socket 接口实现 内部结构 Session Option Pipe YPipe Msg Y ...