Top.Mail.Ru
Ответы

Вопрос по програмированию exel и VBA

Есть сводная таблица(наименования подразделений и наименование товара)
Нужно что бы Excel проверяли есть ли и у подразделения товар оздавал строку с наименованием подразделения и после нее в каждой строк наименование товара и количество из ячейки. После того как закончатся товары, нужно что бы следующее подразделение начиналось после предыдущего. Возможно ли это сделать без VBA и как вкратце?

По дате
По рейтингу
Аватар пользователя
Новичок

Есть сводная таблица(наименования подразделений и наименование товара)

есть - где? к вопросу ничего не приложено. почему именно сводная?
хотелки свои нужно не только описывать, но и показывать.

Нужно что бы Excel проверяли есть ли и у подразделения товар оздавал строку с наименованием подразделения и после нее в каждой строк наименование товара и количество из ячейки.

если нужно чтобы что-то происходило само, помимо расчётов - нужно писать макросы.

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

а тут не помешала бы пояснительная бригада.
з.ы. это всё и так звучит как функционал сводной таблицы.

Аватар пользователя
Просветленный

### Структура данных

Допустим, у вас есть следующие данные:

123456789101112131415
 | Подразделение | Товар         | Количество |  
 
|---------------|---------------|------------|  
 
| Отдел A       | Товар 1       | 5          |  
 
| Отдел A       | Товар 2       | 3          |  
 
| Отдел B       | Товар 3       | 7          |  
 
| Отдел B       | Товар 4       | 2          |  
 
| Отдел C       | Товар 5       | 10         |  
 
| ...           | ...           | ...        |  



### Шаги для создания необходимого представления:

1. Использование сводной таблицы:
- Вставьте сводную таблицу (Вставка -> Сводная таблица).
- Укажите диапазон данных.
- Перетащите "Подразделение" в область Строки.
- Перетащите "Товар" в область Строки.
- Перетащите "Количество" в область Значения.

2. Использование функции Слияние ячеек:
- После создания сводной таблицы для подразделения, объедините ячейки "Наименование подразделения" по аналогии с тем, как оно представлено в вашем примере.
- Это можно сделать вручную для каждого подразделения.

### Стандартные формулы Excel для создания отчета:

Давайте предположим, что "Подразделение" находится в столбце A, "Товар" в столбце B и "Количество" в столбце C. Вот пример ручного создания аналогичного отчета с использованием функции ЕСЛИ, ПОВТОР и других.

12
 =ЕСЛИ(A2<>A1,A2 & ПОВТОР(CHAR(10), COUNTIF($A$2:$A$100, A2)) & B2, B2) 
 

Подразумевает, что функция ЕСЛИ проверяет изменение подразделения для текущей строки и выводит имя подразделения, если оно изменилось, а затем строки с соответствующими данными.

12
 =ЕСЛИ(A2<>A1, ПОВТОР(CHAR(10), COUNTIF($A$2:$A$100, A2)) & C2, C2) 
 

### Использование формул:

1. В столбце D вставьте формулу, которая будет объединять данные при изменении подразделения.

123
    =ЕСЛИ(A2<>A1, A2, "") 
    
 

2. В столбце E добавьте формулу для товара:

123
    =B2 
    
 

3. В столбце F добавьте формулу для количества:

1
    =C2  

### Скрипт VBA (альтернативный путь для автоматизации):

Если хотите все-таки использовать VBA для более автоматизированного подхода, код скрипта VBA:

1234567891011121314151617181920212223
 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 сам в ней всё вышеописанное делает !