| 
    
     |  | いきなりですが、ツール→オプションで「変数の宣言を強制する」をON にすることを強くお勧めします。
 
 なので、デバッグするのが面倒でソースはチラッとしか見てません。
 チラッと見てわけがわからんかったので、作成しました。
 なお、終わってみてみたらFunction Gakuでの判断が希望のものと
 違うようなので、跡で適当に変更してください。
 ・最低必要限しか書いてません。(実用は問題あり)
 ・判り易いように特別な手法は使わず、力技で検索してます。
 
 目的
 基準額、会員か否かを判断して、割引率を取得する
 
 目で表を見たときどういう風に頭で処理しているか (Excelは関係ない)
 を整理する
 1.検索する額と、会員か否かの情報を取得する
 2.検索する額を元に基準額を探す
 3.該当する基準額の行で、一般、会員を探し、割引率を取得する
 4.割引率を返す
 ここまでが頭の中で行う作業
 
 ToShiYoさんのコードを見ていると↑が全く整理されていないように見える
 弊害:いきなりコード化すると頭がこんがらかって間違いやすい。
 半年後の自分は他人と同じです。たぶんこのソースでは全く
 わけがわからないでしょう。(メンテナンス出来ない。)
 
 又、最低限必要なコメントは付けましょう。
 訳がわからん。解読が面倒です。
 
 ここでExcelで考えてみる
 最初にUPしていた表を使って作成してます。
 
 GetWaribikiがメインプログラムです。
 
 Sub GetWaribiki()
 Dim kingaku As Long   '検索する額
 Dim Kijyun As Long   '基準金額
 Dim blnkaiin As Boolean  'TRUE:会員、FALSE:一般
 Dim lRow As Long    '行番号
 Dim Waribiki As Single '割引率
 Dim sBuf As String
 
 '  1 、検索する額と、会員か否かの情報を取得する
 kingaku = CLng(InputBox("検索する額を入力して下さい。", "Test"))
 blnkaiin = CBool(InputBox("会員ですか?" & vbCrLf & "会員の場合1" & vbCrLf _
 & "一般の場合0" & vbCrLf & "を入力して下さい。", "Test"))
 '2.検索する額を元に基準額を探す
 kingaku = Gaku(kingaku)
 '3.該当する基準額の行で、一般、会員を探し、割引率を取得する
 '  3-1会員か、一般化を文字列化
 If blnkaiin = True Then
 sBuf = "会員"
 Else
 sBuf = "会員"
 End If
 '3-2 該当する基準額の行で、一般、会員を探し、割引率を取得する
 Waribiki = SearchKingaku(Worksheets("Sheet1"), kingaku, blnkaiin)
 MsgBox kingaku & "の割引率は" & vbCrLf & sBuf & "割引で" & vbCrLf & _
 Waribiki * 100 & "%" & vbCrLf & " です。"
 
 End Sub
 
 Private Function Gaku(pKingaku As Long) As Long
 '2.検索する額を元に基準額を探す
 Select Case pKingaku
 Case Is < 10000
 Gaku = 10000
 Case Is < 20000
 Gaku = 20000
 Case Is < 50000
 Gaku = 50000
 End Select
 End Function
 
 Private Function SearchKingaku(pSheet As Worksheet, pKingaku As Long, pKaiin As Boolean) As Single
 '3.該当する基準額の行で、一般、会員を探し、割引率を取得する
 '////////////////////////////////////////////////////////
 '引数
 'pSheet :シートオブジェクト
 'pKingaku  :検索する金額
 'pKaiin   :TRUE:会員、FALSE:一般
 '/////////////////////////////////////////////////////////
 
 Const cSeachRow As Long = 1 '1列目(A列)を探す
 Dim lColumuOffset As Long     '検索する行
 Dim sTarget As String
 Dim I As Long, IMax As Long
 Dim lRet As Single      '戻り値
 
 lRet = 0
 
 If pKaiin = True Then
 lColumuOffset = 3   '会員
 Else
 lColumuOffset = 2   '一般
 End If
 '  該当する基準額の行を検索する
 With pSheet
 IMax = pSheet.Cells(pSheet.Cells.Rows.Count, 1).End(xlUp).Row
 sTarget = CStr(pKingaku) & "円以上"
 For I = 2 To IMax
 If .Cells(I, cSeachRow).Value = sTarget Then  '行が見つかった
 '割引率を返す
 lRet = .Cells(I, lColumuOffset).Value
 Debug.Print .Cells(I, lColumuOffset).Value
 Exit For
 End If
 Next I
 End With
 
 SearchKingaku = lRet
 End Function
 
 ※質問は受け付けますが、改造はお断りします。
 
 |  |