Добрый день! Возникла такая сложность, прошу у вас помощи. Задача стояла такая: необходимо в файле Excel создать с помощью формулы/макроса таблицу, способную отражать обороты по расчетному счету по конкретным контрагентам. Работать должно так: в таблицу Исходные данные заносится информация по операции: дата, наименование контрагента, наименование операции, приход/расход, комментарии, остаток на счете контрагента. После нажатия кнопки запуска макроса происходит поиск листа с названием, соотв. названию организации контрагента. Если такого листа нет - он создается и в него автоматически заносятся данные по этому контрагенту и операции. Если такой лист уже есть, то в нем создается еще одна строчка к уже имеющимся с конкретно этой операцией, после чего остаток на счете конктрагента обновляется в зависимости от прихода/расхода по операции. Хочу обратить внимание, что остаток может быть отрицательным, это нужно для отслеживания взаиморасчета. http://www.excelworld.ru/forum/2-4113-1 Здесь я нашел макрос, позволяющий создавать листы с названием контрагентов, перечисленных в исходных данных
[vba]
Код
Sub Итог() Application.ScreenUpdating = False Dim i As Long For i = 1 To Sheets("Исходные данные").Range("B" & Rows.Count).End(xlUp).Row On Error Resume Next Sheets(Sheets("Исходные данные").Range("B" & i).Value).Select If Err And Sheets("Исходные данные").Range("B" & i) <> "" Then 'Sheets.Add After:=Sheets(Sheets.Count) Sheets("ШАБЛОН").Copy After:=Sheets(Sheets.Count) ActiveSheet.Name = Sheets("Исходные данные").Range("B" & i) End If Next i Worksheets("Исходные данные").Activate Application.ScreenUpdating = True End Sub
[/vba]
После этого была предпринята скромная попытка с помощью
Код
=ЕСЛИ(ЕНД(ВПР
подхватывать данные из исходного листа. Попытка не увенчалась успехом, потому что данные подхватывались исходя из первой операции по контрагенту. А в случае внесения изменений в операцию на исходном листе, эти изменения не применялись к уже созданным листам организаций.
Буду очень признателен за любую помощь в решении этой сложности. Извините, если описание проблемы получилось сумбурное, готов дать максимально развернутые ответы на ваши уточняющие вопросы. Заранее спасибо и хорошего дня!:)
Добрый день! Возникла такая сложность, прошу у вас помощи. Задача стояла такая: необходимо в файле Excel создать с помощью формулы/макроса таблицу, способную отражать обороты по расчетному счету по конкретным контрагентам. Работать должно так: в таблицу Исходные данные заносится информация по операции: дата, наименование контрагента, наименование операции, приход/расход, комментарии, остаток на счете контрагента. После нажатия кнопки запуска макроса происходит поиск листа с названием, соотв. названию организации контрагента. Если такого листа нет - он создается и в него автоматически заносятся данные по этому контрагенту и операции. Если такой лист уже есть, то в нем создается еще одна строчка к уже имеющимся с конкретно этой операцией, после чего остаток на счете конктрагента обновляется в зависимости от прихода/расхода по операции. Хочу обратить внимание, что остаток может быть отрицательным, это нужно для отслеживания взаиморасчета. http://www.excelworld.ru/forum/2-4113-1 Здесь я нашел макрос, позволяющий создавать листы с названием контрагентов, перечисленных в исходных данных
[vba]
Код
Sub Итог() Application.ScreenUpdating = False Dim i As Long For i = 1 To Sheets("Исходные данные").Range("B" & Rows.Count).End(xlUp).Row On Error Resume Next Sheets(Sheets("Исходные данные").Range("B" & i).Value).Select If Err And Sheets("Исходные данные").Range("B" & i) <> "" Then 'Sheets.Add After:=Sheets(Sheets.Count) Sheets("ШАБЛОН").Copy After:=Sheets(Sheets.Count) ActiveSheet.Name = Sheets("Исходные данные").Range("B" & i) End If Next i Worksheets("Исходные данные").Activate Application.ScreenUpdating = True End Sub
[/vba]
После этого была предпринята скромная попытка с помощью
Код
=ЕСЛИ(ЕНД(ВПР
подхватывать данные из исходного листа. Попытка не увенчалась успехом, потому что данные подхватывались исходя из первой операции по контрагенту. А в случае внесения изменений в операцию на исходном листе, эти изменения не применялись к уже созданным листам организаций.
Буду очень признателен за любую помощь в решении этой сложности. Извините, если описание проблемы получилось сумбурное, готов дать максимально развернутые ответы на ваши уточняющие вопросы. Заранее спасибо и хорошего дня!:)pjJohn
Задача не сложная но, у нее много условий и она требует много проверок. Предлагаю простой пример по заданию, требующий нажатия кнопки после записи каждой строки. Но при повторном нажатии запишет повторно. Значит нужна проверка - есть уже такая запись или нет и т. д. Кроме того, малейшая неточность в написании наименования контрагента будет воспринято как новый. То есть, что бы учесть все варианты и условия не допускающие ошибок, надо посидеть. А это время. А у меня его пока мало. Короче, пример для размышления, дерзайте. Может кто еще варианты предложит. А может и законченное решение.
Задача не сложная но, у нее много условий и она требует много проверок. Предлагаю простой пример по заданию, требующий нажатия кнопки после записи каждой строки. Но при повторном нажатии запишет повторно. Значит нужна проверка - есть уже такая запись или нет и т. д. Кроме того, малейшая неточность в написании наименования контрагента будет воспринято как новый. То есть, что бы учесть все варианты и условия не допускающие ошибок, надо посидеть. А это время. А у меня его пока мало. Короче, пример для размышления, дерзайте. Может кто еще варианты предложит. А может и законченное решение.Wasilich
Wasilic, спасибо большое! Работает всё замечательно! По поводу ошибок в написании контрагента - это не страшно, будет заметно при допущении ошибки Вот с повторными записями буду стараться бороться по вашему совету, с помощью добавления проверок, если получится.. Спасибо!
Wasilic, спасибо большое! Работает всё замечательно! По поводу ошибок в написании контрагента - это не страшно, будет заметно при допущении ошибки Вот с повторными записями буду стараться бороться по вашему совету, с помощью добавления проверок, если получится.. Спасибо!pjJohn