Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Хитрый цикл / 10 сообщений из 10, страница 1 из 1
11.11.2004, 20:35
    #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
12.11.2004, 12:14
    #32779297
MrCorp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый цикл
Есть вариант отсортировать обе таблицы по полю "название" и продвигаться по обеим таблицам одновременно. В этом случае достаточно будет одного прохода.
...
Рейтинг: 0 / 0
12.11.2004, 17:01
    #32780333
Heilig
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый цикл
MrCorpЕсть вариант отсортировать обе таблицы по полю "название" и продвигаться по обеим таблицам одновременно. В этом случае достаточно будет одного прохода.
Беда в том, что количество строк где название одинаково в разных таблицах разное.

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

Уникальна пара ДЕнь Недели + Название
...
Рейтинг: 0 / 0
16.11.2004, 09:25
    #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
17.11.2004, 01:54
    #32785484
Deosfen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый цикл
данные клади в БД, и делай средствами БД, быстрее будет
...
Рейтинг: 0 / 0
17.11.2004, 09:07
    #32785647
MrCorp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый цикл
Deosfenданные клади в БД, и делай средствами БД, быстрее будет

Иногда нет возможности или нецелесообразно использовать БД.
...
Рейтинг: 0 / 0
17.11.2004, 09:09
    #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
17.11.2004, 11:11
    #32786082
Heilig
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый цикл
О, спасибо, мудрость на меня излилась.

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

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


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