Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Создание цикла по сравнению - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Создание цикла по сравнению (Макросы Sub)
Создание цикла по сравнению
Espada Дата: Среда, 11.09.2013, 16:07 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 121
Репутация: 0 ±
Замечаний: 40% ±

Доброго времени суток. Нужно написать цикл который сверяет даты на разных страницах и, в зависимости от результата, либо добавляет значение,либо оставляет ячейку пустой. строки дат фиксированы, но не фиксировано их количество.пробовал сразу сам, получается неочень. идея по количеству: чтобы сравнивало до ячейки с текстом "ИТОГО отгружено". Заранее спс
К сообщению приложен файл: 2101327.xls (27.0 Kb)
 
Ответить
СообщениеДоброго времени суток. Нужно написать цикл который сверяет даты на разных страницах и, в зависимости от результата, либо добавляет значение,либо оставляет ячейку пустой. строки дат фиксированы, но не фиксировано их количество.пробовал сразу сам, получается неочень. идея по количеству: чтобы сравнивало до ячейки с текстом "ИТОГО отгружено". Заранее спс

Автор - Espada
Дата добавления - 11.09.2013 в 16:07
SkyPro Дата: Среда, 11.09.2013, 16:23 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
А формула не подойдет?
Код
=ЕСЛИОШИБКА(ГПР(B$4;ДВССЫЛ("'"&$A12&"'!$B$4:$F$5");2;0);"")
в В12 и протянуть до конца строки.
Если в столбце А указаны названия листов.


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Среда, 11.09.2013, 16:29
 
Ответить
СообщениеА формула не подойдет?
Код
=ЕСЛИОШИБКА(ГПР(B$4;ДВССЫЛ("'"&$A12&"'!$B$4:$F$5");2;0);"")
в В12 и протянуть до конца строки.
Если в столбце А указаны названия листов.

Автор - SkyPro
Дата добавления - 11.09.2013 в 16:23
Espada Дата: Среда, 11.09.2013, 16:43 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 121
Репутация: 0 ±
Замечаний: 40% ±

Цитата (SkyPro, Среда, 11.09.2013, 16:23 # 2)
А формула не подойдет?
[Перевод / Translate]
=IFERROR(HLOOKUP(B$4,INDIRECT("'"&$A12&"'!$B$4:$F$5"),2,0),"")
в В12 и протянуть до конца строки.
Если в столбце А указаны названия листов.

Необходимо чтобы последним столбцом был именно ИТОГО отгружено, так как последние 3 столбца высчитываются по другой формуле
 
Ответить
Сообщение
Цитата (SkyPro, Среда, 11.09.2013, 16:23 # 2)
А формула не подойдет?
[Перевод / Translate]
=IFERROR(HLOOKUP(B$4,INDIRECT("'"&$A12&"'!$B$4:$F$5"),2,0),"")
в В12 и протянуть до конца строки.
Если в столбце А указаны названия листов.

Необходимо чтобы последним столбцом был именно ИТОГО отгружено, так как последние 3 столбца высчитываются по другой формуле

Автор - Espada
Дата добавления - 11.09.2013 в 16:43
SkyPro Дата: Среда, 11.09.2013, 16:54 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Цитата (Espada, Среда, 11.09.2013, 16:43 # 3)
Необходимо чтобы последним столбцом был именно ИТОГО отгружено, так как последние 3 столбца высчитываются по другой формуле

А в чем тут проблема?
Код
=СУММ(B12:I12)
в ячейку J12

Вот так получается.

Или формулой массива:
Код
=ЕСЛИОШИБКА(ГПР($B$4:$I$4;ДВССЫЛ("'"&$A$5:$A$13&"'!$B$4:$BB$5");2;0);"")
К сообщению приложен файл: 5360302.xls (29.0 Kb)


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Среда, 11.09.2013, 17:20
 
Ответить
Сообщение
Цитата (Espada, Среда, 11.09.2013, 16:43 # 3)
Необходимо чтобы последним столбцом был именно ИТОГО отгружено, так как последние 3 столбца высчитываются по другой формуле

А в чем тут проблема?
Код
=СУММ(B12:I12)
в ячейку J12

Вот так получается.

Или формулой массива:
Код
=ЕСЛИОШИБКА(ГПР($B$4:$I$4;ДВССЫЛ("'"&$A$5:$A$13&"'!$B$4:$BB$5");2;0);"")

Автор - SkyPro
Дата добавления - 11.09.2013 в 16:54
Espada Дата: Среда, 11.09.2013, 17:05 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 121
Репутация: 0 ±
Замечаний: 40% ±

Согласен, если бы было фиксированное число дней, но в зависимости от фильтра дней может быть от 1-до 30.
 
Ответить
СообщениеСогласен, если бы было фиксированное число дней, но в зависимости от фильтра дней может быть от 1-до 30.

Автор - Espada
Дата добавления - 11.09.2013 в 17:05
SkyPro Дата: Среда, 11.09.2013, 17:10 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Попробуйте вот так:
Код
=ЕСЛИОШИБКА(ГПР(ПОДСТАВИТЬ(B$4;"ИТОГО отгружено";"Общий итог");ДВССЫЛ("'"&$A11&"'!$B$4:$BB$5");2;0);"")


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Среда, 11.09.2013, 17:20
 
Ответить
СообщениеПопробуйте вот так:
Код
=ЕСЛИОШИБКА(ГПР(ПОДСТАВИТЬ(B$4;"ИТОГО отгружено";"Общий итог");ДВССЫЛ("'"&$A11&"'!$B$4:$BB$5");2;0);"")

Автор - SkyPro
Дата добавления - 11.09.2013 в 17:10
Espada Дата: Среда, 11.09.2013, 17:20 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 121
Репутация: 0 ±
Замечаний: 40% ±

В Галактике формирую отчет за определённый период, т.е. каждый раз число дней разное, от этого и меняется размер таблицы, вы мне уже помогали с подобным отчетом, где нужно было скопировать строчку
[vba]
Код
Dim rCell As Range, rRange As Range
With Sheets("Порошки")
Set rRange = Nothing
     For Each rCell In .[b5].Resize(1, .UsedRange.Columns.Count)
        If rCell <> "" Then
             If rRange Is Nothing Then
                 Set rRange = rCell
             Else
                 Set rRange = Union(rRange, rCell)
             End If
         End If
     Next
rRange.Copy
Sheets("Анализ").[b12:g12].PasteSpecial Paste:=xlValues
Application.CutCopyMode = 0
End With
  
[/vba]
тогда помог, но там было 100% совпадение дат в 2-х таблицах, а здесь нужно сверят даты и только если совпадают добавить данные в ячейку. я думал мб ещё один цикл добавить на сравнение.
 
Ответить
СообщениеВ Галактике формирую отчет за определённый период, т.е. каждый раз число дней разное, от этого и меняется размер таблицы, вы мне уже помогали с подобным отчетом, где нужно было скопировать строчку
[vba]
Код
Dim rCell As Range, rRange As Range
With Sheets("Порошки")
Set rRange = Nothing
     For Each rCell In .[b5].Resize(1, .UsedRange.Columns.Count)
        If rCell <> "" Then
             If rRange Is Nothing Then
                 Set rRange = rCell
             Else
                 Set rRange = Union(rRange, rCell)
             End If
         End If
     Next
rRange.Copy
Sheets("Анализ").[b12:g12].PasteSpecial Paste:=xlValues
Application.CutCopyMode = 0
End With
  
[/vba]
тогда помог, но там было 100% совпадение дат в 2-х таблицах, а здесь нужно сверят даты и только если совпадают добавить данные в ячейку. я думал мб ещё один цикл добавить на сравнение.

Автор - Espada
Дата добавления - 11.09.2013 в 17:20
SkyPro Дата: Среда, 11.09.2013, 17:26 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Зачем макрос, если формулами это решается быстрее и удобнее?

Вот.
Осталось добавить остальные листы.
К сообщению приложен файл: 6543644.xls (33.5 Kb)


skypro1111@gmail.com
 
Ответить
СообщениеЗачем макрос, если формулами это решается быстрее и удобнее?

Вот.
Осталось добавить остальные листы.

Автор - SkyPro
Дата добавления - 11.09.2013 в 17:26
Espada Дата: Четверг, 12.09.2013, 14:32 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 121
Репутация: 0 ±
Замечаний: 40% ±

Цитата (SkyPro, Среда, 11.09.2013, 17:26 # 8)
Зачем макрос, если формулами это решается быстрее и удобнее?

Это было бы так, если бы точно знал сколько у меня столбцов будет в отчёте. Можно было бы задать расчет на всю строку, но последние 3 столбца высчитываются по другим формулам.
К сообщению приложен файл: 3594991.xls (35.0 Kb)
 
Ответить
Сообщение
Цитата (SkyPro, Среда, 11.09.2013, 17:26 # 8)
Зачем макрос, если формулами это решается быстрее и удобнее?

Это было бы так, если бы точно знал сколько у меня столбцов будет в отчёте. Можно было бы задать расчет на всю строку, но последние 3 столбца высчитываются по другим формулам.

Автор - Espada
Дата добавления - 12.09.2013 в 14:32
SkyPro Дата: Четверг, 12.09.2013, 14:59 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Каким образом формируется отчет (я так понимаю под словом "отчет" вы подразумеваете лист "анализ")? Откуда берется кол-во столбцов?
Телепатией тут владеют не многие, я не в их числе.
Если макросом, то формулу можно добавить в сам макрос.
Если вручную, то формулу можно заносить вручную.
Если вы имеете ввиду "неизвестно кол-во столбцов" на листах ИЗ КОТОРЫХ должны тянуться данные, то в формуле это предусмотрено:
=ЕСЛИОШИБКА(ГПР(ПОДСТАВИТЬ(B$4;"ИТОГО отгружено";"Общий итог");ДВССЫЛ("'"&$A11&"'!$B$4:$BB$5");2;0);"")


skypro1111@gmail.com
 
Ответить
СообщениеКаким образом формируется отчет (я так понимаю под словом "отчет" вы подразумеваете лист "анализ")? Откуда берется кол-во столбцов?
Телепатией тут владеют не многие, я не в их числе.
Если макросом, то формулу можно добавить в сам макрос.
Если вручную, то формулу можно заносить вручную.
Если вы имеете ввиду "неизвестно кол-во столбцов" на листах ИЗ КОТОРЫХ должны тянуться данные, то в формуле это предусмотрено:
=ЕСЛИОШИБКА(ГПР(ПОДСТАВИТЬ(B$4;"ИТОГО отгружено";"Общий итог");ДВССЫЛ("'"&$A11&"'!$B$4:$BB$5");2;0);"")

Автор - SkyPro
Дата добавления - 12.09.2013 в 14:59
Espada Дата: Четверг, 12.09.2013, 15:38 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 121
Репутация: 0 ±
Замечаний: 40% ±

Прошу прощение. сейчас всё объясню. Я работаю в Галактике(бух.программа типа 1С). Там устанавливаю диапазон дат, за которые формируется отчёт(от одного дня до бесконечности). из галактики формирую документ екселя с исходными данными(эту страничку я не демонстрировал). Затем с помощью макроса я формирую сводную таблицу, из сводной формирую анализ(все поля кроме строки порошки)
затем формирую лист "Порошки"(копирую из сводной таблицы и с помощью фильтра(записаном в макросе) преобразую её в необходимый вид. ну из этой таблицы переношу данные на лист Анализ создаю строчку порошки и в неё заношу данные с листа порошки.
Как то так. Сформировал отчет отчёт за 2 дня(для примера) внутри отчет эксель который появляется непосредственно из галактики, и файлик с макросом
К сообщению приложен файл: Desktop.xlsx (51.6 Kb) · 1777913.txt (10.0 Kb)


Сообщение отредактировал Espada - Четверг, 12.09.2013, 15:41
 
Ответить
СообщениеПрошу прощение. сейчас всё объясню. Я работаю в Галактике(бух.программа типа 1С). Там устанавливаю диапазон дат, за которые формируется отчёт(от одного дня до бесконечности). из галактики формирую документ екселя с исходными данными(эту страничку я не демонстрировал). Затем с помощью макроса я формирую сводную таблицу, из сводной формирую анализ(все поля кроме строки порошки)
затем формирую лист "Порошки"(копирую из сводной таблицы и с помощью фильтра(записаном в макросе) преобразую её в необходимый вид. ну из этой таблицы переношу данные на лист Анализ создаю строчку порошки и в неё заношу данные с листа порошки.
Как то так. Сформировал отчет отчёт за 2 дня(для примера) внутри отчет эксель который появляется непосредственно из галактики, и файлик с макросом

Автор - Espada
Дата добавления - 12.09.2013 в 15:38
Espada Дата: Четверг, 12.09.2013, 16:10 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 121
Репутация: 0 ±
Замечаний: 40% ±

аким образом формируется отчет (я так понимаю под словом "отчет" вы подразумеваете лист "анализ")? Откуда берется кол-во столбцов?
Телепатией тут владеют не многие, я не в их числе.
Если макросом, то формулу можно добавить в сам макрос.
Если вручную, то формулу можно заносить вручную.
Если вы имеете ввиду "неизвестно кол-во столбцов" на листах ИЗ КОТОРЫХ должны тянуться данные, то в формуле это предусмотрено:
Код
=ЕСЛИОШИБКА(ГПР(ПОДСТАВИТЬ(B$4;"ИТОГО отгружено";"Общий итог");ДВССЫЛ("'"&$A11&"'!$B$4:$BB$5");2;0);"")


Да я вот думал сделать цикл чтобы сравнивал значение ячеек на 2-х листах и если они равны то записывал значение из строки пониже(например). так то у меня всё копировалось с помощью макроса нормально(когда было одинаковое кол-во дней на двух страницах) ну а как стало разное количество, тут я и сел...
 
Ответить
Сообщение
аким образом формируется отчет (я так понимаю под словом "отчет" вы подразумеваете лист "анализ")? Откуда берется кол-во столбцов?
Телепатией тут владеют не многие, я не в их числе.
Если макросом, то формулу можно добавить в сам макрос.
Если вручную, то формулу можно заносить вручную.
Если вы имеете ввиду "неизвестно кол-во столбцов" на листах ИЗ КОТОРЫХ должны тянуться данные, то в формуле это предусмотрено:
Код
=ЕСЛИОШИБКА(ГПР(ПОДСТАВИТЬ(B$4;"ИТОГО отгружено";"Общий итог");ДВССЫЛ("'"&$A11&"'!$B$4:$BB$5");2;0);"")


Да я вот думал сделать цикл чтобы сравнивал значение ячеек на 2-х листах и если они равны то записывал значение из строки пониже(например). так то у меня всё копировалось с помощью макроса нормально(когда было одинаковое кол-во дней на двух страницах) ну а как стало разное количество, тут я и сел...

Автор - Espada
Дата добавления - 12.09.2013 в 16:10
SkyPro Дата: Четверг, 12.09.2013, 16:26 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Немного переделал ваш макрос (именно немного).
Попробуйте.
ЗЫ: Рекомендую почистить его от "мусора" и упорядочить.
К сообщению приложен файл: 4066859.txt (11.0 Kb)


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Четверг, 12.09.2013, 16:27
 
Ответить
СообщениеНемного переделал ваш макрос (именно немного).
Попробуйте.
ЗЫ: Рекомендую почистить его от "мусора" и упорядочить.

Автор - SkyPro
Дата добавления - 12.09.2013 в 16:26
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Создание цикла по сравнению (Макросы Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!