Excel Macro условное форматирование косвенной ячейки

Я немного неопытен в Excel, но я постараюсь объяснить, что я пытаюсь сделать:

Я работаю в Excel 2010 и пытаюсь, чтобы макрос выполнял сложение на основе числа в столбце.

Например, я хочу, чтобы макрос добавлял значение на основе имени в столбце B и числа в столбце C. Для названия «02 Gloves-DISC» в колонке B я хотел добавить следующее на основе значения в колонке 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

person user1454348    schedule 13.06.2012    source источник
comment
Почему бы просто не добавить столбец для скидки и не рассчитать ее по вашей формуле?   -  person Jesse    schedule 13.06.2012
comment
Я предполагаю, что вы хотите, чтобы новое значение было вставлено в новый столбец. Причина, по которой я предполагаю, заключается в том, что если вы запустите макрос несколько раз, в конечном итоге все будет = 56, потому что, если вы продолжите его запускать, вы потеряете исходное начальное значение и в конечном итоге получите + 0,50 на все снова и снова и снова ...   -  person xQbert    schedule 13.06.2012
comment
запуск макроса с добавлением - одноразовая вещь. На самом деле у меня будет отдельная строка в макросе для каждого «имени класса». каждая группа имен классов будет иметь разные суммы для добавления к 'takeitprice'. часть «DISC» на самом деле является частью имени класса. есть также имя класса smae, но без «ДИСК». извините, если эта часть была немного запутанной.   -  person user1454348    schedule 14.06.2012


Ответы (1)


Два макроса для вас. Второй — общий, который я использую для поиска последней строки данных на листе.

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
person SpudmanWP    schedule 13.06.2012