Excel公式帮助
我有一个2列的Excel表
Contact Status Max Probability 80-Opp Closed Won 0-NC Closed Won 40-Pending 30-Connect 10-Working 20- Engagement 80-Opportunity 30-Connect 40-Pending 10- Engagement
我需要检查是否在联系状态,即“ – ”之前的数字值小于数字值的最大概率之前“ – ”,然后我需要最大概率的整体值更新联系人状态字段
例如。
10-Working 20- Engagement
10-工作应该由20-订婚取代
要么
如果上面提到的条件满足,如果更换联系人状态栏很困难,我们可以有20-新的列中的订婚如何实现这一目标?
这个小macros将会诀窍。 只需将Row
更改为起始行,将ColA/B
更改为您要使用的两列。
请注意,如果在开始时没有数字, GetNum
将返回-1
,在此实现中,表示不进行复制。 目前还不清楚你想要做什么,所以我select了最安全的select。 如果你想复制,只需返回一个巨大的数字,而不是-1
。
Option Explicit Function GetNum(s As String) As Integer If Mid(s, 1, 1) < "0" Or Mid(s, 1, 1) > "9" Then GetNum = -1 Else GetNum = Val(s) End If End Function Sub Macro1() Dim Row As String Dim ColA As String Dim ColB As String ColA = "A" ColB = "B" Row = "2" While Range(ColA & Row).Value <> "" If GetNum(Range(ColA & Row).Value) < GetNum(Range(ColB & Row).Value) Then Range(ColA & Row).Value = Range(ColB & Row).Value End If Row = CStr(Val(Row) + 1) Wend End Sub
这是testing:
生成:
这个macros会做:
Sub a() ColumnContSt=1 ColumnMaxProb=2 i = 1 While (Cells(i, 2) <> "") colB = Cells(i, ColumnMaxProb) colA = Cells(i, ColumnContSt) posB = InStr(1, colB, "-") posA = InStr(1, colA, "-") If (posB <> 0 And posA <> 0) Then intColB = CInt(Mid(colB, 1, posB - 1)) intColA = CInt(Mid(colA, 1, posA - 1)) If (intColA < intColB) Then Cells(i, 1) = Cells(i, 2) End If End If i = i + 1 Wend End Sub
只需将ColumnContSt = 1和ColumnMaxProb = 2更改为您的实际列数即。 A = 1,B = 2等
HTH!
如果您对实际数据很灵活,最简单的方法是制作两列(可以隐藏在一些很远的表格中):
0 NC 10 Engagement 30 Connect ...
然后使用VLOOKUP(CELL_WITH_PROBABILITY, REGION_WITH_TABLE, 2, true)
。 所以,如果你把我的小三元素表放在一张纸的上angular,并在C1的概率,它看起来像VLOOKUP(A1:B3, C1, 2, true)