2012-06-13 127 views
0

我用Excel有點經驗,但我會盡我所能解釋什麼是我想要做的事:Excel宏條件格式間接細胞

我在Excel 2010中的工作,而且我m試圖讓一個宏根據列中的數字進行添加。

例如,我想讓宏根據B列中的名稱和C列中的數字添加一個值。對於B列中的名稱「02 Gloves-DISC」,我想根據C列中的值添加以下內容:如果它是< 5,+8.83。如果是< 10,+7。如果它是< 20,+5。如果它是< 30,+3。如果它是< 40,+1。如果它是< 56,+.50。

我有一些類似的,但我無法得到它做搜索,並計算每行:

Selection.Replace What:="02 Gloves-DISC", Replacement:="=IF(C2<5, C2+8.83, IF(C2<10, C2+7, IF(C2<20, C2+5, IF(C2<30, C2+3, IF(C2<40, C2+1, C2+.5)))))", LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
     ReplaceFormat:=False 

我希望這個信息幫助。預先感謝您的任何幫助。我已閱讀了有關R1C1的參考資料,但似乎無法使其發揮作用。

這是我的工作數據的例子:

SKU   ClassName   TakeItPrice 
HJC10569002 02 Gloves-DISC   38.93 
HJC1222066 02 Gloves-DISC   49.491 
HJC1224011 02 Gloves-DISC   40.491 
HJC1228062 02 Gloves-DISC   36.991 
HJC152100 01 First Class-DISC 13.191 
HJC152200 01 First Class-DISC 26.99 
HJC152202 01 First Class-DISC 31.491 
HJC180000 01 First Class-DISC 11.891 
HJC190005 01 First Class-DISC 11.891 
HJC350005 01 First Class-DISC 11.891 
+1

爲什麼不只是添加一個折扣列並計算它與您的公式? – Jesse

+0

我假設你想要將新值插入到新列中。我認爲這是因爲如果你運行宏多次,最終所有內容都會大於等於56,因爲如果你繼續運行它,你就會失去原始的初始值,並且事實上eventualyl會達到+ .50以上的所有內容... – xQbert

+0

運行宏的增加是一次性的事情。實際上,我將在宏的每個'classname'中有一個單獨的行。每個類名組將具有不同的數量以添加到'takeitprice'中。那裏的'DISC'部分實際上是類名的一部分。還有smae classname,但沒有「DISC」。對不起,如果那部分有點混亂。 – user1454348

回答

0

兩個宏爲你..第二個是一個通用的一個我用它來尋找數據的最後一排片。

Public Sub addDisc() 
    Dim Class As Long 
    Dim Price 
    Dim myRow 

    For myRow = 2 To xlLastRow(ActiveSheet.Name) 'Optional to find last row 
    Class = CLng(Left(Cells(myRow, 2), 2)) 
    If Class < 5 Then 
     Cells(myRow, 3) = Cells(myRow, 3) + 8.83 
    ElseIf Class < 10 Then 
     Cells(myRow, 3) = Cells(myRow, 3) + 7 
    ElseIf Class < 20 Then 
     Cells(myRow, 3) = Cells(myRow, 3) + 5 
    ElseIf Class < 30 Then 
     Cells(myRow, 3) = Cells(myRow, 3) + 3 
    ElseIf Class < 40 Then 
     Cells(myRow, 3) = Cells(myRow, 3) + 1 
    ElseIf Class < 56 Then 
     Cells(myRow, 3) = Cells(myRow, 3) + 0.5 
    End If 
    Next myRow 
End Sub 


Public Function xlLastRow(Optional WorksheetName As String) As Long 
    ' find the last populated row in a worksheet 
    If WorksheetName = vbNullString Then WorksheetName = ActiveSheet.Name 
     With Worksheets(WorksheetName) 
     On Error Resume Next 
     xlLastRow = .Cells.Find("*", .Cells(1), xlFormulas, _ 
     xlWhole, xlByRows, xlPrevious).Row 
     If Err <> 0 Then xlLastRow = 0 
     End With 
End Function