Excel精英培训网

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

[已解决]VBA只用数组不用字典把B列不相同名字 提取到E2开始输出

[复制链接]
发表于 2017-7-8 14:48 | 显示全部楼层 |阅读模式
本帖最后由 laoau138 于 2017-7-8 21:50 编辑

VBA只用数组不用字典把B列不相同名字   提取到E2开始输出
最佳答案
2017-7-8 17:23
  1. Sub QE()
  2. Dim ar, br
  3. Dim i As Long, j As Long, k As Long, sum
  4. Dim rg As Range

  5. ar = Range("b1:c" & Cells(Rows.Count, 2).End(xlUp).Row)
  6. Set rg = Range("e1:g" & Cells(Rows.Count, 5).End(xlUp).Row)
  7. br = rg
  8. For i = 2 To UBound(br)
  9.     k = 1
  10.     sum = 0
  11.     For j = 2 To UBound(ar)
  12.         If br(i, 1) = ar(j, 1) Then
  13.             br(i, 2) = k
  14.             k = k + 1
  15.             sum = sum + ar(j, 2)
  16.         End If
  17.     Next j
  18.     br(i, 3) = sum
  19. Next i
  20. rg = br
  21. Set rg = Nothing
  22. End Sub
复制代码


大哥,順便把總和也一起補上
雖然晚了回復
VBA只用数组不用字典把B列不相同名字   提取到E2开始输出.png

VBA只用数组不用字典把B列不相同名字 提取到E2开始输出.rar

13.41 KB, 下载次数: 15

发表于 2017-7-8 15:00 | 显示全部楼层
本帖最后由 chart888 于 2017-7-8 15:04 编辑
  1. Sub 数组去重复()
  2. Dim arr(), brr
  3. Dim i&, j&, k&
  4. arr = Range("b2:B" & Cells(Rows.Count, 2).End(3).Row).Value
  5. ReDim brr(1 To UBound(arr), 1 To 1)
  6. k = 0
  7. For i = 1 To UBound(arr)
  8.     For j = 1 To k
  9.         If brr(j, 1) = arr(i, 1) Then Exit For
  10.     Next j
  11.     If j = k + 1 Then k = k + 1: brr(k, 1) = arr(i, 1)
  12. Next i
  13. Range("E2").Resize(UBound(brr), 1) = brr
  14. End Sub
复制代码

评分

参与人数 1 +9 收起 理由
laoau138 + 9

查看全部评分

回复

使用道具 举报

发表于 2017-7-8 15:01 | 显示全部楼层
我想给你改个名字叫讨厌字典,喜欢数组
回复

使用道具 举报

发表于 2017-7-8 17:23 | 显示全部楼层    本楼为最佳答案   
  1. Sub QE()
  2. Dim ar, br
  3. Dim i As Long, j As Long, k As Long, sum
  4. Dim rg As Range

  5. ar = Range("b1:c" & Cells(Rows.Count, 2).End(xlUp).Row)
  6. Set rg = Range("e1:g" & Cells(Rows.Count, 5).End(xlUp).Row)
  7. br = rg
  8. For i = 2 To UBound(br)
  9.     k = 1
  10.     sum = 0
  11.     For j = 2 To UBound(ar)
  12.         If br(i, 1) = ar(j, 1) Then
  13.             br(i, 2) = k
  14.             k = k + 1
  15.             sum = sum + ar(j, 2)
  16.         End If
  17.     Next j
  18.     br(i, 3) = sum
  19. Next i
  20. rg = br
  21. Set rg = Nothing
  22. End Sub
复制代码


大哥,順便把總和也一起補上
雖然晚了回復

评分

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

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-7-8 17:44 | 显示全部楼层
idnoidno 发表于 2017-7-8 17:23
大哥,順便把總和也一起補上
雖然晚了回復

你的代码似乎有问题,它会变化C列数据
回复

使用道具 举报

 楼主| 发表于 2017-7-8 17:45 | 显示全部楼层

你的代码似乎有问题,它会变化C列数据
回复

使用道具 举报

发表于 2017-7-8 18:51 | 显示全部楼层
晚點我回到家檢查一下,等我,哈哈
回复

使用道具 举报

发表于 2017-7-8 21:03 | 显示全部楼层
大哥,CODE沒有問題,是您的數據中,數字的部分有公式(C欄,公式是=RANDBETWEEN(300,500)),要把公式取消,變成數值形式,CODE執行就不會改變C欄的數字了

评分

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

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-7-8 21:49 | 显示全部楼层
idnoidno 发表于 2017-7-8 21:03
大哥,CODE沒有問題,是您的數據中,數字的部分有公式(C欄,公式是=RANDBETWEEN(300,500)),要把公式取消, ...

没有注意这个
回复

使用道具 举报

发表于 2017-7-8 21:59 | 显示全部楼层
哈哈,題目不是您寫的嗎?
請教,字典的部分,您有比較好的教學可以參考嗎?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 15:11 , Processed in 0.467903 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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