Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3465|回复: 6

[已解决]查找倒数第二最大值和限定条件最小值

[复制链接]
发表于 2017-1-23 23:05 | 显示全部楼层 |阅读模式
各位大侠,有问题请教大家,我想用VBA实现查找倒数第二最大值和限定条件最小值,详细数据见附件,谢谢!
最佳答案
2017-1-24 09:55
这题目口味有点重。。。。。。
  1. Sub tt()
  2.     Set d = CreateObject("scripting.dictionary")
  3.     Set d1 = CreateObject("scripting.dictionary")
  4.     brr = Sheets("配种记录").[a1].CurrentRegion
  5.     For i = 3 To UBound(brr)
  6.         d(brr(i, 1)) = d(brr(i, 1)) & "," & brr(i, 2)
  7.     Next
  8.    
  9.     brr = Sheets("产犊记录").[a1].CurrentRegion
  10.     For i = UBound(brr) To 3 Step -1
  11.         d1(brr(i, 1)) = d1(brr(i, 1)) & "," & brr(i, 3)
  12.     Next
  13.    
  14.     arr = Range("a7:h18")
  15.     For i = 2 To UBound(arr)
  16.         x = arr(i, 2)
  17.         If d.exists(x) Then   '配种:大于指定日期的最小日期
  18.             xrr = Split(d(x), ",")
  19.             For k = 1 To UBound(xrr)
  20.                 If CDate(xrr(k)) > CDate(arr(i, 6)) Then
  21.                     arr(i, 5) = xrr(k)
  22.                     Exit For
  23.                 End If
  24.             Next
  25.         End If
  26.         
  27.         If d1.exists(x) Then   '产犊:倒数第二
  28.             xrr = Split(d1(x), ",")
  29.             If UBound(xrr) >= 2 Then arr(i, 8) = xrr(2)
  30.         End If
  31.     Next
  32.     [e7].Resize(UBound(arr)) = Application.Index(arr, , 5)
  33.     [h7].Resize(UBound(arr)) = Application.Index(arr, , 8)
  34. End Sub
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2017-1-23 23:07 | 显示全部楼层
这是附件

查找到数第二日期和限条件最小值.zip

54.94 KB, 下载次数: 10

回复

使用道具 举报

发表于 2017-1-24 09:55 | 显示全部楼层    本楼为最佳答案   
这题目口味有点重。。。。。。
  1. Sub tt()
  2.     Set d = CreateObject("scripting.dictionary")
  3.     Set d1 = CreateObject("scripting.dictionary")
  4.     brr = Sheets("配种记录").[a1].CurrentRegion
  5.     For i = 3 To UBound(brr)
  6.         d(brr(i, 1)) = d(brr(i, 1)) & "," & brr(i, 2)
  7.     Next
  8.    
  9.     brr = Sheets("产犊记录").[a1].CurrentRegion
  10.     For i = UBound(brr) To 3 Step -1
  11.         d1(brr(i, 1)) = d1(brr(i, 1)) & "," & brr(i, 3)
  12.     Next
  13.    
  14.     arr = Range("a7:h18")
  15.     For i = 2 To UBound(arr)
  16.         x = arr(i, 2)
  17.         If d.exists(x) Then   '配种:大于指定日期的最小日期
  18.             xrr = Split(d(x), ",")
  19.             For k = 1 To UBound(xrr)
  20.                 If CDate(xrr(k)) > CDate(arr(i, 6)) Then
  21.                     arr(i, 5) = xrr(k)
  22.                     Exit For
  23.                 End If
  24.             Next
  25.         End If
  26.         
  27.         If d1.exists(x) Then   '产犊:倒数第二
  28.             xrr = Split(d1(x), ",")
  29.             If UBound(xrr) >= 2 Then arr(i, 8) = xrr(2)
  30.         End If
  31.     Next
  32.     [e7].Resize(UBound(arr)) = Application.Index(arr, , 5)
  33.     [h7].Resize(UBound(arr)) = Application.Index(arr, , 8)
  34. End Sub
复制代码

查找到数第二日期和限条件最小值.rar

52 KB, 下载次数: 9

回复

使用道具 举报

 楼主| 发表于 2017-1-24 11:17 | 显示全部楼层
问题完美解决,谢谢了
回复

使用道具 举报

发表于 2017-1-25 17:37 | 显示全部楼层
grf1973 发表于 2017-1-24 09:55
这题目口味有点重。。。。。。

VBA登分 花名册汇总


http://www.excelpx.com/thread-427374-1-1.html

回复

使用道具 举报

发表于 2017-1-28 10:46 | 显示全部楼层
大于指导日期的配种日期的次数:
  1. Sub tt()
  2.     Set d = CreateObject("scripting.dictionary")
  3.     Set d1 = CreateObject("scripting.dictionary")
  4.     brr = Sheets("配种记录").[a1].CurrentRegion
  5.     For i = 3 To UBound(brr)
  6.         d(brr(i, 1)) = d(brr(i, 1)) & "," & brr(i, 2)
  7.     Next
  8.    
  9.     brr = Sheets("产犊记录").[a1].CurrentRegion
  10.     For i = UBound(brr) To 3 Step -1
  11.         d1(brr(i, 1)) = d1(brr(i, 1)) & "," & brr(i, 3)
  12.     Next
  13.    
  14.     arr = Range("a7:h18")
  15.     For i = 2 To UBound(arr)
  16.         x = arr(i, 2)
  17.         If d.exists(x) Then   '配种:大于指定日期的最小日期
  18.             xrr = Split(d(x), ",")
  19.             For k = 1 To UBound(xrr)
  20.                 If CDate(xrr(k)) > CDate(arr(i, 6)) Then
  21.                     arr(i, 5) = xrr(k)
  22.                     s = s + UBound(xrr) - k + 1 '大于指定日期的配种日期的次数
  23.                     Exit For
  24.                 End If
  25.             Next
  26.         End If
  27.         
  28.         
  29.         If d1.exists(x) Then   '产犊:倒数第二
  30.             xrr = Split(d1(x), ",")
  31.             If UBound(xrr) >= 2 Then arr(i, 8) = xrr(2)
  32.         End If
  33.     Next
  34.     [e7].Resize(UBound(arr)) = Application.Index(arr, , 5)
  35.     [h7].Resize(UBound(arr)) = Application.Index(arr, , 8)
  36.     MsgBox "大于指定日期的配种日期的次数为:" & s & "次"
  37. End Sub
复制代码

查找到数第二日期和限条件最小值.rar

52.26 KB, 下载次数: 11

评分

参与人数 1 +6 收起 理由
laoau138 + 6 来学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-1-28 21:09 | 显示全部楼层
大侠,新年快乐,大过年的还给解答真是感激不尽!
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 14:38 , Processed in 0.398336 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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