繁体   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