Excel精英培训网

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

[已解决]再次求助老师和高手们两个查找和提取的代码

[复制链接]
发表于 2012-3-12 10:09 | 显示全部楼层 |阅读模式
求助老师和高手们两个查找和提取的代码,请帮助解决下,附件有详细说明,谢谢
Book1.rar (10.06 KB, 下载次数: 20)
 楼主| 发表于 2012-3-12 13:19 | 显示全部楼层
再说明下,查到了一个条件只显示对应的另一个就可以了,也有时是同时出现出个两个条件,只提取显示后面的条件对应的就可以了,
如 967
    123   中有两个条件16和27,16---27,27--38,只要显示38就可以了
回复

使用道具 举报

发表于 2012-3-12 14:42 | 显示全部楼层    本楼为最佳答案   
本帖最后由 bb75308973 于 2012-3-12 15:11 编辑

测试看看

  1. Sub 第一题()
  2. Dim n As Integer, i As Integer
  3. Columns("O").Clear
  4. n = Range("K65536").End(xlUp).Row
  5. For i = 4 To n
  6.     If Range("M" & i) = Range("K" & (i + 1)) Then '判断
  7.     Range("O" & (i + 1)) = Format(Range("L" & (i + 1)) & Range("M" & (i + 1)), "00") '符合条件输出结果
  8.     End If
  9. Next
  10. End Sub

复制代码
  1. Sub 第二题()
  2. Dim n As Integer, i As Integer, x As Integer
  3. Dim rg As Range, rg1 As Range
  4. Dim arr(0 To 9)
  5. Application.ScreenUpdating = False
  6. Columns("AB").Clear
  7. n = Range("X65536").End(xlUp).Row
  8. On Error Resume Next
  9. For i = 5 To n '从5开始这样就可以不用计算最后一行下面的那行没有数据的行
  10.     Set rg = Range(Range("X" & i), Range("Z" & (i - 1))) '设定下面要查找的范围
  11.     For x = 0 To 9 '查找0到9的每一个值,放到相应的数组里
  12.         Set rg1 = rg.Find(x, , , xlWhole)
  13.          If rg1 Is Nothing Then
  14.             arr(x) = "空" '如果查找不到的话默认会等于0,不利于判断,所以这里弄个标识"空"
  15.          Else
  16.             arr(x) = x
  17.         End If
  18.     Next
  19.    
  20.     If arr(0) <> "空" And arr(5) <> "空" Then Range("AB" & i) = 16
  21.     If arr(1) <> "空" And arr(6) <> "空" Then Range("AB" & i) = 27
  22.     If arr(2) <> "空" And arr(7) <> "空" Then Range("AB" & i) = 38
  23.     If arr(3) <> "空" And arr(8) <> "空" Then Range("AB" & i) = 49
  24.     If arr(4) <> "空" And arr(9) <> "空" Then
  25.         Range("AB" & i).NumberFormat = "00"
  26.         Range("AB" & i) = 5
  27.     End If
  28. Set rg = Nothing  '养成习惯将对像清空,不然会影响下一个循环的结果
  29. Set rg1 = Nothing
  30. Next
  31. On Error GoTo 0
  32. Application.ScreenUpdating = True
  33. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
东方智彩 + 3

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2012-3-12 17:16 | 显示全部楼层
谢谢高手解答,代码测试正确,只是第一题提取的数据能否再加个由小到大的排序,如63,排序显示为36
回复

使用道具 举报

发表于 2012-3-12 18:53 | 显示全部楼层
东方智彩 发表于 2012-3-12 17:16
谢谢高手解答,代码测试正确,只是第一题提取的数据能否再加个由小到大的排序,如63,排序显示为36

可以的
你装这条代码:Range("O" & (i + 1)) = Format(Range("L" & (i + 1)) & Range("M" & (i + 1)), "00")
改成:
if range("L"&(i+1))<range("M"&(i+1)) then
   range("O"& (i+1))=
Format(Range("L" & (i + 1)) & Range("M" & (i + 1)), "00")
else
   
range("O"& (i+1))= Format( Range("M" & (i + 1)) & Range("L" & (i + 1)) , "00")
end if

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-4 10:30 , Processed in 0.408429 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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