簡體   English   中英

VBA,Excel從字符串中截取一部分

[英]VBA, excel cut a part from a string

我想從字符串中得到一部分。 我不熟悉VBA或異常的excel函數,但是我認為也許宏或VBA代碼可以為我提供幫助。

我需要從單元格的整個字符串中刪除所有內容,但總計之后的內容除外。 為了清除這一點,我需要在總數后面加上數字。 我不知道excel中的任何功能都可以解決我的問題。 是否有修飾之類的東西或可以識別“總計”並在之后給我編號的東西?

示例:在這個單元格中,我需要47和其他47

單元: Appvg-總計:47 GB-空閑:20 Gb; rootvg-總計:47-免費:<1 GB>

兩個總數將始終相同嗎? 如果是這樣,您可以使用以下公式(只需將其與數據放在同一行的單元格中,假設您的單元格為A1):

=TRIM(MID(A2,SEARCH("total: ",A2)+LEN("total: "),2))

如果GB號碼大於兩位數,請將“ 2”更改為“ 3”。 您還有其他示例單元數據需要完善以改善上述情況嗎?

編輯:如果數字不同,則可以使用以下代碼: =MID(A1,SEARCH("appvg - total: ",A1)+LEN("appvg - total: "),2)&", "&MID(A1,SEARCH("rootvg - total: ",A1)+LEN("rootvg - total: "),2)

編輯2:我正在研究公式,因此如果GB大於兩位數(例如964 GB),則可以有一種方法來動態地選擇出來。 這似乎可以處理最多4位數字: =MID(A4,SEARCH("appvg - total: ",A4)+LEN("appvg - total: "),SEARCH(" G",A4)-SEARCH(":",A4)-2)&", "&MID(A4,SEARCH("rootvg - total: ",A4)+LEN("rootvg - total: "),SEARCH(" G",A4,SEARCH(" G",A4)-SEARCH(":",A4)-1)-SEARCH(":",A4)-2)

如果您想要一個真正的VBA解決方案,則可以使用以下函數至少獲取第一個數字(可以創建一個相似的函數以獲取第二個數字):

Function first_number(a_string As String) As Double
    'assumes one space after each "Total:" occurrence
    loc_of_first_total = InStr(1, a_string, "Total")
    end_of_first_number = InStr(loc_of_first_total + 7, a_string, " ") - 1
    first_number = CDbl(Mid(a_string, loc_of_first_total + 7, end_of_first_number - loc_of_first_total - 6))
End Function

如果您不熟悉InStr,那么對Google搜索的解釋可能會比我提供的更好。 我使用的所有數字(例如7、1、6)僅是假設您假設“總計:”加一個空格(在每個需要的數字之前)時該數字所處位置的數學公式。 我不確定小數是否可以存在,因此我返回了Double,但是根據您對數據的期望,它可以是Integer或Long。

對於第一個實例:(其中WordToFind可能是“總計:”

=LOOKUP(2,1/MID(A1,SEARCH(WordToFind,A1)+LEN(WordToFind)+1,ROW(INDIRECT("1:5"))),MID(A1,SEARCH(WordToFind,A1)+LEN(WordToFind)+1,ROW(INDIRECT("1:5"))))

對於第二個實例:

=LOOKUP(2,1/MID(A1,SEARCH(WordToFind,A1,SEARCH(WordToFind,A1)+1)+LEN(WordToFind)+1,ROW(INDIRECT("1:5"))),MID(A1,SEARCH(WordToFind,A1,SEARCH(WordToFind,A1)+1)+LEN(WordToFind)+1,ROW(INDIRECT("1:5"))))

如果需要更多實例,則VBA可能是一個更好的選擇。 如果您的數字部分可能超過5個字符,請在“ 1:5”中更改“ 5”

我假設您需要將結果放在兩個單獨的單元格中。 另請注意,要搜索的鍵字符串“總計:”

單元格A11具有以下值(使用不同的總數來驗證不同的結果)

Appvg-總計:147 GB-免費:20 Gb; rootvg-總計:247-免費:<1 GB>

使用此公式可獲得總計:147 (GB)

=LEFT(SUBSTITUTE(A11,LEFT(A11,LEN("Total:")+SEARCH("Total:",A11)),""),
-1+SEARCH(" ",SUBSTITUTE(A11,LEFT(A11,LEN("Total:")+SEARCH("Total:",A11)),"")))

使用此公式可獲得總計:247 (-免費)

=LEFT(SUBSTITUTE(A11,LEFT(A11,
LEN("Total:")+SEARCH("|",SUBSTITUTE(A11,"Total:","|",2))),""),
-1+SEARCH(" ",SUBSTITUTE(A11,
LEFT(A11,LEN("Total:")+SEARCH("|",SUBSTITUTE(A11,"Total:","|",2))),"")))

萬一密鑰字符串發生更改,可以使用一個單元格輸入要搜索的密鑰字符串 如果是這種情況,請使用以下公式:

在單元格A12中輸入關鍵字字符串 “總計:”

使用此公式可獲得總計:147 (GB)

=LEFT(SUBSTITUTE(A11,LEFT(A11,LEN(A12)+SEARCH(A12,A11)),""),
-1+SEARCH(" ",SUBSTITUTE(A11,LEFT(A11,LEN(A12)+SEARCH(A12,A11)),"")))

使用此公式可獲得總計:247 (-免費)

=LEFT(SUBSTITUTE(A11,LEFT(A11,
LEN(A12)+SEARCH("|",SUBSTITUTE(A11,A12,"|",2))),""),
-1+SEARCH(" ",SUBSTITUTE(A11,LEFT(A11,
LEN(A12)+SEARCH("|",SUBSTITUTE(A11,A12,"|",2))),"")))

所有公式均有效,無論數字的長度如何

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM