ここから本文です

解決済みの質問

数値の比較に関する質問です。VBA

eitetu0000さん

数値の比較に関する質問です。VBA

Private Sub 集計Button_Click()

Dim Dmin As Currency
Dim N As Integer
Dim Flg As Boolean

For N = 1 To 20

With Me.Controls("価格1Text" & N)

If IsNumeric("価格1Text" & N.Value) And Flg = False Then
Dmin = CCur("価格1Text" & N.Value)
Flg = True
ElseIf IsNumeric("価格1Text" & N.Value) And Flg Then
If CCur("価格1Text" & N.Value) < Dmin Then Dmin = CCur("価格1Text" & N.Value)
End If
End With
Next
With Me.Controls("価格1Text0")
If Flg Then
最低価格NK.Value = Dmin
Else
最低価格NK.Value = vbNullString '※ = 0
End If
End With
End Sub

以上のようにUserForm内のテキストボックス1~20にある価格を比較し、最小値を最低価格NK(テキストボックスに)に表示
させたいのですが、うまくいきません。どこが悪いのでしょう。

ちなみに、コンパイルエラーで装飾子が不正となってしまいます。

よろしくお願いします。

違反報告

ベストアンサーに選ばれた回答

ja7awuさん

あらまぁ~ 未だ こんな感じなの?
> コンパイルエラーで装飾子が不正となってしまいます。
> For N = 1 To 20
なのに どうして
> If IsNumeric("価格1Text" & N.Value) And Flg = False Then
とか
> Dmin = CCur("価格1Text" & N.Value)
とかに わざわざ直したのでしょうか?
変数Nは数値で1から20までルーブするごとに増えます。
Nは、RangeではありませんのでN.Valueは、有り得ません。
提示されたコードの意味を解析して理解し、コントロール名が実情と合っているかチェックしてみたら如何でしょうか。

  • 違反報告
  • 編集日時:2012/2/14 21:06:49
  • 回答日時:2012/2/14 20:49:30

この質問は投票によってベストアンサーが選ばれました!

この質問・回答は役に立ちましたか?
役に立った!

お役立ち度:お役立ち度 1点(5点満点中)1人が役に立つと評価しています。

ベストアンサー以外の回答

(1件中1〜1件)

 

sweet_t_r_a_pさん

とりあえずコードが読み難い
玄人ぶった書き方をしているので他人に読ませるソースではない
色々と省略して書かれているので書いた本人が理解できていないと思います
可能な限り明示することが理解にも繋がります


Dim strAryValue(19) As String '値を格納する配列を宣言
Dim intCnt As Integer 'ループ変数が一文字は間違いを見落としやすい
Dim curDmin As Currency '変数には型が判るように宣言する
Dim blnFlg As Boolean

blnFlg = False

'愚直に値を取得する
strAryValue(0) = Trim(価格1Text1.Text)
strAryValue(1) = Trim(価格1Text2.Text)
中略
strAryValue(18) = Trim(価格1Text19.Text)
strAryValue(19) = Trim(価格1Text20.Text)

curDmin = 999999999'価格の入力テキストボックスに入力できる最大値をセットしておく

For intCnt = LBound(strAryValue) To UBound(strAryValue)

'処理
If Trim(strAryValue(intCnt)) = "" Then

Else

If IsNumeric(strAryValue(intCnt)) = False Then

Else

If curDmin > Ccur(strAryValue(intCnt)) Then

curDmin = CCur
blnFlg = True

Else

EndIf

EndIf

EndIf

Next intCnt 'ループのNextに使用したカウンター変数を書いておくと後々判り易い

If blnFlg = False Then
最低価格NK.Text = ""
Else
最低価格NK.Text = Cstr(curDmin) 'Format(curDmin,"###,###,##0")
EndIf


机上ロジックです
バグだしお願いします

知恵ノートとは?

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。

お客様自身の責任と判断で、ご利用ください。

ただいまの回答者

20時30分現在

3420
人が回答!!

1時間以内に6,164件の回答が寄せられています。

>>回答ひろばに行く


知恵コレに追加する

閉じる

知恵コレクションをするID/ニックネームを選択し、「追加する」ボタンを押してください。
※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。

ほかのID/ニックネームで利用登録する