Excel精英培训网

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

[已解决]用VBA按要求进行填充

[复制链接]
发表于 2013-9-13 21:42 | 显示全部楼层 |阅读模式
本帖最后由 superle! 于 2013-9-13 23:33 编辑

表1的B列为源。取1进249进制最后60个值处在第几个。首先看1进制,B4319的值是1,D列可以看得出来,1的同值处在B4318的位置。就填充1.第2位是在F列可以看得出来。
如果没有同值的,标记“无”
做个命令按钮在表2黄色背景里填充。
最佳答案
2013-9-14 22:42
  1. Sub SolveTimes()
  2. Dim d, arr0, arr1(1 To 249, 1 To 60), i, j, k, l
  3. Set d = CreateObject("Scripting.Dictionary")
  4. arr0 = Sheets("Sheet1").Range("B2:B" & Sheets("Sheet1").Cells(65536, 2).End(xlUp).Row)
  5. For i = 1 To 249
  6.     k = 0
  7.     For j = UBound(arr0) To 1 Step -1
  8.             If k < 60 Then
  9.                 k = k + 1
  10.                 For l = j - i To 1 Step -i
  11.                     d(arr0(l, 1)) = 1
  12.                     If d.exists(arr0(j, 1)) Then
  13.                         arr1(i, k) = d.Count
  14.                         Exit For
  15.                     Else
  16.                         arr1(i, k) = "无"
  17.                     End If
  18.                 Next l
  19.                 d.RemoveAll
  20.             End If
  21.     Next j
  22. Next i
  23. Sheets("Sheet2").Cells(26, "CD").Resize(249, 60) = arr1
  24. End Sub
复制代码

vba代码竖着统计实现.rar

186.84 KB, 下载次数: 8

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-9-13 23:06 | 显示全部楼层
有点怀疑自己的汉语能力了,可是……可是只懂汉语呀{:2412:}

点评

看懂这个要求,需要超强的想象力啊^_^  发表于 2013-9-14 22:51
回复

使用道具 举报

发表于 2013-9-13 23:13 | 显示全部楼层
上清宫主 发表于 2013-9-13 23:06
有点怀疑自己的汉语能力了,可是……可是只懂汉语呀

我发觉他的问题都很绕  要不就很难
回复

使用道具 举报

 楼主| 发表于 2013-9-14 00:47 | 显示全部楼层
suye1010 发表于 2013-9-14 00:39
arr0 = Sheets("Sheet1").Range("B2:B"&Sheets("Sheet1").cells(65536,2).end(xlup).row)

...

太牛了~!

【已解决】vba代码竖着统计实现.rar

277.7 KB, 下载次数: 7

回复

使用道具 举报

 楼主| 发表于 2013-9-14 00:49 | 显示全部楼层
  1. Sub SolveTimes()
  2. Dim arr0, arr1(1 To 249, 1 To 60), i, j, k
  3. arr0 = Sheets("Sheet1").Range("B2:B" & Sheets("Sheet1").Cells(65536, 2).End(xlUp).Row)

  4. For i = 1 To 249
  5.     k = 0
  6.     For j = UBound(arr0) To 1 Step -1
  7.             If k < 60 Then
  8.                 k = k + 1
  9.                 m = 0
  10.                 For l = j - i To 1 Step -i
  11.                     m = m + 1
  12.                     If arr0(j, 1) = arr0(l, 1) Then
  13.                         arr1(i, k) = m
  14.                         Exit For
  15.                     Else
  16.                         arr1(i, k) = "无"
  17.                     End If
  18.                 Next l
  19.             End If
  20.     Next j
  21. Next i
  22. Sheets("Sheet2").Cells(26, "CD").Resize(249, 60) = arr1
  23. End Sub
复制代码
完美解决~!
回复

使用道具 举报

 楼主| 发表于 2013-9-14 08:00 | 显示全部楼层

用VBA按要求进行填充去重复统计

还是一样的排列。但是中间不管重复多少次,只算1次同值的。

vba代码竖着去重复统计实现.rar

191.63 KB, 下载次数: 8

回复

使用道具 举报

发表于 2013-9-14 08:41 | 显示全部楼层
看不太懂你的意思。
回复

使用道具 举报

发表于 2013-9-14 22:42 | 显示全部楼层    本楼为最佳答案   
  1. Sub SolveTimes()
  2. Dim d, arr0, arr1(1 To 249, 1 To 60), i, j, k, l
  3. Set d = CreateObject("Scripting.Dictionary")
  4. arr0 = Sheets("Sheet1").Range("B2:B" & Sheets("Sheet1").Cells(65536, 2).End(xlUp).Row)
  5. For i = 1 To 249
  6.     k = 0
  7.     For j = UBound(arr0) To 1 Step -1
  8.             If k < 60 Then
  9.                 k = k + 1
  10.                 For l = j - i To 1 Step -i
  11.                     d(arr0(l, 1)) = 1
  12.                     If d.exists(arr0(j, 1)) Then
  13.                         arr1(i, k) = d.Count
  14.                         Exit For
  15.                     Else
  16.                         arr1(i, k) = "无"
  17.                     End If
  18.                 Next l
  19.                 d.RemoveAll
  20.             End If
  21.     Next j
  22. Next i
  23. Sheets("Sheet2").Cells(26, "CD").Resize(249, 60) = arr1
  24. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-9-14 23:58 | 显示全部楼层
suye1010 发表于 2013-9-14 22:42

太感谢你了。宏代码已经用上了。非常棒~!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 17:35 , Processed in 0.311895 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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