Вопрос по програмированию exel и VBA
Есть сводная таблица(наименования подразделений и наименование товара)
Нужно что бы Excel проверяли есть ли и у подразделения товар оздавал строку с наименованием подразделения и после нее в каждой строк наименование товара и количество из ячейки. После того как закончатся товары, нужно что бы следующее подразделение начиналось после предыдущего. Возможно ли это сделать без VBA и как вкратце?
Есть сводная таблица(наименования подразделений и наименование товара)
есть - где? к вопросу ничего не приложено. почему именно сводная?
хотелки свои нужно не только описывать, но и показывать.
Нужно что бы Excel проверяли есть ли и у подразделения товар оздавал строку с наименованием подразделения и после нее в каждой строк наименование товара и количество из ячейки.
если нужно чтобы что-то происходило само, помимо расчётов - нужно писать макросы.
После того как закончатся товары, нужно что бы следующее подразделение начиналось после предыдущего.
а тут не помешала бы пояснительная бригада.
з.ы. это всё и так звучит как функционал сводной таблицы.
### Структура данных
Допустим, у вас есть следующие данные:
| Подразделение | Товар | Количество |
|---------------|---------------|------------|
| Отдел A | Товар 1 | 5 |
| Отдел A | Товар 2 | 3 |
| Отдел B | Товар 3 | 7 |
| Отдел B | Товар 4 | 2 |
| Отдел C | Товар 5 | 10 |
| ... | ... | ... |
### Шаги для создания необходимого представления:
1. Использование сводной таблицы:
- Вставьте сводную таблицу (Вставка -> Сводная таблица).
- Укажите диапазон данных.
- Перетащите "Подразделение" в область Строки.
- Перетащите "Товар" в область Строки.
- Перетащите "Количество" в область Значения.
2. Использование функции Слияние ячеек:
- После создания сводной таблицы для подразделения, объедините ячейки "Наименование подразделения" по аналогии с тем, как оно представлено в вашем примере.
- Это можно сделать вручную для каждого подразделения.
### Стандартные формулы Excel для создания отчета:
Давайте предположим, что "Подразделение" находится в столбце A, "Товар" в столбце B и "Количество" в столбце C. Вот пример ручного создания аналогичного отчета с использованием функции ЕСЛИ, ПОВТОР и других.
=ЕСЛИ(A2<>A1,A2 & ПОВТОР(CHAR(10), COUNTIF($A$2:$A$100, A2)) & B2, B2)
Подразумевает, что функция ЕСЛИ проверяет изменение подразделения для текущей строки и выводит имя подразделения, если оно изменилось, а затем строки с соответствующими данными.
=ЕСЛИ(A2<>A1, ПОВТОР(CHAR(10), COUNTIF($A$2:$A$100, A2)) & C2, C2)
### Использование формул:
1. В столбце D вставьте формулу, которая будет объединять данные при изменении подразделения.
=ЕСЛИ(A2<>A1, A2, "")
2. В столбце E добавьте формулу для товара:
=B2
3. В столбце F добавьте формулу для количества:
=C2
### Скрипт VBA (альтернативный путь для автоматизации):
Если хотите все-таки использовать VBA для более автоматизированного подхода, код скрипта VBA:
Sub CreateCustomReport()
Dim ws As Worksheet
Dim r As Long, lastRow As Long
Dim currentDept As String
Dim outputRow As Long
Set ws = ThisWorkbook.Sheets("Sheet1") ' Update with your sheet name
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
outputRow = 1
For r = 2 To lastRow
If ws.Cells(r, 1).Value <> currentDept Then
currentDept = ws.Cells(r, 1).Value
ws.Cells(outputRow, 1).Value = currentDept
outputRow = outputRow + 1
End If
ws.Cells(outputRow, 1).Value = ws.Cells(r, 2).Value
ws.Cells(outputRow, 2).Value = ws.Cells(r, 3).Value
outputRow = outputRow + 1
Next r
End Sub
Эмммм.
Есть сводная таблица
Если есть Сводная таблица, то Excel сам в ней всё вышеописанное делает !