2017-05-22 14 views
0

nの数値を比較して、どれが最小値であるかを調べようとしています。 nは、セルから値変数の値に基づいて変数の数を宣言する

n = Sheet1.Range("C6").Value 

あるのでn2に等しいならば、私は2つの変数を宣言してmin機能を使用する必要があります。データは、次のように2つの異なる列に配置されます。データがどこで終わるのか分かりません。

1 2 
3 4 
' ' 
' ' 

I nは上とループとベースの変数を宣言するために、配列を使用したいが、私はVBAの配列に慣れていない午前どのようにして知りません。私はすべてのソリューションにオープンしています。あなたは配列を使用する必要はありませんが、それは私が使用すると考えた方法の一つです。現在、私はすでに宣言している2つの値を取得するだけで済みます。ループを使用して、各行に対して2つの異なる値を取得して比較し、最小値を見つける必要があります。私のコードに誤りはありません。

x = 1 
Do Until IsEmpty(Sheet9.Cells(x, 30).Value) 
    no2 = Sheet9.Cells(x, 30).Value 
    no1 = Sheet9.Cells(x, 31).Value 
    result = WorksheetFunction.Min(no1, no2) 
    Sheet9.Cells(x, 30).Value = result 
    x = x + 1 
Loop 
+0

だからあなたの実際の質問は何ですか?あなたはそれを聞かなかった。あなたのコードが何をしているのか、それが何を期待しているのか、エラーがあれば説明してください。 [編集]あなたの質問は、これらの情報を追加する。 –

+0

あなたは配列を宣言することができ、変数nに基づいて値を配列に取得し、ワークシート関数minを使用して配列の最小値を取得することができます。配列をソートして最初の値を取得することもできます。 –

+0

は、式 '= max(col 30、col 31)'で満たされないでしょうか? –

答えて

0

考慮する値の数を含むセルを「C6」とします。

'C6'に3の値がある場合は、セルの「A30:A32」の最小値を見つけて 'A30'に値を貼り付けます。これはあなたの質問から理解したものです。

Sub Minarr() 
dim nos() as integer 

n=int(sheet1.range('C6').value) 
set cell=Sheet9.cells(1,30) 
if not isempty(cell) then 
for i=0 to n 
nos[i]=cell.offset(i,0).value 
next i 
result=Application.worksheetfunction.min(nos) 
cell.value=result 
end if 
end sub 
1

私はあなたの質問を理解している場合、あなたはこのようにDo Untilループにもう一つの条件を追加する必要があります...

X = 1 
Do Until IsEmpty(Sheet9.Cells(X, 30).Value) Or X > Sheet1.Range("C6").Value 
    no2 = Sheet9.Cells(X, 30).Value 
    no1 = Sheet9.Cells(X, 31).Value 
    result = WorksheetFunction.Min(no1, no2) 
    Sheet9.Cells(X, 30).Value = result 
    X = X + 1 
Loop 
関連する問題