彰化一整天的論壇

 找回密碼
 立即註冊
查看: 193|回復: 7

case 邏輯語法

[複製鏈接]
發表於 2019-11-28 16:30:01 | 顯示全部樓層 |閱讀模式
本帖最後由 cool_fan 於 2019-11-28 16:46 編輯

老師您好,

想請教下邏輯語法問題:

構思:
1. 假設   (1) 輸入inputbox 值為空白,則為msgbox(“空”)   (ex:輸入空白)
             (2) 輸入inputbox 值不為空,但輸入的值(inputbox)不在搜尋範圍內, 則Msgbox(“搜尋時間不在範圍”)  
             (ex:假設inputbox輸入10:19:58,但搜尋範圍內裡面沒有此時間)
             (3) else inputbox 不為空且搜尋時間有被找到,則 msgbox(“輸入時間的值”),程式執行下去
2. 是否可以針對特定某一行去做搜尋 (ex:假設搜尋範圍為B40列到B100列->B40:B100)


問題如下:
Q1: 目前遇到問題是 inputbox輸入空白,沒有沒有進入 (1)  msgbox(“空”)   //是不是無法對輸入空白東西做判斷?
Q2:  假設我今天輸入值為123 , 應該進入 (2) =>Msgbox(“搜尋時間不在範圍”)  ,不過沒有進入(2),卻進入(3)



代碼如下:

Sub search_test()

    Range("B2").Select
    ActiveWorkbook.Worksheets("工作表1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("工作表1").Sort.SortFields.Add Key:=Range("B2"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("工作表1").Sort
        .SetRange Range("B2:B10000")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

   '輸入第一個值
    x1 = InputBox("請輸入時間")
   '尋找第一個值
    x2 = Cells.Find(What:=x1, After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate

        Select Case x1
        '假設輸入值為空
        Case Is = ""
            MsgBox ("輸入時間為空")

'        '輸入值與資料搜尋範圍內時間不符
        Case x1 <> x2
            MsgBox ("不在此時間範圍,請輸入正確時間")

        Case Else
'          '顯示時間值,程式繼續執行下去
            MsgBox (x1)

        End Select
End Sub

search_1.xlsm

24.95 KB, 下載次數: 3

回復

使用道具 舉報

發表於 2019-12-1 09:03:19 | 顯示全部樓層
本帖最後由 imingho 於 2019-12-1 09:15 編輯

第2個問題.
您用了case x1,在判斷式中就不用到x1,改成is <>x2來判斷。
另外您用find尋找指令,要用物件去接收結果,再用if來判斷是否是nothing(找不到)
  1. Sub search_test()

  2.     Range("B2").Select
  3.     ActiveWorkbook.Worksheets("工作表1").Sort.SortFields.Clear
  4.     ActiveWorkbook.Worksheets("工作表1").Sort.SortFields.Add Key:=Range("B2"), _
  5.         SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
  6.     With ActiveWorkbook.Worksheets("工作表1").Sort
  7.         .SetRange Range("B2:B10000")
  8.         .Header = xlNo
  9.         .MatchCase = False
  10.         .Orientation = xlTopToBottom
  11.         .SortMethod = xlPinYin
  12.         .Apply
  13.     End With
  14.    
  15.    '輸入第一個值
  16.     x1 = InputBox("請輸入時間")
  17.    
  18.    '尋找第一個值
  19.    '要將尋找結果放到物件,再用nothing來判斷是否有找到
  20.     Set x = Cells.Find(What:=x1, After:=ActiveCell, LookIn:=xlFormulas, _
  21.         LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
  22.         MatchCase:=False, MatchByte:=False, SearchFormat:=False)

  23.     '若沒找到則給空字串
  24.     If x Is Nothing Then
  25.        x2 = ""
  26.     Else
  27.        x2 = x.Value
  28.     End If

  29.         Select Case Trim(x1)
  30.         '假設輸入值為空
  31.         Case Is = ""
  32.             MsgBox ("輸入時間為空")

  33. '        '輸入值與資料搜尋範圍內時間不符
  34.         Case Is <> x2
  35.             MsgBox ("不在此時間範圍,請輸入正確時間")

  36.         Case Else
  37. '          '顯示時間值,程式繼續執行下去
  38.             MsgBox (x1)

  39.         End Select
  40. End Sub


複製代碼


回復 支持 1 反對 0

使用道具 舉報

發表於 2019-11-28 21:31:00 | 顯示全部樓層
先回答第1個問題.
空白跟空字串不同,您可以用trim來去除左右空白。
  1. Sub search_test()

  2.     Range("B2").Select
  3.     ActiveWorkbook.Worksheets("工作表1").Sort.SortFields.Clear
  4.     ActiveWorkbook.Worksheets("工作表1").Sort.SortFields.Add Key:=Range("B2"), _
  5.         SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
  6.     With ActiveWorkbook.Worksheets("工作表1").Sort
  7.         .SetRange Range("B2:B10000")
  8.         .Header = xlNo
  9.         .MatchCase = False
  10.         .Orientation = xlTopToBottom
  11.         .SortMethod = xlPinYin
  12.         .Apply
  13.     End With
  14.    
  15.    '輸入第一個值
  16.     x1 = InputBox("請輸入時間")
  17.    '尋找第一個值
  18.     x2 = Cells.Find(What:=x1, After:=ActiveCell, LookIn:=xlFormulas, _
  19.         LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
  20.         MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate

  21.         Select Case Trim(x1)
  22.         '假設輸入值為空
  23.         Case Is = ""
  24.             MsgBox ("輸入時間為空")

  25. '        '輸入值與資料搜尋範圍內時間不符
  26.         Case x1 <> x2
  27.             MsgBox ("不在此時間範圍,請輸入正確時間")

  28.         Case Else
  29. '          '顯示時間值,程式繼續執行下去
  30.             MsgBox (x1)

  31.         End Select
  32. End Sub



複製代碼


search_1.xlsm

24.28 KB, 下載次數: 1

售價: 1 金錢  [記錄]  [購買]

回復 支持 1 反對 0

使用道具 舉報

 樓主| 發表於 2019-11-30 21:28:42 | 顯示全部樓層
老師您好, 學到一個新用法 謝謝您。
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2019-12-4 15:58:36 | 顯示全部樓層
了解,老師謝謝 。 我在修正一下自己的一些想法
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2019-12-6 14:01:35 | 顯示全部樓層
本帖最後由 cool_fan 於 2019-12-6 14:04 編輯

老師,我想請教下inputbox問題,
在輸入時間裡的08:06:23 是否能輸入數字即可,而裡面的 : (分號不用打會顯示出來,也不會被修改),只需輸入數字即可

以下是我的程式碼
InputBox("Time input", Default:="08:06:23")
inputbox.ask.PNG
回復 支持 反對

使用道具 舉報

發表於 2019-12-6 14:35:35 | 顯示全部樓層
cool_fan 發表於 2019-12-6 14:01
老師,我想請教下inputbox問題,
在輸入時間裡的08:06:23 是否能輸入數字即可,而裡面的 : (分號不用打會顯 ...

您好,
     inputbox沒有您說的這個功能。
回復 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

 ㄚ母滴雞湯
 員林香純滴雞精

Archiver|手機版|小黑屋|彰化一整天的論壇(Excel,Office)  

GMT+8, 2019-12-15 20:43 , Processed in 0.151729 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表