2017-04-26 18 views
1

さまざまなシステムでポンプヘッドの値を計算するマクロを開発しようとしています。私はゴールシークを策定する方法を理解できません。私は初めてのVBAユーザーであり、これはコースの割り当てのためのものです。コードを以下に示します:GoalSeekを使用したエラー

Global NameEngr As String 
Global Dateinput As String 
Global Location As String 

Global k As Double 
Global g As Double 
Global visc As Double 
Global f As Double 
Global L As Double 
Global D As Double 
Global Kminor As Double 
Global Q As Double 
Global Z As Double 

Sub PumpHead() 

UserForm1.Show 

'Calculate the pump head based on desired flow rate. 


Range("A1").Select 
ActiveCell.Value = "Engineer's Name" 
ActiveCell.Offset(0, 1).Select 
ActiveCell.Value = NameEngr 
ActiveCell.Offset(1, -1).Select 
ActiveCell.Value = "Date" 
ActiveCell.Offset(0, 1).Select 
ActiveCell.Value = Dateinput 
ActiveCell.Offset(1, -1).Select 
ActiveCell.Value = "Location" 
ActiveCell.Offset(0, 1).Select 
ActiveCell.Value = Location 

Range("A5").Select 
v = (Q)/((3.14159/4) * (D^2)) 
ActiveCell.Value = v 
ActiveCell.Offset(0, 1).Select 
ActiveCell.Value = "Velocity" 
ActiveCell.Offset(1, -1).Select 
ActiveCell.Value = "Reynold's Number" 
ActiveCell.Offset(0, 1).Select 
Re = (v * D)/(visc) 
ActiveCell.Value = Re 
ActiveCell.Offset(1, -1).Select 
ActiveCell.Value = "LHS Colebrook Equation" 
ActiveCell.Offset(0, 1).Select 
LHSCole = 1/((f)^(1/2)) 
ActiveCell.Value = LHSCole 
ActiveCell.Offset(1, -1).Select 
ActiveCell.Value = "RHS Colebrook Equation" 
ActiveCell.Offset(0, 1).Select 
RHSCole = (-2) * Log(((k/D)/3.7) + (2.51/(Re * (f^(1/2))))) 
ActiveCell.Value = RHSCole 
ActiveCell.Offset(1, -1).Select 
ActiveCell.Value = "Difference" 
ActiveCell.Offset(0, 1).Select 
Diff = LHSCole - RHSCole 
ActiveCell.Value = Diff 
ActiveCell.Offset(1, -1).Select 
ActiveCell.Value = "Friction Factor" 
ActiveCell.Offset(0, 1).Select 
**f = (Range("B7:B9").GoalSeek(Goal:=0, ChangingCell:=("B10")))** 
ActiveCell.Value = f 
ActiveCell.Offset(1, -1).Select 
ActiveCell.Value = "Major Head Loss" 
ActiveCell.Offset(0, 1).Select 
hf = f * (L/D) * ((v^2)/(2 * g)) 
ActiveCell.Value = hf 
ActiveCell.Offset(1, -1).Select 
ActiveCell.Value = "Minor Head Loss" 
ActiveCell.Offset(0, 1).Select 
hm = Kminor * ((v^2)/(2 * g)) 
ActiveCell.Value = hm 
ActiveCell.Offset(1, -1).Select 
ActiveCell.Value = "Total Head Loss" 
ActiveCell.Offset(0, 1).Select 
hl = hm + hf 
ActiveCell.Value = hl 
ActiveCell.Offset(1, -1).Select 
ActiveCell.Value = "Pump Head" 
ActiveCell.Offset(0, 1).Select 
hp = hl + Z 
ActiveCell.Value = hp 

End Sub 

答えて

0

目標範囲のみ一つのセルを含むことができ、変化するセル範囲のキーワードに

が不足している、あなたが取得する必要がある場合は、命令は

Range("B7").GoalSeek(Goal:=0, ChangingCell:=Range("B10"))) 

のようになります。 B7、B8、B9 = 0であれば、これらの3つのセルの合計が0である新しいセルを追加し、目標セルを目標シークコマンドに適合させる。

関連する問題