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)