Excel精英培训网

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

[已解决]根据条件内容计算

[复制链接]
发表于 2014-10-18 19:49 | 显示全部楼层 |阅读模式
本帖最后由 ms967967 于 2014-10-19 08:18 编辑

C列的内容分别除以数据里C:H的值,能整除的将相应的除数放在E列
附件在二楼
最佳答案
2014-10-18 20:21
  1. Sub Macro1()
  2. On Error Resume Next
  3. Dim arr, brr, crr, d
  4. Set d = CreateObject("scripting.dictionary")
  5. arr = Sheet1.Range("a1").CurrentRegion
  6. brr = Sheet2.Range("a1").CurrentRegion
  7. ReDim crr(1 To UBound(arr) - 1, 1 To 1)
  8. For i = 2 To UBound(brr)
  9.     d(brr(i, 1)) = i
  10. Next
  11. For i = 2 To UBound(arr)
  12.     n = d(arr(i, 1)): p = ""
  13.     For j = 3 To UBound(brr, 2)
  14.         If brr(n, j) <> "" And arr(i, 3) / brr(n, j) = arr(i, 3) \ brr(n, j) Then p = p & "," & brr(n, j)
  15.     Next
  16.     crr(i - 1, 1) = Mid(p, 2)
  17. Next
  18. Sheet1.Range("e2").Resize(UBound(crr)) = crr
  19. End Sub
复制代码
 楼主| 发表于 2014-10-18 19:49 | 显示全部楼层
按条件计算.rar (8.17 KB, 下载次数: 8)
回复

使用道具 举报

发表于 2014-10-18 20:11 | 显示全部楼层
你模拟的结果有问题,请看附件,1在任何情况下都不应该被遗漏

按条件计算.rar

23.81 KB, 下载次数: 11

回复

使用道具 举报

发表于 2014-10-18 20:13 | 显示全部楼层
另外,求助宏的话,起码应该上传个xlsm的文件,方便答疑的人
  1. Sub a()
  2. Dim i&, j&, arr, brr, m&, n&, crr(), s&, dic As Object
  3. Set dic = CreateObject("scripting.dictionary")
  4. arr = Sheets("数据").Range("c2:h" & Sheets("数据").Cells(Rows.Count, 1).End(3).Row)
  5. brr = Sheets("内容").Range("c2:c" & Sheets("内容").Cells(Rows.Count, 1).End(3).Row)
  6. For i = 1 To UBound(brr)
  7.     n = 0
  8.     For j = 1 To UBound(arr)
  9.         For m = 1 To UBound(arr, 2)
  10.             If arr(j, m) <> "" Then
  11.                If brr(i, 1) Mod arr(j, m) = 0 Then
  12.                   n = n + 1
  13.                   ReDim Preserve crr(1 To n)
  14.                   crr(n) = arr(j, m)
  15.                End If
  16.             End If
  17.         Next
  18.     Next
  19.     For s = 1 To UBound(crr)
  20.         dic(crr(s)) = ""
  21.     Next
  22.    
  23.     Sheets("内容").Cells(i + 1, 5) = Join(dic.keys, ",")
  24.    
  25.    
  26.     dic.RemoveAll
  27. Next
  28. Set dic = Nothing
  29. End Sub
复制代码
回复

使用道具 举报

发表于 2014-10-18 20:21 | 显示全部楼层    本楼为最佳答案   
  1. Sub Macro1()
  2. On Error Resume Next
  3. Dim arr, brr, crr, d
  4. Set d = CreateObject("scripting.dictionary")
  5. arr = Sheet1.Range("a1").CurrentRegion
  6. brr = Sheet2.Range("a1").CurrentRegion
  7. ReDim crr(1 To UBound(arr) - 1, 1 To 1)
  8. For i = 2 To UBound(brr)
  9.     d(brr(i, 1)) = i
  10. Next
  11. For i = 2 To UBound(arr)
  12.     n = d(arr(i, 1)): p = ""
  13.     For j = 3 To UBound(brr, 2)
  14.         If brr(n, j) <> "" And arr(i, 3) / brr(n, j) = arr(i, 3) \ brr(n, j) Then p = p & "," & brr(n, j)
  15.     Next
  16.     crr(i - 1, 1) = Mid(p, 2)
  17. Next
  18. Sheet1.Range("e2").Resize(UBound(crr)) = crr
  19. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
ms967967 + 3 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-10-19 08:18 | 显示全部楼层
这儿有肥猫 发表于 2014-10-18 20:13
另外,求助宏的话,起码应该上传个xlsm的文件,方便答疑的人

感谢指点,下次会注意文件格式,此题5楼答案是我的要求
回复

使用道具 举报

发表于 2014-10-19 10:51 | 显示全部楼层
最佳已出来了,那咱看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 00:58 , Processed in 0.539847 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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