2017-02-06 7 views
0

基本的には、配列のすべての値をループし、Inputboxを使用してユーザーが指定した値より大きい値の数を数え、IF 1から100までの数字が入力されていることを確認します。それが完了した後、私は単にメッセージボックスに結果を表示したいだけです。基本的に苦労Excel VBA 2d配列を検索する方法

Dim arr As Variant 
arr = Range("A1:J10") 

Range("A1").Resize(UBound(arr, 1), UBound(arr, 2)) = arr 

Dim val As String 
val = InputBox("Enter an integer value") 
If val < 1 Or val > 100 Then 
' tells the user to try again 
    MsgBox "You did not enter a value from 1 to 100 , try again" 
val = Inputbox("Enter an integer value") 
Else 

End If 

文は、ユーザーが入力した、配列をループ内容を確認する場合:ここで

は、私がこれまで持っているものです。

+0

私はあなたが 'val'が1未満で100より大きいことはできないので、ifステートメントに'または 'を入れたいと思っています。 –

+0

ああ良いポイント! – EricCarlson

答えて

0
Dim val As String 
val = InputBox("Enter an integer value") 

Do While val < 1 Or val > 100 
' tells the user to try again 
    MsgBox "You did not enter a value from 1 to 100 , try again" 
    val = InputBox("Enter an integer value") 
Loop 

'checks array if the number is greater then input number 
Dim MyRange As Range 
Dim cell As Range 
Dim counter as integer 
counter = 0 
Set MyRange = Range("A1:J10") 
For Each cell In MyRange 
    If cell.Value > CInt(val) Then 
    counter = counter + 1 
    cell.Interior.Color = RGB(255, 0, 0) 'or cell.Interior.ColorIndex = 3 
    End If 
Next 

msgbox "Total number greater then input number is: " & counter 
+0

If/Elseステートメントのみを使用してvalを検証する方法はありますか? – EricCarlson

+0

なぜあなたは、ループが私の意見ではより良いものになるかをif文の使用を主張しますか? –

+0

私はvalの中に入っているものよりも大きい配列の値を数える別のループを使うつもりだったからです。この場合、ループでループするのを避けようとしていました – EricCarlson

1

組み込みのCountIF機能を使用して、ループと配列をすべて削除することをお勧めします。

Do 

    Dim val As Variant 
    val = InputBox("Enter an integer value") 

    If IsNumeric(val) And val > 1 And val < 100 Then 

     Dim bPass As Boolean 
     bPass = True 

    End If 

    If Not bPass Then MsgBox "You did not enter a value from 1 to 100 , try again" 

Loop Until bPass 

Dim lCountIf As Long 

lCountIf = WorksheetFunction.CountIf(Range("A1:J10"), ">" & val) 

MsgBox lCountIf & " values greater than " & val & "in Range." 
1

私はあなたが数値入力

  • 回避配列を強制し、(WorksheetFunction.CountIfを使用することができます

    • 使用Application.InputBoxに())

    をいただきたいです

    以下のとおり:

    Dim val As Integer 
    
    Do 
        val = CInt(Application.InputBox(prompt:="Enter an integer value between 1 and 100", Type:=1)) 
    Loop while val <1 And val > 100 
    
    MsgBox WorksheetFunction.CountIf(Range("A1:J10"), ">" & val) 
    
  • +0

    私はそれを探していました( 'Application.InputBox')。私の記憶は、正しい構文が私に失敗したので...私は私の記憶がちょうど整数を強制することができるInputBoxで私に失敗したと思った:( –

    +1

    @ScottHoltzman、ええそれは何か有用です。私は 'IsNumeric() (?IsNumeric( "1..2") 'が' True'を返すなど) – user3598756

    関連する問題