返回列表 上一主題 發帖

[發問] 如何加資料

[發問] 如何加資料

請問大大有方法可以在同一地方把A,B,C,D 一樣資料的E加起來嗎?

BOOK1.rar (7.42 KB)

50 字節以內
不支持自定義 Discuz! 代碼

回復 2# Hsieh


    謝謝論壇,謝謝前輩
後學藉此帖學習到JOIN() 儲存格值需要經過兩次轉置,讓變成一維陣列,才能連接成新字串
學習心得如下,請前輩再指教

Option Explicit
Sub Ex()
Dim A As Range, d, d1, mystr$
'↑宣告變數:A是 儲存格變數,(d,d1)是通用型變數,mystr是字串變數
Set d = CreateObject("Scripting.Dictionary")
'↑令d這通用變數是 字典
Set d1 = CreateObject("Scripting.Dictionary")
'↑令d1這通用變數是 字典
For Each A In Range([A1], [A1].End(xlDown))
'↑設逐項迴圈!令A這儲存格變數是 範圍儲存格裡的一格,
'範圍儲存格:本表[A1]到 [A]往下找最後一個有內容儲存格,這範圍儲存格

mystr = Join(Application.Transpose(Application.Transpose(A.Resize(, 4))), ",")
'↑令mystr這字串變數是 A變數(儲存格)向右擴展4欄儲存格經2次轉置後,
'以 ","連接成的新字串

d(mystr) = d(mystr) + A.Offset(, 4).Value
'↑令以mystr變數為key,item是 item自身 + A變數向右偏移4格儲存格(E欄)值,
'納入d字典

d1(mystr) = Array(A.Value, A.Offset(, 1).Value, A.Offset(, 2).Value, _
            A.Offset(, 3).Value, d(mystr))
'↑令以mystr變數為key,item是 陣列(A變數(含)右側4個儲存格值,
'以mystr變數查d字典的item值)

Next
[H:L] = ""
'↑令[H:L]儲存格值是 空字元
[H1].Resize(d1.Count, 5) = Application.Transpose(Application.Transpose(d1.items))
'↑令[H1]擴展向下d1字典key數列,擴展向右5欄,這範圍儲存格值以d1字典items轉置兩次帶入
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 29# b9208


    我是後學, 論壇上談的都是我進步的糧食,會很珍惜的,這個論壇真的幫助我很多,借此再說聲謝謝大家!!:D
V98

TOP

linshin1999 兄

於#18對transpos說明非常詳細
建議對transpos變化不了解的,可以前往拜讀。
非常感謝
100 字節以內
不支持自定義 Discuz! 代碼

TOP

怎麼講呢?就是一點點加一點點加,然後就懂了,謝謝各位,放假了大家都還在努力,FAlonso台灣好冷,那裡還好吧!
V98

TOP

回復 26# Hsieh
多謝H大指點,現在終於完全解通了
另外在#18,我新增了一些筆記,希望以後對他人有用
80 字節以內
不支持自定義 Discuz! 代碼

TOP

回復 25# linshin1999
dim d as object
這是正確宣告,dictionary他是個物件所以宣告為物件沒錯
dictionary這個物件不會因為他的key與item產生資料型態變化
你可將此物件看成一個容器,此容器的內容物並不會改變此容器本身的性質

所以VBA說明中提到
dictionary物件,其key式除了陣列以外的任何資料型態,而item則可為任何形態的資料。
一個關鍵字可對應任何的資料,這是此物件的特性。
學海無涯_不恥下問

TOP

本帖最後由 linshin1999 於 2011-1-8 11:26 編輯

回復 16# basarasy

變數要用Object嗎?
Dim d as Object ??



Dim d                                                              '建立一個變數
Set d = CreateObject(Scripting.Dictionary)


VBA 中變數的宣告不明確說明型別為何時,它的型別就是 Variant 它的意思就是什麼型態都可以,
1)有好處:就 Scripting.Dictionary 來講,它要處厘跟著來的 陣列 所以它的型別會跟著後面的 陣列 跑,它的型別就一定要是 Variant ,如果没有 variant 這個型別, Dictionary 就不存在了 .
2)有缺點:就是不明確,對於習慣明確型別的人會很不習慣,我也是這樣.

今天再回頭讀 Hsieh 版主 和 TAlonso 精彩的論述,才注意到有這則回復,真不好意思.


回復 24# b9208

太精彩了,我也來加碼.
V98

TOP

感謝各位先進
之前針對dictionary & transpose 總是不太了解
看完本文章後,總算比較了解其用法了。
100 字節以內
不支持自定義 Discuz! 代碼

TOP

Dictionary物件當加入KEY的同時即產生對應該KEY的值為Empty的初始值
整個物件當可視為二維陣列
其第一維則是該物件的數量
其第二維則是該物件的keys與items
該陣列大小表示如下:
ThisArray(d.count,2)
但你無法以INDEX指定該陣列
因為這只是將其視為二維陣列
但實際上他是2個縱列的陣列合起來
所以一般應用上會以其Key直接指定到對應的Item
學海無涯_不恥下問

TOP

        靜思自在 : 地上種了菜,就不易長草;心中有善,就不易生惡。
返回列表 上一主題