2016-01-02 16 views
-1

對於我的工作,我已經創建了一個VBA代碼從一個報告,顯示當月購買的原材與所有賬目和庫存增加的新帳戶字段的三個字符。我需要從採購訂單編號中提取該區域,但這取決於採購類型。Excel中找到離開的變化

該區域將始終是6位數字左側的前三個字符:ABC 123456A。在這種情況下,我需要提取字母ABC。

但它取決於訂單的類型變化。某些訂單會在前面的訂單號和下劃線中添加一個子區域,例如XYZABC_ ABC 123456A。

如果訂單是新帳戶,右邊的最後一個字母是A,如果訂單是託運,它將是C,但是如果它是用於矯形器和假肢,它將更改爲OP:ABC 123456OP

我需要一個公式來幫助我專門提取前6位自帶三個字母的領土時的字符數可能會有所不同。請幫忙。

+2

'= IFERROR(MID (A1,FIND( 「_」,A1 +1,3)),LEFT(A1,3))'??? –

+0

如果德克公式不起作用,那麼您還沒有提供足夠的示例來顯示您的採購訂單號碼中可能存在的變化。 –

+0

它是您需要的工作表單元格中的公式,還是您需要的VBA代碼?你的問題和標籤有衝突。 – SilentRevolution

回答

1

如果你確實想要一個VBA解決方案,可以使用分割功能來存儲代碼的部分然後提取的最後一個數組項的前三個字母...

Dim Code As String: Code = "XYZABC_ABC123456A" 
Dim Arr() As String: Arr = Split(Code, "_") 
MsgBox Left(Arr(UBound(Arr)), 3) 
+0

還是:'公共職能引用代碼(代碼作爲字符串)作爲字符串:引用代碼=(編碼,InStr函數(代碼, 「_」)+ 1,3):結束Function'會更快:P –

+0

是 - 但假設將有隻有一個分區域或更少。在多個下劃線存在的情況下,[它不是真正提到,將永遠只能是一個或更少]那麼上面的代碼應該仍然返回正確的字符串 – Tragamor

+0

是,也不是......它不是說下劃線怎麼多需治療......如果只是看的第一個你會失敗......但asuming絕不會有不止一個,所有的代碼應該做的罰款...... –