Visual_Basic 板


LINE

※ 引述《A1pha ([αλφα])》之銘言: : 標題: [VBA ] 請問如何在VBA裡面使用矩陣公式? : 時間: Tue Mar 2 14:11:37 2010 : : 請問, : 在VBA裡面, : 要怎麼使用矩陣啊? : : 在工作表中, : =B2:B30+D2:D30 : 只要按下ctrl+shift+Enter就可以產生矩陣了, : 在VBA裡面有沒有像這樣的方法? : : 例如我異想天開地,這樣寫: : Array("b2:B30"+"D2:D30") : 結果當然是不行.... : : 有沒有類似這樣的概念或是方法呀? : 還是只能乖乖用 dim arr() as variant : 然後一個一個將儲存格裡面的東西丟進去,然後再做運算這樣...囧 : : -- : 據聞,椅子在聽說Money Ball要拍成電影後如是回應: : : : 我椅子,就在這個moment,要爆啦! : : -- :



※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 123.194.88.67 : → stool100:你的運算結果是? 03/02 17:00 : → A1pha:#VALUE! 03/02 18:04 : 推 rushcat:錄製巨集 看看他怎麼運作的吧!? 03/02 18:36 : → A1pha:這招我試過,但是他錄製的東西是讓某儲存格的值= 03/02 18:47 : → A1pha:你所輸入的那些字 Selection.FormulaArray = "你輸入的公式" 03/02 18:48 : → A1pha:而我想要的,是直接在VBA裡面做運算,然後在拿去做別的用途 03/02 18:48 : 推 stool100:你最後的目的是要做什麼運算? 03/02 21:28 : 推 qsss:答案已經出來了不是嗎? 你把"某儲存格"變成變數去接受結果不 03/03 08:43 : → qsss:就是你要的嗎? 03/03 08:43 好吧。 事到如今, 也只能全盤托出了@@ 是這樣的, 其實原本我只是要做簡單的a=a+b這種東西。 a和b其實是兩欄儲存格, 也就是在B輸入想要購買的東西,然後執行巨集時, 把他加入到A欄代表已購買的東西。 其實這我有寫出來: Sub Add_in() Dim i As Integer For i = 1 To UBound(Range("已種").Rows().Value) '這是該欄的列數 Range("已種").Rows(i).Value = _ Range("已種").Rows(i).Value + Range("放入推車").Rows(i).Value Next End Sub 問題好像解決了, 但是其實接下來才是我把事情搞得那麼複雜的主因....囧 我在該工作表裡面,還寫了一個麻煩的東西... 一個4*27 總共108個儲存格的自訂函數, 每一欄的值都和前一欄的值環環相扣~ 自訂函數就算了, 麻煩的是, 自訂函數的引數是包含NOW()的運算公式... 好了,這麻煩在哪裡? 麻煩在於,每當我執行上述那個Add_in程序的時候, 由於儲存格是一個一個改變的, 每改變一個,那108個包含自訂函數的儲存格都要再運算一遍.. 每按一次巨集,都要等個3秒多.... 讓人實在嚥不下個口氣== 好吧, 那麼我就想說那就把那108個儲存格的揮發性改成False好了。 於是在自訂函數裡面增加 Application.Volatile (Fasle) 嗯嗯,很好! 使用Add_in的時候不會LAG了,不用1秒東西就出來了~ OH YA好歡樂啊~~~ 但 是 ! 我就了為了要把現在的時間也當作變數做考量, 所以才在儲存格的公式裡面加入NOW()的。 現在儲存格變成非揮發性了, 函式所算出來的值,也就不是及時的NOW()了.... 可能是三分鐘前、五分鐘前,或是根本就是昨天的時間... 這就根本和我原本的目的相違背了啊...囧 於是, 解決得方向就變成有兩個: 1. 保持揮發性,但不要讓Add_in裡面的東西用回圈跑,不要讓他一個一個加, 因為每加一次那108格就要再算一次。 我試過用錄製巨集的方法,把a和b用陣列公式相加放在另外一格儲存格, 然後再用選擇性貼上,只把值覆蓋到B上面。 這巨集的執行速度比上面那個回圈巨集快很多,一秒左右可以好。 所以我才想說能不能也把陣列公式用在VBA裡面。 2. 第二個方法,就是讓那108格,變成非揮發。 而在只有需要用到那些數據的時候,才強制他們做運算。 例如當我需要用到那些數據的時候,只要按下某按鈕,就讓那些儲存格重新運算, 讓我得到現在時間的值。 我有試過這樣的方法: Dim trigger as Boolean Function Adjust_Time(par As Double) As Double Application.Volatile (trigger) . . . End Function 然後,寫另外一個SUB: Sub Test() trigger = true Range("G1").Value="這儲存格的值變化了,那108格應該也要變化吧?" Trigger = False End Sub 但是還是不行...囧 我還想過各種奇怪的方法, 像是在那108格儲存格的公式後面加個假人~例如: Adjust_Time(NOW()+C4/24)+$H$2 那個$H$2就是假人,他的值是0, 然後每當按下test()的時候,就讓$H$2的值再一次=0 看看會不會被判斷成儲存格的值改變了,而重新運算。 但還是失敗...囧 總之, 我現在就是卡在這奇怪的地方啦...囧 程式其實是可以動, 只是不漂亮QQ 委曲求全的話,等那3~5秒鐘,程式還是可以跑。 但是就是很煩啊(╯‵□′)╯┴─┴ 太醜了QQ 補上: 現在已經不是醜不醜的問題了... 而是我把108格的揮發性打開的話。 我用規劃求解想分析時...根本跑不動!!! 所以現在變成一定要把揮發性關起來了... 囧 問題越滾越大....慘烈啊~ -- 伊蝶爾: 「接受命運的人,可以得到幸福 違抗命運的人,可以得到榮耀」 你的選擇呢.....? --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.194.88.67 ※ 編輯: A1pha 來自: 123.194.88.67 (03/03 13:05) ※ 編輯: A1pha 來自: 123.194.88.67 (03/03 13:54)
1F:→ MOONRAKER:我看你打掉用VBA陣列重寫比較快,跑起來也會更快 XD 03/03 15:06
2F:→ MOONRAKER:(當然這只是第一眼看到的想法) 03/03 15:06
3F:→ A1pha:XD 我也快放棄了 XD 可能真的就砍掉重練比較快XD 03/03 17:29







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP