VBA,Excel从一个string中切出一部分

我想从string中获取一部分。 我不熟悉VBA或不寻常的Excel函数,但我想也许macros或VBA代码可以帮助我。

我需要从整个单元格中删除所有内容,除了Total之后。 要清楚这一点,我需要总数后面的数字。 我不知道什么function可以解决我的问题。 有没有什么修饰或什么东西,承认“总”,然后给我的数字?

例如:从这个单元我需要47和其他47

Cell: Appvg – Total:47 GB – Free: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:我在公式上工作,所以如果国标是大于两位数,如964 GB,有一种方法来dynamic地挑出来。 这似乎可以处理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解决scheme,这里有一个函数来获取至less第一个数字(可以创build一个类似的数字来获得第二个数字):

 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不熟悉,Googlesearch可能会得到比我所能提供的更好的解释。 我所使用的所有数字(例如7,1,6)只是在假设“Total:”加上一个空格之前存在的数字。 我不确定小数是否可以存在,所以我返回了一个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可能是更好的select。 如果您的号码部分可能超过5个字符,请在“1:5”中更改“5”

我假设你需要在两个分开的单元格的结果。 另请注意,要search的密钥string“Total:”

单元格A11具有以下值(使用不同的总数来validation不同的结果)

Appvg – Total:147 GB – Free: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))),""))) 

如果密钥string发生变化,可以使用单元格input密钥string进行search。 如果是这种情况,请使用以下公式:

密钥string “Total:”被input到单元格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))),""))) 

所有的公式都可以工作,不pipe数字的长度