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数字的长度
- Excel计算和VBA
- 如何将Excel数据移动到Access使用VBA和后期绑定(没有ADO,没有DAO) – DoCmd.TransferSpreadsheet运行时错误424?
- 将两个数据范围组合成一个范围(Google Drive Excel)
- Excel:使用该单元格中的数据填充RGB颜色的单元格
- 使用R在数组元素Q 中将variables名“QW1I5K20”存储起来
- SUMvariables值为R1C1公式
- Excel中的散点图使用xy散点图图的时间数据而不转换为数据序列
- 如何在Excel中select一个设置单元格颜色的date?
- 你可以用xlswrite,matlab上的类似书面列标题分组数据?