電子書籍の厳選無料作品が豊富!

エクセルVBA初心者です。

左の表からある一定以上の売上を得た人を抽出し、右の表に表示したいのですが以下のプログラムだと上手くいきません。

どこがダメなのでしょうか?

Private Sub cmdUriken_Click()
Dim k As Integer
Dim l As Integer
Dim m As Integer
k = 2
l = 2
m = 2

Do Until Cells(m, 32) = ""
Range(Cells(m, 19), Cells(m, 34)).Select
Selection.ClearContents
m = m + 1
Loop

Do Until Cells(k, 14) = ""
If Cells(k, 14) >= txtUriken.Text Then
Range(Cells(k, 1), Cells(k, 16)).Select
Selection.Copy
Range(Cells(l, 19), Cells(l, 34)).Select
ActiveSheet.Paste
l = l + 1
Application.CutCopyMode = False
End If

k = k + 1
Loop

End Sub

ちなみに If Cells(k, 14) = txtUriken.Text Then とするとちゃんと同等の売上が表示されるので

>= の使い方が間違っていると思うのですが

よろしくお願いします。

A 回答 (4件)

If Cells(k, 14) >= txtUriken.Text Then


文字列と数値の比較では、文字列のほうが大きいわけですから、うまくいくはずがありません。
質問では書かれていませんが、オブジェクト名からすると、txtUrikenは、TextBox のようです。

If Val(Cells(k, 14).Value) = Val(txtUriken.Value) Then 'プロパティは、Textでも可

としたら良いでしょうね。一般的には、こういうダイレクトにオブジェクトの値を入れるのではなくて、一旦、変数に受けて、それをチェックさせてから、値比較に使うようにします。
    • good
    • 0
この回答へのお礼

回答有難うございます。

無事できました。

お礼日時:2010/12/10 01:06

ANo.3です。

無駄な部分があったので修正します。

Private Sub cmdUriken_Click()
Dim rNum1 As Long, rNum2 As Long

Range(Cells(2, 19), Cells(Rows.Count, 34)).ClearContents
rNum2 = 2
For rNum1 = 2 To Cells(Rows.Count, 14).End(xlUp).Row
If Cells(rNum1, 14).Value >= Val(txtUriken.Text) Then
Range(Cells(rNum1, 1), Cells(rNum1, 16)).Copy Cells(rNum2, 19)
rNum2 = rNum2 + 1
End If
Next rNum1
End Sub
    • good
    • 0
この回答へのお礼

回答有難うございます。

お礼日時:2010/12/10 01:07

こんな感じでどうでしょう。



Private Sub cmdUriken_Click()
Dim LastRow As Long
Dim rNum1 As Long, rNum2 As Long

LastRow = Cells(Rows.Count, 32).End(xlUp).Row
If LastRow > 1 Then Range(Cells(2, 19), Cells(LastRow, 34)).ClearContents
rNum2 = 2
For rNum1 = 2 To Cells(Rows.Count, 14).End(xlUp).Row
If Cells(rNum1, 14).Value >= Val(txtUriken.Text) Then
Range(Cells(rNum1, 1), Cells(rNum1, 16)).Copy Cells(rNum2, 19)
rNum2 = rNum2 + 1
End If
Next rNum1
End Sub
    • good
    • 0
この回答へのお礼

回答有難うございます。

お礼日時:2010/12/10 01:07

>If Cells(k, 14) >= txtUriken.Text Then



この txtUriken.Text を txtUriken.Value にしたらどうでしょう。
変わらなかったらごめん。
    • good
    • 0
この回答へのお礼

回答有難うございます。

変わりませんでした。

お礼日時:2010/12/10 01:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!