我正在尝试使用Excel中的函数从字符串中提取所有数字。 在第二次,我想提取字符串中包含的最大值。
我的字符串看起来像: ATCG = 12.5,TTA = 2.5,TGC = 60.28
期望的输出: 60.28
第一次,我试图用我的功能提取所有数字,但它只在第一个数字上停止。
Function MyCode(ByVal txt As String) As String
With CreateObject("VBScript.RegExp")
.Pattern = "\d.+"
If .test(txt) Then MyCode = .Execute(txt)(0)
End With
End Function
答案 0 :(得分:1)
以下是一些 VBA (非vbscript),您可以根据自己的需要进行调整:
String
注:
这会产生Number
而不是=MyCode(A1)
。
修改#1:强>
在Excel-VBA中,代码必须放在标准模块中。
用户定义函数(UDF)非常易于安装和使用:
如果保存工作簿,UDF将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx
删除UDF:
从Excel使用UDF:
private Date getDate(List<BrowseHistory> historyList, String subscribe, String cancelled) {
return IntStream.range(0, historyList.size())
.filter(i -> isContainsStatus(historyList.get(i), subscribe) && isStatusExist(historyList, cancelled, i))
.mapToObj(historyList::get)
.map(BrowseHistory::getCreated)
.findFirst() // find first that got through those filters
.orElse(null);
}
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
有关UDF的详细信息,请参阅:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
必须启用宏才能使其生效!
答案 1 :(得分:1)
如果你有一个包含AGGREGATE
功能的Excel(2010+)版本,你真的不需要VBA,你可以使用工作表公式来实现:
=AGGREGATE(14,6,--TRIM(MID(SUBSTITUTE(SUBSTITUTE(A1,",",REPT(" ",99)),"=",REPT(" ",99)),seq_99,99)),1)
其中 seq_99 是引用的命名公式:
=IF(ROW(INDEX($1:$65535,1,1):INDEX($1:$65535,255,1))=1,1,(ROW(INDEX($1:$65535,1,1):INDEX($1:$65535,255,1))-1)*99)
该函数产生一个数组,其中一些值是数字; AGGREGATE
函数返回数组中的最大值,忽略错误。
下面的公式适用于早期版本的Excel,必须输入为数组公式,方法是在按下 ctrl + shift 时按输入如果您正确执行此操作,Excel会在公式周围放置大括号{...}
。
如果您有2007,则可以使用IFERROR
=MAX(IFERROR(--TRIM(MID(SUBSTITUTE(SUBSTITUTE(A2,",",REPT(" ",99)),"=",REPT(" ",99)),seq_99,99)),0))
对于早期版本,您可以使用:
=MAX(IF(ISERROR(--TRIM(MID(SUBSTITUTE(SUBSTITUTE(A3,",",REPT(" ",99)),"=",REPT(" ",99)),seq_99,99))),0,--TRIM(MID(SUBSTITUTE(SUBSTITUTE(A3,",",REPT(" ",99)),"=",REPT(" ",99)),seq_99,99))))
答案 2 :(得分:0)
将所有混合数字收集为数组中的双精度数并返回最大值。
Option Explicit
Option Base 0 '<~~this is the default but I've included it because it has to be 0
Function maxNums(str As String)
Dim n As Long, nums() As Variant
Static rgx As Object, cmat As Object
'with rgx as static, it only has to be created once; beneficial when filling a long column with this UDF
If rgx Is Nothing Then
Set rgx = CreateObject("VBScript.RegExp")
End If
maxNums = vbNullString
With rgx
.Global = True
.MultiLine = False
.Pattern = "\d*\.\d*"
If .Test(str) Then
Set cmat = .Execute(str)
'resize the nums array to accept the matches
ReDim nums(cmat.Count - 1)
'populate the nums array with the matches
For n = LBound(nums) To UBound(nums)
nums(n) = CDbl(cmat.Item(n))
Next n
'test array
'Debug.Print Join(nums, ", ")
'return the maximum value found
maxNums = Application.Max(nums)
End If
End With
End Function
答案 3 :(得分:0)
您的小数点分隔符可能与美国小数点分隔符不同。
render() {
return (
<View>
<Image source={remoteImage} style={styles.fullscreen}>
<View style={styles.container}>
<Image source={playIcon} style={styles.icon} />
<Image source={volumeIcon} style={styles.icon} />
<View style={styles.progress}>
<View style={styles.progressBar} />
</View>
<Image source={hdIcon} style={styles.icon} />
<Image source={fullScreenIcon} style={styles.icon} />
</View>
</Image>
</View>
);
}