Excel精英培训网

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

[已解决]關于數組的問題

[复制链接]
发表于 2014-10-15 13:04 | 显示全部楼层 |阅读模式
請教關于數組的問題:
如附件, A欄和B欄, 我各設定為一個數組, 想在F3:J3下面, 帶出A欄對應的B欄, 請幫忙給個宏.
最佳答案
2014-10-15 13:30
  1. Sub test()
  2. Dim d As Object, i As Integer, j As Integer, arr0, arr
  3. Set d = CreateObject("Scripting.Dictionary")
  4. arr0 = Range("A1").CurrentRegion
  5. arr = Range("F2").CurrentRegion
  6. For i = 1 To UBound(arr0)
  7.     d(arr0(i, 1)) = arr0(i, 2)
  8. Next i
  9. For j = 1 To UBound(arr, 2)
  10.     arr(1, j) = d(arr(1, j))
  11. Next j
  12. Range("F3").Resize(UBound(arr, 1), UBound(arr, 2)) = arr
  13. End Sub
复制代码
擷取.JPG

Test.zip

3.98 KB, 下载次数: 6

发表于 2014-10-15 13:08 | 显示全部楼层
F3公式,横拉;
=VLOOKUP(F2,$A$1:$B$8,2,)
回复

使用道具 举报

 楼主| 发表于 2014-10-15 13:17 | 显示全部楼层
baksy 发表于 2014-10-15 13:08
F3公式,横拉;
=VLOOKUP(F2,$A$1:$B$8,2,)

不好意思, 我是要在宏里面來運行的, 可以幫忙寫宏嗎.
并且, 我這個只是舉例子, 我實際寫的宏比較複雜, 想看看能不能改善.
回复

使用道具 举报

发表于 2014-10-15 13:30 | 显示全部楼层    本楼为最佳答案   
  1. Sub test()
  2. Dim d As Object, i As Integer, j As Integer, arr0, arr
  3. Set d = CreateObject("Scripting.Dictionary")
  4. arr0 = Range("A1").CurrentRegion
  5. arr = Range("F2").CurrentRegion
  6. For i = 1 To UBound(arr0)
  7.     d(arr0(i, 1)) = arr0(i, 2)
  8. Next i
  9. For j = 1 To UBound(arr, 2)
  10.     arr(1, j) = d(arr(1, j))
  11. Next j
  12. Range("F3").Resize(UBound(arr, 1), UBound(arr, 2)) = arr
  13. End Sub
复制代码
回复

使用道具 举报

发表于 2014-10-15 13:32 | 显示全部楼层
  1. Sub tt()
  2.     Set d = CreateObject("scripting.dictionary")
  3.     arr = [a1].CurrentRegion
  4.     For i = 1 To UBound(arr)
  5.         d(arr(i, 1)) = arr(i, 2)
  6.     Next
  7.     brr = [f2:j3]
  8.     For i = 1 To UBound(brr, 2)
  9.         brr(2, i) = d(brr(1, i))
  10.     Next
  11.     [f2:j3] = brr
  12. End Sub
复制代码
回复

使用道具 举报

发表于 2014-10-15 13:32 | 显示全部楼层
请看附件。

Test.rar

8.69 KB, 下载次数: 1

回复

使用道具 举报

 楼主| 发表于 2014-10-15 14:01 | 显示全部楼层
suye1010 发表于 2014-10-15 13:30

重來沒有用過數組, 現在看來有點半解, 還在研究中, 先謝謝你.
回复

使用道具 举报

 楼主| 发表于 2014-10-15 14:02 | 显示全部楼层
grf1973 发表于 2014-10-15 13:32

你好, 我還在研究4樓的, 先謝謝你.
回复

使用道具 举报

 楼主| 发表于 2014-10-15 14:19 | 显示全部楼层
本帖最后由 010203400 于 2014-10-15 14:42 编辑
suye1010 发表于 2014-10-15 13:30

你好, 還有些地方不太明白, 可否幫忙詳細說明一下, 感謝你了.

Sub test()

Dim d As Object, i As Integer, j As Integer, arr0, arr

******不太明白這行的用處, 請幫忙解答.
Set d = CreateObject("Scripting.Dictionary")

******我的範例中是豎的數組, 如果我數組的是行內容呢, 下面的CurrentRegion要不要改?
arr0 = Range("A1").CurrentRegion
arr = Range("F2").CurrentRegion

******下面的意思, 是將A欄和B欄的對應關系, 讀在內存中, 可以這樣理解嗎?
For i = 1 To UBound(arr0)
    d(arr0(i, 1)) = arr0(i, 2)
Next i

******下面的不太懂, 能否詳細說明一下.
For j = 1 To UBound(arr, 2)
    arr(1, j) = d(arr(1, j))
Next j

******下面的不太懂, 能否詳細說明一下.
Range("F3").Resize(UBound(arr, 1), UBound(arr, 2)) = arr

End Sub


回复

使用道具 举报

 楼主| 发表于 2014-10-15 14:41 | 显示全部楼层
grf1973 发表于 2014-10-15 13:32

你好,
我執行的代碼, 結果OK.
但我不太明白各行的意思, 可否幫忙詳細解釋了.
不然我沒法套用到我的宏里面.

回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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