Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
1 / 1 / 0
Регистрация: 05.06.2018
Сообщений: 30
1

Автозаполнение колонок

26.06.2018, 08:34. Показов 1938. Ответов 34
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Нужна помощь.
Есть большой прайс.
От поставщика он идет сгрупирован по категориям.
Программа импортер не понимает сгруппированные прайсы,
приходится удалять структуру а категории в ручную заполнять
на отдельные столбцы как требуется для импорта.
Можно ли каким то образом реализовать авто заполнение столбцов
в прайсе?
Price.xlsx - это часть прайса а Price1.xlsx то что нужно получить
Пробовал найти примеры но не нашел. Сам с Vba почти никак.
Количество товара может меняться поэтому жестко к адресам ячеек привязаться не
получается.
Оч. надеюсь на помощь
Вложения
Тип файла: xlsx Price.xlsx (14.9 Кб, 14 просмотров)
Тип файла: xlsx Price1.xlsx (15.7 Кб, 13 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.06.2018, 08:34
Ответы с готовыми решениями:

Сравнить значения двух колонок одной таблицы со значениями двух колонок другой таблицы
Доброго времени суток! Суть в следующем: Есть таблица_1, которая содержит в себе номера машин...

Автозаполнение таблицы
Доброго времени суток господа . У меня такой вопрос . у меня есть форма , с элементарными...

Автозаполнение шаблонов
Всем добрый день! В общем для заполнения шаблонов нашел в интернете макрос и сейчас адаптирую его...

Отключить автозаполнение listobject
Еще один вопрос по таблицам listobject. Если туда записать формулу, например "=890", она...

34
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
26.06.2018, 09:18 2
palmer_, ну это явно не курсовая, видимо, где-то работаете. И собираетесь и дальше, ссылаясь на Сам с Vba почти никак просить помощи на форуме. Но это не помощь, а сделайте за меня. Надо осваивать ВБА и обращаться с вопросами по вашей программе.
Алгоритм по вашей задаче достаточно прост. Объявляете массив длиной 3. В цикле находите ячейки с не белой заливкой (голубой, синей). В номер массива равный номеру столбца ячейки с непустым текстом заносите этот текст. И в строки без заливки в столбцы 9, 8, 7 заносите элементы массива 1, 2, 3. Снова встретили фон, по предыдущему заносите в массив те элементы, которые встретились (не все, например, только 3). Для начала как-то так.
0
1 / 1 / 0
Регистрация: 05.06.2018
Сообщений: 30
26.06.2018, 09:58  [ТС] 3
Cпасибо Burk.
Я не просил сделать за меня.
Я хотел узнать возможно это в принципе или нет,
и если возможно то в каком направлении рыть.
Вы мне ответили. Большое вам спасибо.
0
6944 / 2849 / 548
Регистрация: 19.10.2012
Сообщений: 8,722
26.06.2018, 10:05 4
Если проблема с массивом - делайте 3 переменных. Остальное как выше.
0
1856 / 1178 / 190
Регистрация: 27.03.2009
Сообщений: 4,564
26.06.2018, 10:11 5
palmer_, не совсем понял что тебе нужно. дописать остальные столбцы или что?
0
1 / 1 / 0
Регистрация: 05.06.2018
Сообщений: 30
26.06.2018, 10:35  [ТС] 6
Во вложенных файлах.
Price.xlsx - это исходный
Price1.xlsx то что хотел получить
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
26.06.2018, 11:11 7
palmer_, уточню на всяк случай - всё это делается за один проход по строкам от А до Я (последняя заполненная строка)
0
1856 / 1178 / 190
Регистрация: 27.03.2009
Сообщений: 4,564
26.06.2018, 11:27 8
нажми CTRL+Q
Вложения
Тип файла: xls Price.xls (48.5 Кб, 12 просмотров)
1
1 / 1 / 0
Регистрация: 05.06.2018
Сообщений: 30
26.06.2018, 11:53  [ТС] 9
Не важно. я это вообще вручную делал.
В последствии это все будет скопировно в xls
через специальную вставку как значения и в
дальнейшем сохранено в xml
Хотел рутинную операцию как то автоматизировать.

Добавлено через 24 минуты
unick12345 Спасибо вам большое.
Все работает.
Я каждый день сидел с этим прайсом по два часа.
0
3919 / 2316 / 785
Регистрация: 02.11.2012
Сообщений: 6,159
26.06.2018, 14:13 10
в коде не помешает.
Visual Basic
1
2
3
Application.ScreenUpdating = False 'отключаем обновление экрана
ваш код
Application.ScreenUpdating = True 'включаем обновление экрана
0
1 / 1 / 0
Регистрация: 05.06.2018
Сообщений: 30
28.06.2018, 06:55  [ТС] 11
Burk Похоже я не понял сразу вашего вопроса про проход от а до я.
Теперь наступил на грабли.
В некоторых позициях отсутствует
младшая категория и колонка заполняется из предыдущей
а хотелось бы чтобы она пропускалась.
Заметил не сразу, а только в процессе работы.
Во вложении файл. Как это выглядит.
Вложения
Тип файла: xls 1.xls (39.0 Кб, 9 просмотров)
0
1 / 1 / 0
Регистрация: 05.06.2018
Сообщений: 30
28.06.2018, 06:56  [ТС] 12
Vlad999 Спасибо за подсказку, стало быстрее работать.
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
28.06.2018, 07:48 13
palmer_, что-то не понял ваше сообщение, ведь в моём алгоритме так и предусмотрено, если привязываться по номеру столбца категории. Если есть только вторая категория, то в неё и занесётся новое значение (во второй элемент массива), а третья (более низкая категория) сохранит старое значение. Поэтому я и предлагал массив из трёх элементов - и проще и никаких проблем. "Я" просто последняя заполненная строка в вашем листе. "А" = 1
0
1 / 1 / 0
Регистрация: 05.06.2018
Сообщений: 30
28.06.2018, 07:54  [ТС] 14
Да я сам уже понял что не то написал.
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
28.06.2018, 07:57 15
В вашем первом файле так и было показано. А нужно, чтобы в случае отсутствия низшей категории, она бы вообще не ставилась??? А не может быть так, что только первая есть, что тогда? Остальные тоже пустые?
0
1 / 1 / 0
Регистрация: 05.06.2018
Сообщений: 30
28.06.2018, 08:16  [ТС] 16
Вот как в файле нужно.
Вложения
Тип файла: xls 1-2.xls (38.5 Кб, 12 просмотров)
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
28.06.2018, 08:30 17
palmer_, тогда такой макрос
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub proba()
Dim I As Long, Arr(1 To 3) As String, Last As Long, J As Integer
Last = Cells(Rows.Count, 1).End(xlUp).Row
For I = 1 To Last
  If Cells(I, 1) <> "" And Cells(I, 2) = "" And Cells(I, 3) = "" Then
    Arr(1) = Cells(I, 1)
  ElseIf Cells(I, 1) = "" And Cells(I, 2) <> "" And Cells(I, 3) = "" Then
    Arr(2) = Cells(I, 2): Arr(3) = ""
  ElseIf Cells(I, 1) = "" And Cells(I, 2) = "" And Cells(I, 3) <> "" Then
    Arr(3) = Cells(I, 3)
  Else
    For J = 1 To 3
      Cells(I, 9 - J) = Arr(J)
    Next
  End If
Next
End Sub
1
1 / 1 / 0
Регистрация: 05.06.2018
Сообщений: 30
28.06.2018, 09:00  [ТС] 18
Здорово.
Все работает как надо.
Спасибо огромное Burk
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
28.06.2018, 09:14 19
palmer_, вдруг возможны пустые строки. строку 11 заменить, на всякий случай, на следующую
Visual Basic
1
ElseIf Cells(I, 4) <> "" Then
0
1 / 1 / 0
Регистрация: 05.06.2018
Сообщений: 30
28.06.2018, 11:32  [ТС] 20
Спасибо большое.
Прогнал по рабочему прайсу все
работает корректно.
В итоге время обработки прайса сократилось
почти с 2х часов до 25 мин.
Начальнику я об этом конечно не скажу)
Еще бы научиться удалять выборочно
не нужные мне категории вообще бы укладывался в мин 15.
Еще раз спасибо вам всем огромное.)
0
28.06.2018, 11:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.06.2018, 11:32
Помогаю со студенческими работами здесь

Рандомное автозаполнение таблицы
Здравствуйте! помогите пожалуйста, я не знаю ВБА,но мне срочно нужен скрипт,помогите кому не трудно...

Автозаполнение Combo box
Здравствуйте, у меня есть комбо бокс, к которому прикреплен...

Автозаполнение ячеек формулами
Подскажите как сделать так чтобы ячейками автоматически заполнились формулами такого типа,...

Автозаполнение в нужном столбце
Начну с того, что я не программист,а экономист. Так что не смейтесь пожалуйста:) Стараюсь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru