返回列表 上一主題 發帖

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

詢問矩陣設計問題

我寫了一個 4*4 的矩陣, 矩陣值會有分數, 但執行後 < 0 的部份都顯示 0
如果才能讓它顯示分數?

語法:
Dim myarray1(2 To 5, 2 To 5) As Integer

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

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

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

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

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

End Sub

TOP

1.將定義改成 Dim myarray1(2 To 5, 2 To 5) As Single 就可以
2.儲存格 格式改成 分數格式
Hung-Chi Lin/林宏吉
HUNGCHILIN/林宏吉的OFFICE專欄

TOP

問題已解決   非常謝謝你

TOP

[發問] 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

回復 4# temple

是這樣嗎?
  1. Option Explicit
  2. Sub Ex()
  3.     Dim myarray1(2 To 4, 2 To 4) As Single
  4.     Dim i As Integer, j As Integer
  5.     i = UBound(myarray1, 1)
  6.     i = i - LBound(myarray1, 1) + 1 '第一維的元素數
  7.     j = UBound(myarray1, 2)
  8.     j = j - LBound(myarray1, 2) + 1 '第二維的元素數
  9.    
  10.     myarray1(2, 2) = 1
  11.     myarray1(2, 3) = 1
  12.     myarray1(2, 4) = 3
  13.    
  14.     myarray1(3, 2) = 1
  15.     myarray1(3, 3) = 1
  16.     myarray1(3, 4) = 2

  17.     myarray1(4, 2) = 1 / 3
  18.     myarray1(4, 3) = 1 / 2
  19.     myarray1(4, 4) = 1

  20.     With Range("C5")                '指定楚墫格位置
  21.         .Resize(i, j) = myarray1    '擴充的範圍指定為myarray1的值
  22.     End With
  23. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

先謝謝超級版主的建議, 我是想在矩陣中再加一個欄位, 可以自動做 row的計算, 像下面那個矩陣一樣
1.............1........3.........(1*1*3)
1.............1....... 2........(1*1*3)
1/3.....1/2.......1........(1/3*1/2*1)

TOP

回復 6# temple
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim myarray1(2 To 4, 2 To 4) As Single
  4.     Dim AR As Variant
  5.     Dim i As Integer, j As Integer
  6.    
  7.     myarray1(2, 2) = 10
  8.     myarray1(2, 3) = 10
  9.     myarray1(2, 4) = 3
  10.    
  11.     myarray1(3, 2) = 5
  12.     myarray1(3, 3) = 17
  13.     myarray1(3, 4) = 2

  14.     myarray1(4, 2) = 1 / 3
  15.     myarray1(4, 3) = 1 / 2
  16.     myarray1(4, 4) = 1
  17.    
  18.     AR = myarray1
  19.     ReDim Preserve AR(LBound(myarray1) To UBound(myarray1), LBound(myarray1, 2) To UBound(myarray1, 2) + 1)
  20.    
  21.     For i = LBound(AR) To UBound(AR)
  22.         AR(i, UBound(AR, 2)) = Application.Product(Application.WorksheetFunction.Index(myarray1, i - LBound(AR) + 1))
  23.     Next
  24.    
  25.     i = UBound(AR, 1)
  26.     i = i - LBound(AR, 1) + 1 '第一維的元素數
  27.     j = UBound(AR, 2)
  28.     j = j - LBound(AR, 2) + 1 '第二維的元素數
  29.    
  30.     With ActiveSheet.Range("C5")     '指定楚墫格位置
  31.         .Resize(i, j) = AR      '擴充的範圍指定為Ar的值
  32.     End With
  33. End Sub
複製代碼
1

評分人數

感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

想再詢問超級版主,若我再加入一個欄位,從 3*3 變 4*4, 應該怎麼修改語法?(看了好久, 不太了解 ReDim 這句語法)

1.............1........3.......2........(1*1*3*2)
1.............1....... 2......1.........(1*1*3*1)
1/3.....1/2.......1.......3........(1/3*1/2*1*3)

TOP

回復 8# temple

ReDim 陳述式在程序層次中用來重新配置動態陣列變數的儲存空間。
語法
ReDim [Preserve] varname(subscripts) [As type] [, varname(subscripts) [As type]] . . .
Preserve 選擇性引數。當改變原有陣列最後一維的大小時,仍然保有原來的資料的關鍵字。


  1. Option Explicit
  2. Sub EX()
  3.     Dim AR()
  4.     AR = [A1:F2].Value '-> AR(1 To 2, 1 To 6)
  5.    
  6.     ReDim Preserve AR(1 To 2, 1 To 7)
  7. End Sub
複製代碼







感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

謝謝你 --- 我會再練習看看, 有問題再麻煩你囉~~

TOP

        靜思自在 : 能善用時間的人,必能掌握自己努力的方向。
返回列表 上一主題