ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4318|回复: 39

[求助] 票号段比对的问题,想了好久,求助大家,麻烦了

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-3-4 22:45 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

票号段比对-2003版本-论坛求助-正式.rar (118.05 KB, 下载次数: 15) 票号段比对的问题,想了好久没想出来,求助大家,麻烦了,详见附件

sheet1表中 A2:F169中的D2:E169在I2:N3829中的L2:M3829中比对,如果字轨相同,则把A2:F169中 有 而I2:N3829中 没有 的票号段写入sheet3     

举例:     
D3:E3 为以下内容     
00094001----00124000
     
L3:M6为以下内容     
00094001---- 00095953
00095955---- 00109501
00109503---- 00113745
00113747---- 00118858   
  
sheet3的结果则为     
起始号码    终止号码     份数   
00095954  00095954     1   
00109502  00109502     1   
00113746  00113746     1   
     
sheet1表中 A2:F169中的D2:E169在I2:N3829中的L2:M3829中比对,如果字轨相同,则把A2:F169中 没有 而I2:N3829 有 的票号段写入sheet4     

举例:     
D169:E169 为以下内容     
04373901---- 04373914
     
L2400:M2400为以下内容     
04373901---- 04373993
     
sheet4的结果则为     
     
起始号码      终止号码      份数   
04373915    04373993    79   

TA的精华主题

TA的得分主题

发表于 2014-3-4 22:54 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-3-4 23:58 | 显示全部楼层
本帖最后由 lxzxmpx 于 2014-3-5 00:01 编辑

搞得一团粥一样,可能只有你自己才能看得明白,
04373915    04373993    79   
这几个数据根本都找不到!
看是不是这样的
1.rar (136.95 KB, 下载次数: 6)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-3-5 00:26 | 显示全部楼层
如果我的答案对你有帮助,请赏我一朵鲜花。Sub 一没有()
Set d = CreateObject("Scripting.Dictionary")
Dim i, j, n, l, a, arr, arr1, brr1
Dim brr()
arr1 = Sheet1.Range("c2:e" & Cells(Rows.Count, 1).End(3).Row).Value
arr = Sheet1.Range("k2:m" & Cells(Rows.Count, "i").End(3).Row).Value
  For i = 1 To UBound(arr1)
    For j = 1 To UBound(arr)
      If arr1(i, 2) = arr(j, 2) Then
        n = n + 1
      End If
    Next j
      If n = 0 Then
        l = l + 1
          ReDim Preserve brr(1 To 1, 1 To l)
            brr(1, l) = arr1(i, 2)
      End If
    n = 0
  Next i
brr1 = WorksheetFunction.Transpose(brr)
  For i = 1 To UBound(brr1)
    a = brr1(i, 1)
      d(a) = d(a) + 1
  Next i
Sheet4.Range("a1:c1") = Array("起始号码", "终止号码", "份数")
Sheet4.Range("a2").Resize(d.Count) = WorksheetFunction.Transpose(d.Keys)
Sheet4.Range("b2").Resize(d.Count) = WorksheetFunction.Transpose(d.Keys)
Sheet4.Range("c2").Resize(d.Count) = WorksheetFunction.Transpose(d.Items)
d.RemoveAll
Set d = Nothing
End Sub

Sub 二没有()
Set d = CreateObject("Scripting.Dictionary")
Dim i, j, n, l, a, arr, arr1, brr1
Dim brr()
arr = Sheet1.Range("c2:e" & Cells(Rows.Count, 1).End(3).Row).Value
arr1 = Sheet1.Range("k2:m" & Cells(Rows.Count, "i").End(3).Row).Value
  For i = 1 To UBound(arr1)
    For j = 1 To UBound(arr)
      If arr1(i, 2) = arr(j, 2) Then
        n = n + 1
      End If
    Next j
      If n = 0 Then
        l = l + 1
          ReDim Preserve brr(1 To 1, 1 To l)
            brr(1, l) = arr1(i, 2)
      End If
    n = 0
  Next i
brr1 = WorksheetFunction.Transpose(brr)
  For i = 1 To UBound(brr1)
    a = brr1(i, 1)
      d(a) = d(a) + 1
  Next i
Sheet3.Range("a1:c1") = Array("起始号码", "终止号码", "份数")
Sheet3.Range("a2").Resize(d.Count) = WorksheetFunction.Transpose(d.Keys)
Sheet3.Range("b2").Resize(d.Count) = WorksheetFunction.Transpose(d.Keys)
Sheet3.Range("c2").Resize(d.Count) = WorksheetFunction.Transpose(d.Items)
d.RemoveAll
Set d = Nothing
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-3-5 00:28 | 显示全部楼层
如果我的答案对你有帮助,请赏我一朵鲜花。
上附件了,如果不是你的要求,请更好的模拟效果!

票号段比对-2003版本-论坛求助-正式1.rar

224.97 KB, 下载次数: 10

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-3-5 08:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub test()
  2. Dim arr1, arr2, h%, arr, b As Boolean
  3. arr1 = Sheets("sheet1").Range("b2").Resize(Sheets("sheet1").Range("b65536").End(xlUp).Row - 1, 4)
  4. arr2 = Sheets("sheet1").Range("j2").Resize(Sheets("sheet1").Range("j65536").End(xlUp).Row - 1, 4)
  5. h = 2
  6. With Sheets("sheet3")

  7.     .Range("a2:c65536").ClearContents
  8.     For i = 1 To UBound(arr1)
  9.         ReDim arr(1 To arr1(i, 2))
  10.         For j = 1 To UBound(arr2)
  11.             If arr2(j, 1) = arr1(i, 1) Then
  12.                 If arr2(j, 3) >= arr1(i, 3) And arr2(j, 3) <= arr1(i, 4) Then
  13.                     If arr2(j, 2) > arr1(i, 4) - arr2(j, 3) + 1 Then
  14.                         p = arr1(i, 4) - arr2(j, 3) + 1
  15.                     Else
  16.                         p = arr2(j, 2)
  17.                     End If
  18.                     For k = 1 To p
  19.                         arr(arr2(j, 3) - arr1(i, 3) + k) = 1
  20.                     Next k
  21.                 End If
  22.             End If
  23.         
  24.         Next j
  25.         b = False
  26.         For l = 1 To UBound(arr)
  27.             If arr(l) = 1 Then
  28.                 If b Then
  29.                     .Cells(h, 2) = Format(arr1(i, 3) + l - 2, "00000000")
  30.                     .Cells(h, 3) = .Cells(h, 2) - .Cells(h, 1) + 1
  31.                     h = h + 1
  32.                 End If
  33.                 b = False
  34.                
  35.             Else
  36.                
  37.                 If Not b Then
  38.                     .Cells(h, 1) = Format(arr1(i, 3) + l - 1, "00000000")
  39.                 End If
  40.                 b = True
  41.             End If
  42.         Next l
  43.         If b Then
  44.                 .Cells(h, 2) = Format(arr1(i, 3) + l - 2, "00000000")
  45.                 .Cells(h, 3) = .Cells(h, 2) - .Cells(h, 1) + 1
  46.                 h = h + 1
  47.         End If
  48.             
  49.     Next i
  50. End With
  51. End Sub
复制代码
调试了好几次,比较绕人。

票号段比对-2003版本-论坛求助-正式.rar

151.94 KB, 下载次数: 9

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-3-5 09:37 | 显示全部楼层
lxzxmpx 发表于 2014-3-4 23:58
搞得一团粥一样,可能只有你自己才能看得明白,
04373915    04373993    79   
这几个数据根本都找不到! ...

这几个数据正是我要得到的结果,简单的说就是得到票号的断号

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-3-5 10:00 | 显示全部楼层
谢谢楼上两位热心人,那么晚了还在帮我,谢谢!辛苦了!不过不是我想要的结果,可能是我没表达清楚。简单的说就是找出断号。
D2:E2  00010001---00040000是一个票号段,份数为30000份,先用 D2:E2在L2:M3829中比对,由于L2:M2的票号段也是 00010001---00040000,并且字轨都是201201,所以不用管了。
D3:E3  00094001---00124000,再用 D3:E3在L2:M3829中比对,由于L3:M3的票号段00094001---00095953,字轨都是201201,所以断号为00095954---00124000写入表sheet3,
由于L4:M4  为 00095955---00109501,所以已经写入sheet3的值应该更改为
00095954---00095954
00109502---00124000
如此循环判断,不知道现在说清楚没有?模拟结果在附件的sheet3和sheet4中,麻烦了



TA的精华主题

TA的得分主题

 楼主| 发表于 2014-3-5 10:29 | 显示全部楼层
lanyuu 发表于 2014-3-5 08:47
调试了好几次,比较绕人。

牛人,太感谢了,正是我要的结果!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-3-5 12:38 | 显示全部楼层
lanyuu 发表于 2014-3-5 08:47
调试了好几次,比较绕人。

不好意思,我先看了sheet3表中的前几条结果是对的,可能太高兴了!后来仔细查看所有程序得到的结果发现,有部分结果是错的。详见附件中的sheet3,sheet4表中的错误说明。麻烦您帮我再改改,万分感谢! 票号段比对-论坛求助-lanyuu .rar (201.12 KB, 下载次数: 8)

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-7 05:16 , Processed in 0.030484 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表