返回列表 上一主題 發帖

[發問] 請問VBA 的程式有沒有可以辨認某個儲存格內的字元有無包含某幾個字串?

[發問] 請問VBA 的程式有沒有可以辨認某個儲存格內的字元有無包含某幾個字串?

請問VBA 的程式有沒有可以辨認某個儲存格內的字元有無包含某幾個字串?
例如
另外無論是大寫或小寫都辨認到
in   A1  A3  A4 包含 in
A1   window   
A2  office
A3  tina
A4  WINNIE   

另外可否找尋字串的位置
例如
in   
A1   window                       3
A2  office   
A3  tina                                2
A4  WINNIE                       2

本帖最後由 kimbal 於 2013-3-1 01:07 編輯
請問VBA 的程式有沒有可以辨認某個儲存格內的字元有無包含某幾個字串?
例如
另外無論是大寫或小寫都辨認 ...
198188 發表於 2013-3-1 00:48


用EXCEL的SEARCH公式即可
    =IF(ISERROR(SEARCH("IN",UPPER(A1))),"",SEARCH("IN",UPPER(A1)))
twbts20130301.jpg
2013-3-1 00:54


VBA 的話
twbts20130301instr.jpg
2013-3-1 01:06
  1. Public Function csearch(find_text, rng_within)
  2.     Dim result
  3.     result = InStr(1, UCase(rng_within.Value), UCase(find_text))
  4.     csearch = IIf(result = 0, "", result)
  5. End Function
複製代碼
懂得發問,答案就會在其中

今日の一秒は  明日にない
http://kimbalko-chi.blogspot.com
http://kimbalko.blogspot.com

TOP

回復 2# kimbal


    感謝,但用一般excel我知道,我想知道vba有無這個功能?

TOP

回復  kimbal


    感謝,但用一般excel我知道,我想知道vba有無這個功能?
198188 發表於 2013-3-1 01:00



    請看上面編輯
懂得發問,答案就會在其中

今日の一秒は  明日にない
http://kimbalko-chi.blogspot.com
http://kimbalko.blogspot.com

TOP

回復 4# kimbal

感謝
    csearch = IIf(result = 0, "", result)
請問如果只是檢查有沒有是否改成csearch = IIf(result = 0, "沒有", “有”)

另外請問
DO
UNTIL
可否同時有兩個UNTIL的條件
例如:
DO

UNTIL i>=1 or l = 0
UNTIL i>=1 and l = 0

TOP

回復  kimbal

感謝
    csearch = IIf(result = 0, "", result)
請問如果只是檢查有沒有是否改成csea ...
198188 發表於 2013-3-1 01:26



    這個程式是否需要在C欄處寫 csearch("in"a1,)?
如果在VBA內注明 SEARCH "IN"可以嗎?另外英文大寫和小寫都可以辨認到嗎?或者如何指定辨認大寫或小寫?

TOP

回復 6# 198188


    回復 4# kimbal


>    csearch = IIf(result = 0, "", result)
> 請問如果只是檢查有沒有是否改成csearch = IIf(result = 0, "沒有", “有”)

對啊,就是這樣.


>另外請問
>DO
>UNTIL
>可否同時有兩個UNTIL的條件
>例如:
>DO
>UNTIL i>=1 or l = 0
>UNTIL i>=1 and l = 0

可以的,這樣就可
    Do
        ...
    Loop Until i> = 5 and l = 0
///
    Do
        ...
    Loop Until i> = 5 Or l = 0



>如果在VBA內注明 SEARCH "IN"可以嗎?另外英文大寫和小寫都可以辨認到嗎?或者如何指定辨認大寫或小寫?

現在是不論大寫小寫都可以辨認到的,
因為用了ucase把兩個輸入都先轉成大寫,然後才做比較
result = InStr(1, UCase(rng_within.Value), UCase(find_text))
例如:
result  = Instr(1, ucase("abc"), ucase("B"))
計算時會變為
result  = Instr(1, "ABC", "B")
result = 2


拿走ucase就的話就要大小寫全對才可以找到位置
result = InStr(1, rng_within.Value, find_text)
例如:
result  = Instr(1, "abc", "B")
result = 0

把"B"改成"b"就可以得出2
result  = Instr(1, "abc", "b")
result = 2
懂得發問,答案就會在其中

今日の一秒は  明日にない
http://kimbalko-chi.blogspot.com
http://kimbalko.blogspot.com

TOP

可以參考以下原始碼
紅字即為需搜尋得字串
Sub A()
                     工作表3.Cells(1, 16) = "搜尋目標源"
                     工作表3.Cells(1, 17) = "判斷是否找到"
                     工作表3.Cells(1, 18) = "關鍵字位置"
                     工作表3.Cells(1, 19) = "代碼"


        For i = 2 To ActiveSheet.Range("b2").CurrentRegion.Rows.Count
                If (InStr(1, 工作表3.Cells(i, 2), "內") >= 1) Then
                     工作表3.Cells(i, 16) = 工作表3.Cells(i, 2) '搜尋目標源
                     工作表3.Cells(i, 17) = "find" '判斷是否找到
                     工作表3.Cells(i, 18) = InStr(工作表3.Cells(i, 2), "內") '關鍵字位置
                     工作表3.Cells(i, 19) = "3"  '代碼
                     s = s + 1
                End If
        Next
              ' 工作表3.Cells(i, 17) = "find"
End Sub

  多做多想多學習,少看少錯少迷途

  多做=多多練習,多多編寫。
  多想=想想為什麼人家程式要那樣寫,如果換成自己,又會怎寫。
  多學習=學習人家的發問並解答,學習人家的寫法

  少看=只看不做也枉然

TOP

  1. Sub Load_State_Detail()
  2. Dim FRng As Range
  3. Dim A As Range, Rng As Range
  4. Dim i As Integer
  5. Dim LastRec As Integer
  6. Dim l As Integer
  7. Dim k As Integer
  8. Dim j As Integer


  9. j = 2
  10. LastRec = Sheets("state").Range("A1").CurrentRegion.Rows.Count
  11. fs = "W:\Payment Daily Report\DOCS RECEIVED N RELEASED RECORD.xlsx"
  12. Set Wb = Workbooks.Open(fs)
  13. With ThisWorkbook.Worksheets("State")
  14. k = Wb.Sheets("收件記錄").Range("A1").CurrentRegion.Rows.Count
  15. For l = 2 To LastRec

  16. Do
  17. If Worksheets("State").Range("A" & l).Value = Wb.Sheets("收件記錄").Range("A" & j).Value Then
  18. Worksheets("State").Range("J" & l).Value = Wb.Sheets("收件記錄").Range("h" & j)
  19. If (InStr(1, Worksheets("State").Cells(l, 10), "OBL") >= 1) Then Worksheets("State").Range("J" & l).Value = Wb.Sheets("收件記錄").Range("h" & j) Else Worksheets("State").Range("J" & l).Value = ""
  20. End If
  21. j = j + 1
  22. Loop Until j = k Or (InStr(1, Worksheets("State").Cells(l, 10), "OBL") >= 1)
  23. Next
  24. End With
  25. End Sub
複製代碼
回復 7# kimbal

Test.rar (12.3 KB) DOCS RECEIVED N RELEASED RECORD.rar (226.13 KB)
個程式If Worksheets("State").Range("A" & l).Value = Wb.Sheets("收件記錄").Range("A" & j).Value Then 出現RUN TIME ERROR "9" SUBSCRIP OUT OF RANG?
我這個程式的作用是
在test excel堛漳tate sheet A欄的訂單號如果在DOCS RECEIVED N RELEASED RECORD表內有這個訂單號,而且在H欄堛漲r元含有"OBL", 那麼在test excel堛漳tate sheet的J欄就顯示DOCS RECEIVED N RELEASED RECORD表內H欄的字,否則就空格

TOP

回復 8# mark15jill

請幫我看看上面的問題,謝謝

TOP

        靜思自在 : 君子為目標,小人為目的。
返回列表 上一主題