2017-06-22 109 views
0

我想從字符串中選擇一個子字符串。字符串中的子字符串

例如:我想從下面的字符串中選擇從「T」開始的表號。

變化表T682(SAP TABLE)

表的起始位置不一樣,即第17位,而在表名中的字符不是恆定的。所以我基本上需要一個從第17個位置選取的子字符串,直到它找到一個空格。我正在使用下面的代碼,但它似乎並沒有工作。

Position = InStr(1, A, " ") 
TableNo = Mid(A, 17, Position) 
+0

不前空間後總是有開放的支架? –

+0

@ DarrenBartrup-Cook是的它的確如此 –

+0

我想說你可以在支架上使用INSTR,但是字符18之後的第一個空格也可以工作。 –

回答

1

以下是你需要做的:

Dim A As String 
Dim StartPosition As Integer 
Dim EndPosition As Integer 

A = "Changes in table T682 (SAP TABLE)" 
StartPosition = InStr(1, A, "T") 
EndPosition = InStr(StartPosition, A, " ") 
tableno = Mid(A, StartPosition, EndPosition - StartPosition) 
0

空間T682之前字符17,人品18表開始,所以我們只需要找到之後的空間。

GetTable函數也可以用作工作表函數,例如,在B1單元格中輸入=GetTable(A1)返回T682。

Sub Test() 

    Debug.Print GetTable("Changes in table T682 (SAP TABLE)") 

End Sub 

Public Function GetTable(Target As Range) As String 

    GetTable = Mid(Target, 18, InStr(18, Target, " ") - 18) 

End Function 
1

有在你的代碼兩個錯誤:
1. INSTR的第一個參數應該是18.你想找到的起點後的第一個空間
2月中旬的最後一個參數是人物

的號碼,這樣你的代碼應該是這個樣子:

Position = InStr(18, a, " ") 
TableNo = Mid(a, 18, Position - 18) 
+0

我收到一個錯誤,提示「無效的過程調用或參數」。 –

+0

如果您嘗試執行一些無效的操作,例如獲取負數字符,就會發生這種情況。查看代碼每一步中的值。我在這裏猜測,但我認爲你需要了解VBE中的調試可能性 – Sam

0

另一種方式

s = "Changes in table T682 (SAP TABLE)" 
Debug.Print Trim(Split(Split(s, "(")(0), "T")(1)) 

我假設以下。字符串的格式將是恆定的,即

  1. 將不會有其他資本T(
  2. 將只有1 (
  3. 數量T*將是(