0
私はMathcad計算をExcelスプレッドシートに変換しようとしています。私はkwという変数を見つけようとしています。私はラインで型の不一致エラーを取得しています:私はこのエラーを取得していますなぜ
INTEG = INTEG + ...
誰かが知っているだろうか?私はすでにそれに多くの時間を費やしましたが、理由を見つけることができませんでした。この作品は私にとって本当に重要であるとして、私はそれを事前にどんな手助け/提案を感謝したいと思います。#反復ループ内のタイプミスマッチエラーと積分内部の二分化
Option Explicit
Dim wp As Double, alpha As Double, w As Double, gama As Double, d As Double
Dim kw As Double, n As Integer, sExp As String, g As Double
'Calculating kw
Sub CalculateKw()
Dim l As Integer
alpha = ThisWorkbook.Sheets("Current-Wave Calculation").Range("H49").Value
gama = ThisWorkbook.Sheets("Current-Wave Calculation").Range("H34").Value
d = ThisWorkbook.Sheets("Environmental Data Input").Range("H4").Value
wp = ThisWorkbook.Sheets("Current-Wave Calculation").Range("H47").Value
kw = 100
For l = 1 To 99
If Err.Number = 0 Then
kw = INTEG(0, kw, 5000)
Else
kw = kw - 1
End If
Next l
ThisWorkbook.Sheets("Sheet1").Range("B1").Value = kw
End Sub
'DEFINITE INTEGRAL from 0 to kw*wp to solve JONSWAP Equation
Function INTEG(n, kw, lBit As Long)
Dim SpectralWidthParameter As Double, dMin As Double, dMax As Double
Dim dW As Double, lW As Long, AAA As String
g = 9.80665
alpha = ThisWorkbook.Sheets("Current-Wave Calculation").Range("H49").Value
gama = ThisWorkbook.Sheets("Current-Wave Calculation").Range("H34").Value
d = ThisWorkbook.Sheets("Environmental Data Input").Range("H4").Value
wp = ThisWorkbook.Sheets("Current-Wave Calculation").Range("H47").Value
dMin = 0
dMax = kw * wp
If w <= wp Then
SpectralWidthParameter = 0.07
Else
SpectralWidthParameter = 0.09
End If
sExp = "(w^n) * (((w/_
(Application.WorksheetFunction.Sinh(WaveNumber(0,20,w,d) * d)))^2)*
(alpha * (g^2) * (w^(-5)) * (EXP((-5/4) * ((w/wp)^(-4)))) *
(gama^(EXP(-0.5 * (((w - wp)/(SpectralWidthParameter * wp))^2))))))"
sExp = Replace(sExp, "EXP", "AAA")
dW = (dMax - dMin)/lBit
For lW = 1 To lBit
*INTEG = INTEG + Evaluate(Replace(Replace(sExp, "w", dMin), "AAA", _
"EXP")) * dW + 0.5 * dW * Abs(Evaluate(Replace(Replace(sExp, "w", dMin _
+dW), "AAA", "EXP")) - Evaluate(Replace(Replace(sExp, "w", dMin), _
"AAA", "EXP")))*
dMin = dMin + dW
Next lW
End Function
'BISECTION METHOD TO CALCULATE Wave number k
Function WaveNumber(a, b, w, d)
Dim klow As Double, khigh As Double, kmid As Double, i As Integer
Dim a As Integer, b As Integer
klow = a
khigh = b
kmid = (klow + khigh)/2
For i = 1 To 100
If SolveFunction(klow, w, d) * SolveFunction(kmid, w, d) < 0 Then
khigh = kmid
kmid = (klow + khigh)/2
Else
klow = kmid
kmid = (klow + khigh)/2
End If
Next i
WaveNumber = kmid
End Function
'HELPER FUNCTION(Wave Dispersion Equation)FOR BISECTION METHOD
Function SolveFunction(k, w, d)
SolveFunction = k * Application.WorksheetFunction.Tanh(k * d) - (w^2) _
/9.80665
End Function
A.S.Hの回答ありがとう、私はApplication.WorksheetFunctionを削除し、Sinh(...)のみ推奨として使用しました。まだ動作していません。 – Niraj
もちろん、他にも問題があります。私はそれらをすべてリストすることはできません!例えば 'Replace(sExp、" w "、dMin)'を考えてみましょう。これは 'wp'の' w'にも置き換わるでしょう...だから私はそれを短くして 'Evaluate'を落としてVBAで直接計算するようアドバイスしましたデバッグを簡単にする。あなたは間違った道をたどっている、と私は思う。 –