首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

excel中的一个数据对比提取有关问题,

2012-12-30 
excel中的一个数据对比提取问题,急大神们好,小弟有个问题想请教一下,有一张excel表,里面有2张sheet,一张是

excel中的一个数据对比提取问题,急
大神们好,
小弟有个问题想请教一下,

有一张excel表,里面有2张sheet,一张是另一张的更新版。
打个比方 表a为最新,数据肯定覆盖表b.
a表
姓名                手机号
张三             1384549xxxx
李四             1567897xxxx
王五             1354578xxxx

b表
姓名                手机号
李四             1567897xxxx
张三             1384549xxxx


我想提取两张表不同的数据,也就是王五   1354578xxxx,且顺序打乱的。不按照顺序,但是相同名字对应的手机是一样的。
数据很多,按列查找。
求vba公式啊,或者有什么可以解决的办法


[解决办法]
既然你发在VBA版中,就给你一段VBA代码吧:

' 在 VBA编辑器 的‘工具’→‘引用’中,引用:
'   Microsoft Scripting Runtime
Option Explicit

Private Sub NameDict()
      Dim objDict    As Object
      Dim objShtNew  As Worksheet
      Dim objShtOld  As Worksheet
      Dim i&, k&, strTemp$
   Set objDict = New Dictionary
   ' 假设你的‘最新’的名单表是 Sheet1,旧名单表是 Sheet1
   ' 具体情况,你自己处理
   Set objShtNew = Sheets("sheet1")
   Set objShtOld = Sheets("sheet2")
   ' 假设你的‘姓名’是A列,手机号是B列
   '   第一行是表头,姓名从第二行开始记录的
   k = WorksheetFunction.CountA(objShtOld.Range("A:A"))
   For i = 2 To k
      objDict.Add objShtOld.Cells(i, 1).Text, vbNullString
   Next
   k = WorksheetFunction.CountA(objShtNew.Range("A:A"))
   For i = 2 To k
      strTemp = objShtNew.Cells(i, 1).Text
      If Not objDict.Exists(strTemp) Then
         ' 输出‘新姓名’的行号、姓名、手机号
         Debug.Print i, strTemp, objShtNew.Cells(i, 2).Text
      End If
   Next
   objDict.RemoveAll
   Set objDict = Nothing
   Set objShtNew = Nothing
   Set objShtOld = Nothing
End Sub


[解决办法]
引用:
' 输出‘新姓名’的行号、姓名、手机号
         Debug.Print i, strTemp, objShtNew.Cells(i, 2).Text

是输出在哪的呀?


输出到vba编辑环境的立即窗口里。
[解决办法]
把Debug.Print i, strTemp, objShtNew.Cells(i, 2).Text 语句换成:
Sheets("sheet3").cell(i,1)=i
Sheets("sheet3").cell(i,2)=strTemp
Sheets("sheet3").cell(i,3)=objShtNew.Cells(i, 2)

就行了

热点排行