2010-11-03 96 views
1

我有一個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 

我需要檢查,如果沒有接觸狀態,即之前的數值「 - 」小於數值在最大probabilty前「 - ',那麼我需要最大概率的全部值更新聯繫人狀態字段

例如,

10-Working  20- Engagement 

10工作應該由20-參與

OR

代替我們可以有20-參與在新的一列,如果提到空調上面是滿意的,如果更換的接觸狀態列很難 怎麼能做到這一點?

+0

你想要一個宏來做這個嗎? – 2010-11-03 04:20:01

回答

2

這個小小的宏將會訣竅。只需將更改爲起始行,並將ColA/B更改爲您要使用的兩列。

請注意,GetNum返回-1如果在開始時沒有數字,在此實現中,意味着不需要複製。由於Closed Won因此不清楚你想要做什麼,所以我選擇了最安全的選項。如果您確實希望複製它,只需返回一個巨大的數字而不是-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 

將其上測試alt text

生成:

                                        alt text

1

這個宏會做什麼:

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!

1

如果您是靈活的關於實際數據,要做到這一點最簡單的方法是使兩列(可以隱藏在一些遠張):

0 NC 
10 Engagement 
30 Connect 
... 

然後用VLOOKUP(CELL_WITH_PROBABILITY, REGION_WITH_TABLE, 2, true)。所以,如果你把我的小三元素表放在一張紙的上角並在C1中出現概率,它看起來像VLOOKUP(A1:B3, C1, 2, true)