Board logo

標題: select case 的用法 [打印本頁]

作者: eric093    時間: 2013-7-29 14:38     標題: select case 的用法

請問使用select case  後若為字串,是否可以抓"含有"特定字串?
Select Case Sheets(1).Cells(i, 3).Value
           Case "aa"
           '''''''''''''''''''''''''''''''''''''
作者: stillfish00    時間: 2013-7-29 15:26

本帖最後由 stillfish00 於 2013-7-29 15:28 編輯

回復 1# eric093
  1. Dim s as String
  2. s = Sheets(1).Cells(i, 3).Value
  3. Select Case True
  4. Case s Like "*aa*"
  5.     msgbox "字串包含aa"
  6. Case Else
  7.     msgbox "字串不包含aa"
  8. End Select
複製代碼

作者: eric093    時間: 2013-7-29 16:55

謝謝-stillfish00 ,ok了!
不過,可以再追加一個問題嗎?
怎麼把第二個迴圈與第一個一起寫進去,我搞好久了
Dim  aa As String
Dim row1, row2, row3, i, o, k, j As Integer

row1 = Sheets("1").Range("a65536").End(xlUp).Row
row2 = Sheets("2").Range("a65536").End(xlUp).Row
For i = 2 To row2
aa = Sheets("2").Cells(i, 3).Value
Select Case True
       Case aa Like "*成交*"
                  Sheets("3").Select
                  row3 = Range("a65536").End(xlUp).Row
                  k = row3 + 1
                  Sheets("3").Cells(k, 1).Value = Sheets("2").Cells(i, 3)
                  Sheets("3").Cells(k, 2).Value = Sheets("2").Cells(i, 11)
                  Sheets("3").Cells(k, 3).Value = Sheets("2").Cells(i, 10)
                  Sheets("3").Cells(k, 4).Value = Sheets("2").Cells(i, 25)
                  
End Select
Next

----------------------------------------------------------
row1 = Sheets("1").Range("a65536").End(xlUp).Row
row2 = Sheets("2").Range("a65536").End(xlUp).Row
For j = 2 To row2
For i = 2 To row1
   If Sheets("3").Cells(j, 4) = Sheets("1").Cells(i, 2) _
        And Sheets("3").Cells(j, 2) = Sheets("1").Cells(i, 25) Then
        Sheets("3").Cells(j, 5).Value = Sheets("1").Cells(i, 5)
     Exit For
    End If
Next
Next
作者: stillfish00    時間: 2013-7-29 19:12

回復 3# eric093
第二段的 i 和 j 要互換才能加進去。
作者: luhpro    時間: 2013-7-29 23:37

謝謝-stillfish00 ,ok了!
不過,可以再追加一個問題嗎?
怎麼把第二個迴圈與第一個一起寫進去,我搞好 ...
eric093 發表於 2013-7-29 16:55

如果 Case 只會選擇到一個條件, 建議直接用 if 來實現:
Select Case True
       Case aa Like "*成交*"
...                  
End Select
可改成
If aa Like "*成交*" Then
...
Edn If
一方面程式看起來較簡潔,
一方面若執行次數非常多時也可節省些執行時間.
作者: eric093    時間: 2013-7-29 23:40

了解,那麼Case aa Like "*成交*"可以有2個條件以上嗎?
Case aa Like "*成交*" or "*未成交*",像這樣嗎
作者: luhpro    時間: 2013-7-30 00:52

本帖最後由 luhpro 於 2013-7-30 00:55 編輯
了解,那麼Case aa Like "*成交*"可以有2個條件以上嗎?
Case aa Like "*成交*" or "*未成交*",像這樣嗎
eric093 發表於 2013-7-29 23:40

你應該要用 Case aa Like "*成交*" Or aa Like "*未成交*" (在 Or 的左右邊都應該要放完整的條件式)
其實 aa Like "*成交*" 就已經有包含 aa Like "*未成交*" 了. (因為 "未成交" 此值對於 Like "*成交*" 是 True)

Select Case 較常用於 "同一變數(或標的)" 於不同值下需有不同的處理方式(即非單純藉由公式或程式就能實現其目的)時使用,(有依某標的的條件或值來做 "分流" 的意味)
而 If 則較常用於具有排它性條件的需求下使用.(有層層篩選的意味)

Select Case 指出要比對的標的, 而 Case 則指出該標的應判斷的條件(可用類似 Case Is > 5 之類的條件式)或值 ,也因皆為相同標的,故Case不需指明標的.
除非你用 Select Case True, 那麼所有 Case 的條件標的都應該是相同的,
否則即便非該摽的的第1個條件式成立, 也不會執行其下的程序,而是會繼續跑去判斷下一個Case是否成立(一旦不成立立刻結束),總之容易發生非預期結果.

其形式為 :
With Target ' 標的儲存格
  Select Case .Row ' 儲存格列號
    Case 1 ' 若該儲存格位於第 1 列
   ...
    Case 9 ' 若該儲存格位於第 3 列, 此處第 2 ~ 8 列不處理, 故不適用 For ...Next
    ...
    Case 13 ' 第 13 列
   ...
    Case Else ' 若列號非上述情形時於此處理
    ...
  End Select
Edn With
若上式改用 If 來表示,則為
With Target ' 標的儲存格
   If .Row=1 Then  ' 若該儲存格位於第 1 列
   ...
    ElseIf .Row= 9 Then ' 若該儲存格位於第 9 列, (若儲存格位於第 2 ~ 8 列則不會處理, 故不適用 For ...Next, 或公式)
    ...
    Elseif .Row=13 Then ' 若該儲存格位於第 13 列
   ...
    Else ' 若列號非上述情形時於此處理
    ...
  End If
Edn With
作者: eric093    時間: 2013-7-30 02:00

謝謝:luhpro 花了這麼多時間說明及給我vba的觀念,真的非常感謝!
我會再努力的!很感謝!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)