2017-08-01 2 views
0

ユーザー入力に基づいて、テーブルから製品の中で最も安価な代替品を計算しようとしています。 コードは になっています。a)このサイズのさまざまな代替案を見つけるために、入力番号、製品サイズ(ユーザーインターフェイスシートのK19から)をテーブルの正しい行に合わせます。 b)特定のコストにサイズを掛けて、各代替案の合計コストを求めます(したがって、各代替案の特定のコストであるMx、Nxなど)。 c)総コストを配列に格納し、ユーザーインターフェイスでC45でユーザーに返されるこれらの番号の中で最小のものを見つけます。最小値を見つけるためにセルを計算し、配列に格納する。 "min"関数が問題を起こす

説明したコードサンプル:

Sub Calculate() 

Dim var As Variant 
Dim rownumber As Integer 
Dim Mx As Variant 
Dim Nx As Variant 
Dim Ox As Variant 
Dim Px As Variant 
Dim Qx As Variant 
Dim Rx As Variant 
Dim low As Variant 
Dim cat As Variant 

var = Range(WorksheetFunction.Match(Sheets("User Interface").Range("K19"), Sheets("C-type").Range("L1:L10000"), 0)).Value 

rownumber = var.Row 

Mx = var * Range("M" & rownumber).Value 
Nx = var * Range("N" & rownumber).Value 
Ox = var * Range("O" & rownumber).Value 
Px = var * Range("P" & rownumber).Value 
Qx = var * Range("Q" & rownumber).Value 
Rx = var * Range("R" & rownumber).Value 

cat = Array("Mx", "Nx", "Ox", "Px", "Qx", "Rx") 

low = Min(cat).Value 

Sheets("User Interface").Range("C45").Value = low 

Sheets("User Interface").Range("c45").Activate 
Application.Goto ActiveCell.EntireRow, True 

End Sub 

問題は、VBAは私の調査結果から、私は正しい構文を使用していると思う場合でもlow = Min(cat).Valueで(「SubまたはFunctionが定義されていません」)のエラーを与えることです。今まで私は実行可能な解決策を見つけることができませんでした。誰でも私のトラブルシューティングを手伝ってもらえますか?

事前に感謝します。

答えて

1
low = Application.WorksheetFunction.Min(cat) 

代わりにコードのこの作品を書く「原因になります役立つはずです。

+0

ありがとう!それはそのエラーの世話をするのに役立った。 –

2

WorksheetFunction.Minをお試しになりますか?あなたがWorksheetFunction.MinApplication.Minを記述する必要がMin Excelの機能を使用して

MSDN page for Excel built-in MIN function

+0

おそらく?私は配列の中で最小の数字を見つけようとしています。 "low = WorksheetFunction.Min(cat).Value"を試してみると、.min部分に "invalid qualifier"というエラーが返されます。構文に関する助言(その機能に関するマイクロソフトのヘルプページは明確ではありませんでした)?c編集:それを見つけました、ありがとう! –

2
  1. Minには.valueを使用しないでください。
  2. あなたlow値は常に0があなたの配列は、任意の値が含まれていません... cat = Array(Mx, Nx, Ox, Px, Qx, Rx)
+0

ありがとう!それは役に立ちました。あなたのポイント3でもっと詳しく説明できますか?計算した値を取り込む方法が間違っていますか(または計算に間違った構文を使用していますか)。編集:ありがとう!あなたのポイントは3番です。 –

+0

"Mx"、 "Nx"、...変数に対して定義した値の配列ではなく、 ""を使って文字列(テキストチェーン)の配列を作成しています。 – Pspl

1

コードに間違いがあります。

Sub Calculate() 

Dim var As Variant 
Dim rownumber As Integer 
Dim Mx As Variant 
Dim Nx As Variant 
Dim Ox As Variant 
Dim Px As Variant 
Dim Qx As Variant 
Dim Rx As Variant 
Dim low As Variant 
Dim cat As Variant 

var = Range(WorksheetFunction.Match(Sheets("User Interface").Range("K19"), Sheets("C-type").Range("L1:L10000"), 0)).Value 
'<~~ range error 
rownumber = var.Row 

Mx = var * Range("M" & rownumber).Value 
Nx = var * Range("N" & rownumber).Value 
Ox = var * Range("O" & rownumber).Value 
Px = var * Range("P" & rownumber).Value 
Qx = var * Range("Q" & rownumber).Value 
Rx = var * Range("R" & rownumber).Value 

'cat = Array("Mx", "Nx", "Ox", "Px", "Qx", "Rx") 
cat = Array(Mx, Nx, Ox, Px, Qx, Rx) '<~~ quote is not need 
low = WorksheetFunction.Min(cat) '<~~ use WorksheetFunction 

Sheets("User Interface").Range("C45").Value = low 

Sheets("User Interface").Range("c45").Activate 
Application.Goto ActiveCell.EntireRow, True 

End Sub 
+0

ありがとうDy。あなたのコメントのためにリー。 "var = Range(WorksheetFunction.Match(Sheets(" User Interface ")。)範囲(" K19 ")、シート(" Cタイプ ")範囲(" L1:L10000 ") 、0))。値 "? Range( "K-type")、Range( "L5:L345")、0)をvar = Range(WorksheetFunction.Match(Sheets( "User Interface" ) "と一致する正確な範囲を狭めることができますが、varは空で、「下付き文字が範囲外です」というエラーが表示されます...任意の援助が評価されます(そして、回答点はofcになります) –

+0

@A。 Doe:範囲はこのように記述されていますrange( "a1")。文字列です –

+0

文字列から "value"を抽出しようとしているのでエラーが表示されますか? –

関連する問題