VBA,excel从字符串中删除了一部分

时间:2015-05-06 19:03:23

标签: excel vba excel-vba trim

我想从字符串中获取一部分内容。我不熟悉VBA或不寻常的Excel功能,但我认为宏或VBA代码可以帮助我。

我需要从细胞中删除整个字符串中的所有内容,除了Total之后的内容。为了清除这一点,我需要总数之后的数字。我不知道excel中的任何函数可以解决我的问题。有没有类似修剪或某些东西可以识别'总数'并在那之后给我数字?

实施例: 从这个单元格我需要47和其他47

Cell: Appvg - 总计:47 GB - 免费:20 Gb; rootvg - 总计:47 - 免费:< 1 GB>

4 个答案:

答案 0 :(得分:1)

两个Totals总是一样吗?如果是这样,你可以使用这个公式(只需将它放在与数据相同的行中的单元格中,我假设你的Cell是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)

答案 1 :(得分:0)

如果你想要一个真正的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,谷歌搜索可能会得到比我提供的更好的解释。我使用的所有数字(例如,7,1,6)只是数字的数字,如果你假设“Total:”加上一个空格存在于每个数字之前。我不确定小数是否存在,所以我返回了一个Double,但它可能是整数或长整数,具体取决于您对数据的期望。

答案 2 :(得分:0)

对于第一个实例:(其中WordToFind可能是“Total:”

=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”

答案 3 :(得分:0)

我假设您需要两个分开的单元格中的结果。 另请注意,要搜索的键字符串"总计:"

单元格 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))),"")))

无论数字长度如何,所有公式都有效