返回列表 上一主題 發帖

[發問] VBA 中計算數值問題

[發問] VBA 中計算數值問題

我設計了一個 3*3 的矩陣, 想做 row 的乘法,
例如, myarray1(2,2) 的 1 * myarray1(3, 2) = 1 *myarray1(4, 2) = 1 / 3
即 1*1*3

這個語法要怎麼寫?

Dim myarray1(2 To 4, 2 To 4) As Single

myarray1(2, 2) = 1
myarray1(2, 3) = 1
myarray1(2, 4) = 3

myarray1(3, 2) = 1
myarray1(3, 3) = 1
myarray1(3, 4) = 2

myarray1(4, 2) = 1 / 3
myarray1(4, 3) = 1 / 2
myarray1(4, 4) = 1


For i = 2 To 4
  For j = 2 To 4
    Cells(i, j).Value = myarray1(i, j)
    Next j
Next i

End Sub

回復 19# temple
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     Application.EnableEvents = False  '停止觸發事件
  3.     If Not Intersect(Range("b2:e5"), Target.Cells(1)) Is Nothing Then
  4.         '數值的改變在 "a1:e3" 的範圍中
  5.         Ex_工作表上的重算
  6.     End If
  7.     Application.EnableEvents = True    '要會回復能觸發事件
  8.     'Application.EnableEvents = False  '這裡錯誤
  9.    
  10. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

超級版主您好,之前可能是我在存檔時步驟上有問題, 或是自己粗心, 今天又試了一次存 .xlsm 就有儲存到語法, 可是, 在更改元素後仍然無法重算, 不曉得是不是事件沒有建立的緣因, 請超級版主指點 new matrix.rar (12.19 KB)

TOP

超級版主您好, 我選"excel活頁簿" 或"啟用巨集的活頁簿", 都無法儲存語法, 不知道為什麼?  只能附上 pdf檔給您

TOP

回復 16# temple
Matrix.xlsx  沒有巨集的Excel 檔
Matrix.xlsm  有巨集的Excel 檔
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

超級版主您好, 我發現檔案中的語法好像沒有被儲存起來,所以用pdf 檔把語法複製下,再請您幫我看看,
有問題的語法.pdf (49.64 KB)

TOP

超級版主您好,
我的問題是: 變更數值時, 沒有辦法進行重算, 不曉得是哪裡出了問題
Matrix.rar (5.57 KB)

TOP

超級版主您好,

因為我的權限有限, 無法將程式檔案附加上來, 也無法傳短消息給您, 我仍然有矩陣計算問題想請教您, 不曉得應該怎麼處理, 方便給我您的 email? 或是有其它方式? 麻煩您

TOP

超級版主, 真的是太感謝你了!!!

TOP

回復 11# temple
  1. '**************'工作表上數值的變動*************************
  2. Option Explicit
  3. Private Sub Worksheet_Change(ByVal Target As Range)
  4.     Application.EnableEvents = False
  5.     If Not Intersect(Range("a1:e3"), Target.Cells(1)) Is Nothing Then
  6.         '數值的改變在 "a1:e3" 的範圍中
  7.         Ex_工作表上的重算
  8.     End If
  9.     Application.EnableEvents = False
  10. End Sub
  11. Sub Ex_工作表上的重算()
  12.     Dim myarray1(), ar(), i As Integer
  13.     With Range("a1:d3")
  14.         For i = 1 To .Rows.Count
  15.             Rows(i).Cells(1, "E") = Application.Product(.Rows(i))
  16.         Next
  17.     End With
  18. End Sub
  19. '*************'陣列數值改變 *******************************
  20. Option Explicit
  21. Dim Ar_Key As String, myarray1()
  22. Sub Ex()
  23.     Dim i As Integer, S As String
  24.     myarray1() = Range("a1:d3").Value   '陣列數值
  25.     For i = 1 To UBound(myarray1)
  26.         S = S & Join(Application.Index(myarray1, i), ",") & ","
  27.     Next
  28.     If S <> Ar_Key Then  '比對陣列數值
  29.         Ex_重算
  30.         Ex_陣列紀錄
  31.     End If
  32. End Sub
  33. Sub Ex_重算()
  34.     Dim myarray1(), ar(), i As Integer
  35.     myarray1() = Range("a1:d3").Value
  36.    
  37.     ReDim ar(1 To UBound(myarray1))
  38.     For i = 1 To UBound(ar)
  39.         ar(i) = Application.Product(Application.Index(myarray1, i))
  40.     Next
  41.     Range("e1:e3") = Application.WorksheetFunction.Transpose(ar)
  42. End Sub
  43. Private Sub Ex_陣列紀錄()  '
  44.     Dim i As Integer
  45.     myarray1() = Range("a1:d3").Value
  46.     Ar_Key = ""
  47.     For i = 1 To UBound(myarray1)
  48.         Ar_Key = Ar_Key & Join(Application.Index(myarray1, i), ",") & ","
  49.         '陣列資料紀錄下來
  50.     Next
  51. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 閒人無樂趣,忙人無是非。
返回列表 上一主題