Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2010, 00:45   #1
Meta2
Пользователь
 
Регистрация: 28.10.2009
Сообщений: 38
По умолчанию Поиск влияющих ячеек

Всем доброго времени суток!

У меня есть задача - построить каталог товаров в виде таблицы по ранее выписанным счетам. Каталог должен содержать следующие поля - partnumber, описание, НДС.

счетов компания выписала кучу, а вот об автоматизации деятельности не позаботилась, так что приходится разгребать. Решение мне видится такое - написать скрипт, который будет потрошить кучу (их реально куча, больше 10 000 штук) счетов, доставая из них partnumber товара и его описание. с этим проблем нет. Если partnumber уже был извлечён из более раннего счёта, то новое значение просто отбрасывается и в каталог не заносится.

Сложнее с НДС. В счетах присутствуют позиции, которые облагаются НДС, и которые не облагаются НДС. Определить по partnumber, облагается ли позиция налогом, не представляется возможным. Я ничего лучше не придумал, кроме как искать влияющие ячейки (Precedents) и пытаться с их помощью отфильтровать значения, которые не облагаются НДС.

Примеры счетов находятся в приложенном файле, пример желаемого результата на их основе - тоже.
Буду благодарен, если у кого будут идеи, как это можно реализовать, потому как я не придумал, что можно сделать с Precedents.
Вложения
Тип файла: zip Out.zip (55.9 Кб, 11 просмотров)
Meta2 вне форума Ответить с цитированием
Старый 27.10.2010, 00:54   #2
Meta2
Пользователь
 
Регистрация: 28.10.2009
Сообщений: 38
По умолчанию

Можно, в принципе, пойти в обратную сторону.
Если позиция не облагается НДС, то она влияет только на одну ячейку - это общая сумма. А если облагается - то на две - общая сумма и НДС
Meta2 вне форума Ответить с цитированием
Старый 27.10.2010, 01:32   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Сделать можно - теоретически ничего сложного нет.
Отделить строки с НДС от строк без НДС проще всего именно так, как вы сказали - через зависящие ячейки.

Вот пример макроса:
Код:
Sub test()
    On Error Resume Next    ' не останавливаемся при ошибке поиска
    Dim ra As Range, ra1 As Range, ra2 As Range
    Set ra = ActiveSheet.UsedRange   ' используемый диапазон листа
    ra.UnMerge    ' убираем объединение ячеек - для работы поиска

    ' все позиции на листе - в 9-й столбец пишем плюс
    Set ra1 = ActiveSheet.UsedRange.Find("ИТОГО, в т.ч. НДС:", , , xlWhole).EntireRow.Cells(8).Precedents
    Set ra1 = Intersect(ra1.Columns(2).SpecialCells(xlCellTypeConstants).EntireRow, [i:i])
    ra1.Value = "'+"

    ' позиции с НДС - в 9-й столбец пишем минус
    Set ra2 = ActiveSheet.UsedRange.Find("НДС:", , , xlWhole).EntireRow.Cells(8).Precedents
    Set ra2 = Intersect(ra2.Columns(2).SpecialCells(xlCellTypeConstants).EntireRow, [i:i])
    ra2.Value = "'-"
End Sub
Только не спрашивайте, как ЭТО работает. Сам не понимаю)

Пример в файле: (нажмите кнопочку - увидите плюсы и минусы в 9-м столбце)
http://excelvba.ru/XL_Files/Sample__...0__3-27-17.zip

Осталось дело за немногим:
1) найти на форуме макрос перебора всех файлов в выбранной папке
2) написать макрос, который из заданного файла выдирает данные (уже с плюсиками)
3) написать макрос, который выдранные данные поместит в единую таблицу

Проблема будет в другом - при обработке 10000 подобных файлов ПОДРЯД Excel наверняка подвиснет (или вылетит с ошибкой)
И время обработки будет большим - около 0,5 секунды на файл

Все эти проблемы решаемые - но решить их сложнее, нежели просто написать работающий код.
Если бы файлов было около 1000 шт. - было бы намного проще.
(можно попробовать разбить 10000 файлов на 10 папок по 1000 файлов, и обработать по отдельности)


PS: Сам я не возьмусь писать весь этот код (бесплатно) - работы много.
EducatedFool вне форума Ответить с цитированием
Старый 27.10.2010, 22:45   #4
Meta2
Пользователь
 
Регистрация: 28.10.2009
Сообщений: 38
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Сделать можно - теоретически ничего сложного нет.
Отделить строки с НДС от строк без НДС проще всего именно так, как вы сказали - через зависящие ячейки.
Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Осталось дело за немногим:
1) найти на форуме макрос перебора всех файлов в выбранной папке
легко, это я умею делать

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
2) написать макрос, который из заданного файла выдирает данные (уже с плюсиками)
легко

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
3) написать макрос, который выдранные данные поместит в единую таблицу
легко

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Проблема будет в другом - при обработке 10000 подобных файлов ПОДРЯД Excel наверняка подвиснет (или вылетит с ошибкой)
И время обработки будет большим - около 0,5 секунды на файл
Это не проблема, пусть хоть ночь напролёт работает, лишь бы результат выдал

Спасибо!
Meta2 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск и копирование ячеек ruvid Microsoft Office Excel 5 29.07.2010 20:13
поиск пустых ячеек и вывод результата alexander_l Microsoft Office Excel 7 17.06.2010 16:50
заполнение ячеек через поиск Окоча Юра Microsoft Office Excel 5 16.01.2010 23:59
поиск и заполнение ячеек таблицы Окоча Юра Microsoft Office Excel 2 16.01.2010 19:00