我被困了幾個小時解決我的案子。下面包含的代碼,我將首先解釋我的案例,以便更好地理解并更容易理解。
我創建了一個二維陣列,該陣列在兩個溫度下具有多種化合物和相應的熱值——它包含在代碼中,用戶看不到它。
用戶在單元格中輸入化合物和混合物的百分比,我希望將組成多行和兩列陣列的選定單元格添加到二維陣列中,然后在創建的函式中用于計算某個值(如隨附的螢屏截圖所示)。
最終,我希望程式搜索用戶輸入和選擇的表以將聯合名稱與陣列匹配,該陣列在代碼中“隱藏”以正確執行代數運算。
代碼:
Function LoopThroughArray(T, x)
Dim arr() As Variant
ReDim arr(2, 4)
arr(0, 0) = "CH4"
arr(0, 1) = 35.818
arr(0, 2) = 35.808
arr(1, 0) = "C2H6"
arr(1, 1) = 63.76
arr(1, 2) = 63.74
arr(2, 0) = "C3H8"
arr(2, 1) = 91.18
arr(2, 2) = 91.15
Dim arrUser() As Variant
ReDim arrUser(2, 4)
arrUser(0, 0) = "CH4"
arrUser(0, 1) = 0.7
arrUser(1, 0) = "C2H6"
arrUser(1, 1) = 0.3
'declare variables for the loop
Dim i As Long, j As Long
'loop for the first dimension
For i = LBound(arr, 1) To UBound(arr, 1)
'loop for the second dimension
For j = LBound(arr, 2) To UBound(arr, 2)
If T = 0 And arr(i, j) = "CH4" And arrUser(i, j) = "CH4" Then
LoopThroughArray = arr(i, j 1) * x 'the X is concentration of CH4 selected by user
Else
If T = 25 And arr(i, j) = "CH4" And arrUser(i, j) = "CH4" Then
LoopThroughArray = arr(i, j 2) * x 'the X is concentration of CH4 selected by user
End If
End If
Next j
Next i
End Function
Excel 中的螢屏截圖: 我還附上了一個螢屏截圖,顯示了嵌入在代碼中的表的值,以及該函式最終將如何作業。

問題:
目前,我撰寫的代碼僅適用于 CH4 化合物的功能并且用戶手動選擇包含濃度值的單元格(我的代碼中的 x)。
我應該如何修改代碼,以便函式/回圈將搜索用戶輸入的表,將其中的化合物名稱與代碼中內置表中的化合物名稱匹配,并以以下形式計算值:濃度(用戶定義,目前是我的代碼中的 x 值)* LHV 在所需溫度(0 或 25 度)下的特定化合物。
uj5u.com熱心網友回復:
我將遍歷用戶輸入行(A9:A10 中的行)并在陣列中查找匹配項以獲得濃度并進行微積分:
' call the function like in =loopthrougharray(25;"A9:A10")
Function LoopThroughArray(T, userRange) As Double
Dim arr() As Variant
Dim strFind As String
Dim i As Long, j As Long, row As Long
Dim curRow As Range
Dim ret As Double, x As Double
ReDim arr(2, 4)
arr(0, 0) = "CH4"
arr(0, 1) = 35.818
arr(0, 2) = 35.808
arr(1, 0) = "C2H6"
arr(1, 1) = 63.76
arr(1, 2) = 63.74
arr(2, 0) = "C3H8"
arr(2, 1) = 91.18
arr(2, 2) = 91.15
' Loop through user input rows:
For Each curRow In userRange
arraycompound = Trim(UCase(curRow.Value2))
For i = 0 To UBound(arr, 1)
If arr(i, 0) = arraycompound Then
' x retrieves user's input of concentration:
x = curRow.Offset(0, 1)
If T = 0 Then
ret = ret arr(i, j 1) * x
Else
ret = ret arr(i, j 2) * x
End If
End If
Next
Next
LoopThroughArray = ret
End Function
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/433009.html
下一篇:我想列印總是減去3的整數
