powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Хитрый цикл
10 сообщений из 10, страница 1 из 1
Хитрый цикл
    #32778465
Heilig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такая задача
На одном листе данные в колонках
"День Недели" "Название" "количество"
На втором - "День недели" "Название" "цена"
Не факт что это как-то упорядочено.

Я делаю третий лист на котором мне надо чтобы были
День недели, Название, Количество, Цена, и Цена*Количество
Делаю тупо циклами:

i=2
Do while день недели в строке i на первом листе <> ""
j=2
Do while день недели в строке j на втором листе <> ""
If НазваниеЛист1 = НазваниеЛИст2 then
Копирую Количество и цену...
j=j+1
loop
i=i+1
loop

На каждом листе под 10000 строк. Время выполнения удручает
Нету ли какого нить метода укоротить циклы, типа фильтр какой то предварительно накладывать по дням недели, или даже не знаю что???
...
Рейтинг: 0 / 0
Хитрый цикл
    #32779297
MrCorp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть вариант отсортировать обе таблицы по полю "название" и продвигаться по обеим таблицам одновременно. В этом случае достаточно будет одного прохода.
...
Рейтинг: 0 / 0
Хитрый цикл
    #32780333
Heilig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrCorpЕсть вариант отсортировать обе таблицы по полю "название" и продвигаться по обеим таблицам одновременно. В этом случае достаточно будет одного прохода.
Беда в том, что количество строк где название одинаково в разных таблицах разное.

У меня возникла идея как раз отсортироваться по дням недели, сделать массив с первыми и последними ячейками, или только первыми скажем и цикл второй делать внутри нужного дня недели. Но пока не реализовал.
...
Рейтинг: 0 / 0
Хитрый цикл
    #32781906
MrCorp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если у тебя встречаются одинаковые значения в столбце "Название", то как же ты определяешь соответствие в двух таблицах?
В твоем коде была строчка
If НазваниеЛист1 = НазваниеЛИст2 then
Копирую Количество и цену...
из которой я понял, что значения НазваниеЛист1 и НазваниеЛИст2 уникальны.
...
Рейтинг: 0 / 0
Хитрый цикл
    #32782867
Heilig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrCorpЕсли у тебя встречаются одинаковые значения в столбце "Название", то как же ты определяешь соответствие в двух таблицах?
В твоем коде была строчка
If НазваниеЛист1 = НазваниеЛИст2 then
Копирую Количество и цену...
из которой я понял, что значения НазваниеЛист1 и НазваниеЛИст2 уникальны.

Уникальна пара ДЕнь Недели + Название
...
Рейтинг: 0 / 0
Хитрый цикл
    #32783455
MrCorp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот набросал примерный алгоритм

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Отсортировать первую таблицу по полям "День недели" и "Название"
Отсортировать вторую таблицу по полям "День недели" и "Название"
i= 2 
j= 2 
Do while день недели в строке i на первом листе или j на втором листе <> "" 
  if Лист1.День_недели<Лист2.День_недели then i=i+ 1 
  if Лист1.День_недели>Лист2.День_недели then j=j+ 1 
  if Лист1.День_недели=Лист2.День_недели then
    if Лист1.Название<=Лист2.Название then i=i+ 1 
    if Лист1.Название>=Лист2.Название then j=j+ 1 
    if Лист1.Название>=Лист2.Название then Копировать
 end if
loop
...
Рейтинг: 0 / 0
Хитрый цикл
    #32785484
Фотография Deosfen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
данные клади в БД, и делай средствами БД, быстрее будет
...
Рейтинг: 0 / 0
Хитрый цикл
    #32785647
MrCorp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deosfenданные клади в БД, и делай средствами БД, быстрее будет

Иногда нет возможности или нецелесообразно использовать БД.
...
Рейтинг: 0 / 0
Хитрый цикл
    #32785652
MrCorp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В коде небольшая опечатка. Вот исправленный код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Отсортировать первую таблицу по полям "День недели" и "Название"
Отсортировать вторую таблицу по полям "День недели" и "Название"
i= 2 
j= 2 
Do while день недели в строке i на первом листе или j на втором листе <> "" 
  if Лист1.День_недели<Лист2.День_недели then i=i+ 1 
  if Лист1.День_недели>Лист2.День_недели then j=j+ 1 
  if Лист1.День_недели=Лист2.День_недели then
    if Лист1.Название<=Лист2.Название then i=i+ 1 
    if Лист1.Название>=Лист2.Название then j=j+ 1 
    if Лист1.Название=Лист2.Название then Копировать
  end if
loop
...
Рейтинг: 0 / 0
Хитрый цикл
    #32786082
Heilig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
О, спасибо, мудрость на меня излилась.

Я че то не врубался что после сортировки текстовые поля можно сравнивать...

А по поводу БД скажу так, что я рассматривал эту возможность, но программа которая вываливает мне данные умеет экспортировать только в Эксель, и скажем так каждую группу названий на отдельный лист. А Акцесс например в свою очередь импортирует из Экселя только один лист за раз. Это меня и остановило, я и так буду иметь значительное количество ручной работы по доводке, ибо заставить юзеров одинаково вводить названия без грамматических ошибок и единообразно не реально.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Хитрый цикл
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]