Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
12
返回列表 发新帖
楼主: oplkj

[已解决]求助

[复制链接]
发表于 2012-10-20 10:23 | 显示全部楼层
本帖最后由 hwc2ycy 于 2012-10-20 10:31 编辑
  1. Sub 提取()
  2.     Dim arr, i, j, k As Long
  3.     Dim dic1 As Object, dic2   As Object, dic3 As Object, dic4 As Object
  4.     Set dic1 = CreateObject("scripting.dictionary")
  5.     Set dic2 = CreateObject("scripting.dictionary")
  6.     Set dic3 = CreateObject("scripting.dictionary")
  7.     Set dic4 = CreateObject("scripting.dictionary")
  8.     Dim arrRst() As String
  9.     arr = Range("f13").CurrentRegion
  10.     For i = 1 To UBound(arr)
  11.         For j = 1 To UBound(arr, 2)
  12.             Select Case j
  13.                 Case 1, 4, 7, 10, 13
  14.                     If arr(i, j) <> "" Then dic1(arr(i, j)) = dic1(arr(i, j)) + 1: dic4(arr(i, j)) = dic4(arr(i, j)) + 1
  15.                 Case 2, 5, 8, 11, 14
  16.                     If arr(i, j) <> "" Then dic2(arr(i, j)) = dic2(arr(i, j)) + 1: dic4(arr(i, j)) = dic4(arr(i, j)) + 1
  17.                 Case 3, 6, 9, 12, 15
  18.                     If arr(i, j) <> "" Then dic3(arr(i, j)) = dic3(arr(i, j)) + 1: dic4(arr(i, j)) = dic4(arr(i, j)) + 1
  19.             End Select
  20.         Next
  21.     Next
  22.     For Each i In dic1.keys
  23.         If Val(dic1(i)) > 1 And Val(dic1(i)) < 5 Then
  24.             k = k + 1
  25.             ReDim Preserve arrRst(1 To 1, 1 To k)
  26.             arrRst(1, k) = "'" & i
  27.         End If        End If
  28.     Next

  29.     For Each i In dic2.keys
  30.         If Val(dic2(i)) > 0 And Val(dic2(i)) < 3 Then
  31.             k = k + 1
  32.             ReDim Preserve arrRst(1 To 1, 1 To k)
  33.             arrRst(1, k) = "'" & i
  34.         End If
  35.     Next
  36. '
  37.     For Each i In dic3.keys
  38.         If Val(dic3(i)) > 0 And Val(dic3(i)) < 2 Then
  39.             k = k + 1
  40.             ReDim Preserve arrRst(1 To 1, 1 To k)
  41.             arrRst(1, k) = "'" & i
  42.         End If
  43.     Next
  44.     For Each i In dic4.keys
  45.         If Val(dic4(i)) > 3 And Val(dic4(i)) < 6 Then
  46.             k = k + 1
  47.             ReDim Preserve arrRst(1 To 1, 1 To k)
  48.             arrRst(1, k) = "'" & i
  49.         End If
  50.     Next
  51.     Range("a1").Resize(k) = Application.WorksheetFunction.Transpose(arrRst)
  52. End Sub
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

发表于 2012-10-20 10:24 | 显示全部楼层    本楼为最佳答案   
  1. Sub 提取2()
  2.     Dim arr, i, j, k As Long, l
  3.     Dim arrDic(1 To 4, 1 To 3), arrCon
  4.     For i = 1 To 4
  5.         Set arrDic(i, 1) = CreateObject("scripting.dictionary")
  6.     Next
  7.     arrDic(1, 2) = 1
  8.     arrDic(1, 3) = 5
  9.     arrDic(2, 2) = 0
  10.     arrDic(2, 3) = 3
  11.     arrDic(3, 2) = 0
  12.     arrDic(3, 3) = 2
  13.     arrDic(4, 2) = 3
  14.     arrDic(4, 3) = 6
  15.         Dim arrRst() As String
  16.     arr = Range("f13").CurrentRegion
  17.     For i = 1 To UBound(arr)
  18.         For j = 1 To UBound(arr, 2)
  19.             Select Case j
  20.                 Case 1, 4, 7, 10, 13
  21.                     If arr(i, j) <> "" Then arrDic(1, 1)(arr(i, j)) = arrDic(1, 1)(arr(i, j)) + 1: arrDic(4, 1)(arr(i, j)) = arrDic(4, 1)(arr(i, j)) + 1
  22.                 Case 2, 5, 8, 11, 14
  23.                     If arr(i, j) <> "" Then arrDic(2, 1)(arr(i, j)) = arrDic(2, 1)(arr(i, j)) + 1: arrDic(4, 1)(arr(i, j)) = arrDic(4, 1)(arr(i, j)) + 1
  24.                 Case 3, 6, 9, 12, 15
  25.                     If arr(i, j) <> "" Then arrDic(3, 1)(arr(i, j)) = arrDic(3, 1)(arr(i, j)) + 1: arrDic(4, 1)(arr(i, j)) = arrDic(4, 1)(arr(i, j)) + 1
  26.             End Select
  27.         Next
  28.     Next
  29.     For i = 1 To UBound(arrDic)
  30.         For Each j In arrDic(i, 1).keys
  31.             l = Val(arrDic(i, 1)(j))
  32.             If l > arrDic(i, 2) And l < arrDic(i, 3) Then
  33.                 k = k + 1
  34.                 ReDim Preserve arrRst(1 To 1, 1 To k)
  35.                 arrRst(1, k) = "'" & j
  36.             End If

  37.         Next
  38.     Next
  39.     Range("b1").Resize(k) = Application.WorksheetFunction.Transpose(arrRst)
  40. End Sub
复制代码
回复

使用道具 举报

发表于 2012-10-20 10:25 | 显示全部楼层
结果一共是328个数,楼主,你看对不。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 05:07 , Processed in 0.374641 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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