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只能从左向右查找,而不能从右至左的反向查找.为此高手们设计了一个让无数新手迷惑的公式.今天优爱酷将彻底帮同学们解开这个迷团. [例]如下图所示要求根据 ...
随机推荐
- JavaFx TableView疑难详解
TableView是个十分有用的控件,适应性和灵活性非常强,可以对它进行任意的修改,比如界面样式.功能.本文将从一步步提问的方式讲解TableView 创建已知列的TableView 已知列的表格的创 ...
- js事件循环
之前有看过一些事件循环的博客,不过一阵子没看就发现自己忘光了,所以决定来自己写一个博客总结下! 首先,我们来解释下事件循环是个什么东西: 就我们所知,浏览器的js是单线程的,也就是说,在同一时刻,最多 ...
- 行内元素和块级元素的具体区别是什么?行内元素的padding和margin可设置吗?
块级元素(block)特性: 总是独占一行,表现为另起一行开始,而且其后的元素也必须另起一行显示; 宽度(width).高度(height).内边距(padding)和外边距(margin)都可控制; ...
- React Native 仿天猫物流跟踪时间轴
最近心血来潮开始学习ReactNative,正好最近有一个项目可能会用到时间轴,页面原型类似于天猫的物流跟踪,如下图 分析之后决定使用ListView来实现,左边的时间轴则使用Art来绘制. 分析左边 ...
- 【JavaScript学习】-JS内置对象2-Data对象
Date对象: Data对象可以储存任意一个日期,并且可以精确到毫秒数(1/1000 秒). 定义: //默认初始值定义: var dataName=new Date(); /*使用关键字new;Da ...
- Linux: Bash基本命令
切换目录 cd 查看当前目录 pwd 生成目录 mkdir 搜索文件 查看当前的文件 ls 删除文件但保留特定类型 rm !(**) 例如: rm !(.tex|*.eps)其中,.tex, .eps ...
- Java8 Lambda/Stream使用说明
一.Stream流1. 流的基本概念 1.1 什么是流?流是Java8引入的全新概念,它用来处理集合中的数据,暂且可以把它理解为一种高级集合.众所周知,集合操作非常麻烦,若要对集合进行筛选.投影,需要 ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十五)——SpringMVC注解开发(基础篇)
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7065294.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十四)--S ...
- 8.javaweb之session
session是客户端和服务端的一次会话 web的session是指用户在浏览某个网站时,从进入网站到关闭浏览器的这段时间,uyejiushi用户浏览这个网站所花费的时间. session是一个时间的 ...
- accp8.0转换教材第3章MySQL高级查询(一)理解与练习
一.单词部分 ①constraint约束②foreign外键③references参考 ④subquery子查询⑤inner内部的⑥join连接 二.预习部分 1.修改表SQL语句的关键字是什么 RE ...