2016-07-20 6 views
0

I持つセルA1に、この式 と以下のような簡単なExcelの表:制限がテキストとしてフォーマットさ

= MID(B1;1;2)) 

私に30

 A   B    C 
1  30  30:30 
2 
3 
4 
5 

の値を与えます今度は、マクロに以下のループを適用したい:

Sub test() 
    Do 
     first_row = Application.InputBox("Below which row new row(s) should be inserted?" _ 
             & vbCr & "Min: " & Sheets("Sheet1").Range("A1") & " Max: 500") 
     If first_row = False Then Exit Sub 
     If first_row > 500 Or first_row < Sheets("Sheet1").Range("A1") Then MsgBox ("Row has to be >= " & Sheets("Sheet1").Range("A1").Value & " and <= 500") 
    Loop Until first_row <= 500 And first_row >= Sheets("Sheet1").Range("A1") Or first_row = False 
End Sub 

このマクロでは、ユーザーは数字を入力する必要があるメッセージボックスを取得します。この数値はセルA1の値(この例では30)と500の間にある必要があります。

ただし、ユーザーが100を超える数値を入力すると、ループは30〜500 これは100未満の値しか受け入れません。

これまでのところ、 "TEXT"と書かれたセルB1によって問題が発生している可能性があるとわかりました。それ以外の場合は、このセルで「30:30」を使用することはできません。

したがって、私は次のようにA1に数式を変更しようとしました:

= VALUE(MID(B1;1;2))) 

それない仕事が、その後システムはまた、30

以下の値は、あなたがどのように解決するために、任意のアイデアを持っていますができますこの問題?

+0

問題がA1' 'の値が、[Application.InputBox(https://msdn.microsoft.com/en-us/library/office/ff839468.aspx)の戻り値ではありません。これは、 'Type:= 1'を使うか、' Val(first_row) 'で変換するまでテキストになります。 –

答えて

0

セットApplication.Inputboxタイプパラメータ= 2は数値を返します。 first_row As Longを宣言すると、first_rowが必ず数値になります。

Sub test() 
    Dim first_row As Long 
    Dim prompt As String 

    Do 
     prompt = "Below which row new row(s) should be inserted?" & vbCr & "Min: " & Sheets("Sheet1").Range("A1") & " Max: 500" 

     first_row = Application.InputBox(prompt:=prompt, Type:=1) 

     If first_row = 0 Then Exit Sub 

     If first_row > 500 Or first_row < Sheets("Sheet1").Range("A1") Then MsgBox ("Row has to be >= " & Sheets("Sheet1").Range("A1").Value & " and <= 500") 

    Loop Until first_row <= 500 And first_row >= Sheets("Sheet1").Range("A1") 
End Sub 
関連する問題