Если идентификатор совпадает, вставьте новую строку и итоговые значения в другие столбцы.

У меня есть электронная таблица, в которой около 19 столбцов, а количество строк постоянно меняется. Столбец A содержит «ID товаров», столбец N содержит «Количество проданных товаров», а столбец O содержит «Количество товаров». Я пытаюсь создать макрос, который вставляет строку каждый раз, когда изменяется «Идентификатор товара» в столбце A, и суммирует «Количество проданных товаров», а также «Количество товаров». Я также хотел бы скопировать «Идентификатор элемента» в эту новую строку, если это возможно. Если бы кто-нибудь мог помочь мне с этим, я был бы ОЧЕНЬ признателен.

ОБНОВЛЕНИЕ: см. ниже скриншоты примера электронной таблицы (я пытался опубликовать изображения, но, поскольку я новичок, думаю, у меня еще нет такого уровня доступа).

Как таблица выглядит сейчас:

пример1

Как бы я хотел, чтобы электронная таблица выглядела после запуска макроса:

пример2


person cahedger    schedule 29.06.2015    source источник
comment
1. Вы не упомянули электронную таблицу, над которой работаете — это Excel? 2. Отформатированы ли ваши данные как реальный объект таблицы? или это просто значения, помещенные в электронную таблицу и отформатированные так, чтобы она выглядела как таблица, но реальный объект таблицы не создается? 3. В заголовке вы упоминаете столбцы, но неясно, что вы подразумеваете под этим 4. Где именно вы хотите создать новую строку? Чуть ниже соответствующего? Внизу стола? В новом листе? так далее?   -  person ZygD    schedule 30.06.2015
comment
1) Это Excel 2) Данные представляют собой просто значения в электронной таблице... отформатированные как 1 запись в строке (без таблиц) 3) Электронная таблица содержит разные столбцы... поэтому, например, столбец A будет идентификатором элемента (строка 1 будет выглядеть как 59575, строка 2... 59575, строка 3... 51738 и т. д.). 4) Точно так же, как вы сказали, я хотел бы, чтобы новая строка вставлялась каждый раз, когда значения в столбце A изменяются (так, например, в моем последнем ответе он будет вставлять строку после строки 2, поскольку идентификатор элемента изменяется) Еще раз спасибо за вашу помощь   -  person cahedger    schedule 30.06.2015


Ответы (2)


Наилучшим вариантом для вас будет ДанныеПромежуточный итог. Это занимает меньше всего времени.

До:

before

1. Промежуточный итог находится в группе Структура:

subtotal

2. Подробности:

subtotal_details

После:

после

person ZygD    schedule 30.06.2015
comment
Был ли ответ полезен? - person ZygD; 09.07.2015

ZygD, я ценю вашу помощь. Я действительно искал макрос, так как это всего лишь один из примерно 7 макросов, которые будут связаны с решением с одной кнопкой для кого-то еще, у кого нет времени/знаний для подсчета этих строк.

Я придумал макрос, который копировал электронную таблицу на временный лист. В этом временном листе он добавляет серую строку каждый раз, когда изменяется идентификатор, и подсчитывает промежуточные итоги по 2 вышеупомянутым столбцам... при копировании всей остальной информации. Однако это привело к тому, что Excel на некоторое время завис... поэтому вместо этого я удалил все столбцы, кроме тех, которые мне нужны, промежуточные итоги и удалил все строки, кроме тех, которые выделены серым цветом (промежуточные итоги). Вот макрос, который я придумал (если кто-то еще ищет что-то подобное):

Sub SubTotal()

Dim i As Long
Dim numberOfRows As Long
Dim j

With Application
    .ScreenUpdating = False
    .EnableEvents = False
End With

'Copies SellerTotals to SellerTotals(Temp)
Sheets("SellerTotals").Select
Sheets("SellerTotals").Copy Before:=Sheets("Pacing")
Sheets("SellerTotals (2)").Select
Sheets("SellerTotals (2)").Name = "SellerTotals(Temp)"
Worksheets("SellerTotals(Temp)").Activate

Range("B:M,P:T").Select
Selection.Delete Shift:=xlToLeft

' number of IDs
numberOfRows = Cells(Rows.Count, "A").End(xlUp).Row

' do bottom row first
Cells(numberOfRows + 1, 1).Value = Cells(numberOfRows, 1).Value
Cells(numberOfRows + 1, 2).FormulaR1C1 = "=SUMIF(R[-" & numberOfRows - 1 & "]C[-1]:R[-" & numberOfRows - (numberOfRows - 1) & "]C[-1],""" & Cells(numberOfRows, 1).Value & """,R[-" & numberOfRows - 1 & "]C[0]:R[-" & numberOfRows - (numberOfRows - 1) & "]C[0])"
Cells(numberOfRows + 1, 3).FormulaR1C1 = "=SUMIF(R[-" & numberOfRows - 1 & "]C[-2]:R[-" & numberOfRows - (numberOfRows - 1) & "]C[-2],""" & Cells(numberOfRows, 1).Value & """,R[-" & numberOfRows - 1 & "]C[0]:R[-" & numberOfRows - (numberOfRows - 1) & "]C[0])"

' convert to value
Cells(numberOfRows + 1, 2).Value = Cells(numberOfRows + 1, 2).Value
Cells(numberOfRows + 1, 3).Value = Cells(numberOfRows + 1, 3).Value

Range(Cells(numberOfRows + 1, 1), Cells(numberOfRows + 1, 3)).Interior.Color = RGB(192, 192, 192)

' insert blank row in between each group of IDs
' loop backwards because we are inserting rows
For i = numberOfRows To 3 Step -1
If Cells(i, 1).Value <> Cells(i - 1, 1).Value Then
  Cells(i, 1).EntireRow.Insert xlShiftDown

  ' copy ID name down
  Cells(i, 1).Value = Cells(i - 1, 1).Value

  ' put formula into Total & Total Cap field
  Cells(i, 2).FormulaR1C1 = "=SUMIF(R[-" & i - 1 & "]C[-1]:R[-" & i - (i - 1) & "]C[-1],""" & Cells(i, 1).Value & """,R[-" & i - 1 & "]C[0]:R[-" & i - (i - 1) & "]C[0])"
  Cells(i, 3).FormulaR1C1 = "=SUMIF(R[-" & i - 1 & "]C[-2]:R[-" & i - (i - 1) & "]C[-2],""" & Cells(i, 1).Value & """,R[-" & i - 1 & "]C[0]:R[-" & i - (i - 1) & "]C[0])"

  ' convert to value
  Cells(i, 2).Value = Cells(i, 2).Value
  Cells(i, 3).Value = Cells(i, 3).Value

  Range(Cells(i, 1), Cells(i, 3)).Interior.Color = RGB(192, 192, 192)

End If
Next i

  ' Delete Blank Rows

    For j = Range("A1").End(xlDown).Row To 2 Step -1
    If Cells(j, 1).Interior.Color <> RGB(192, 192, 192) Then Cells(j, 1).EntireRow.Delete

Next j

End Sub
person cahedger    schedule 10.07.2015