В ячейках у меня URL сайтов. Мне надо будет почистить его от дублей. Но проблема в том, что бывает на конце слэш.
Т.е. получаются неявные дубли. Собственно говоря, это один и тот же адрес. И вот такие неявные дубли мне надо как-то удалить.
Я думаю, что надо сначала очистить слэш на конце, если он есть. А потом схлопнуть дубли.
Желательно, обойтись без применения VBA.
Это возможно?
Как поймать Nothing?
Пользователь
Сообщений: Регистрация: 11.01.2013
20.08.2018 12:02:53
Я застрял.
Код
Private Sub check_status_correctness(a_row)
Dim status_col_rng As Range
Dim status_val As String
Dim found_status As Range
Set status_col_rng = Sheets("Settings").Columns(2)
status_val = Sheets(MAIN_SHEET).Cells(a_row, STATUS_COL)
Set found_status = status_col_rng.Find(status_val, LookIn:=xlValues, LookAt:=xlWhole)
If found_status Is Nothing Then
Call announce_error(a_row, STATUS_COL)
End If
End Sub
Картинка из дебаггера: В дебаггере, вроде бы, объект Nothing. Но вот условие не срабатывает. Т.е. found_status Is Nothing имеет значение False.
Помогите, пожалуйста, разобраться, как проверить, значение - это Nothing или нет.
Изменено: - 20.08.2018 13:00:53
Извлечь все подстроки с помощью регулярных выражений
Пользователь
Сообщений: Регистрация: 11.01.2013
11.08.2018 17:31:01
Excel 2007
Я хочу извлечь из строки с помощью регулярных выражений все подстроки между символами "/".
Код
Private Function get_all_matches(phrase)
Dim regEx As Object
Dim result As Variant
Set regEx = CreateObject("vbscript.regexp")
With regEx
.IgnoreCase = True
.Pattern = "/.*/"
.Global = True
End With
Set result = regEx.Execute(phrase)
Set get_all_matches = result
End Function
Использую подготовленную функцию:
Код
phrase = "where is /my/ ups /hiding/"
Set keys = get_all_matches(phrase)
Результат:
Код
keys(0).Value: "/my/ ups /hiding/".
А хотелось вот так:
Код
keys(0).Value: "/my/"
keys(1).Value: "/hiding/"
Пример прилагаю.
Был бы признателен за помощь.
Удаление дубликатов: я хочу оставить все падежи
Пользователь
Сообщений: Регистрация: 11.01.2013
24.07.2018 11:46:18
Excel 2007
В столбец, помещаю данные:
шкатулка
шкатулки
шкатулки
шкатулок
шкатулке
шкатулкам
шкатулку
шкатулки
шкатулкой
шкатулками
шкатулке
шкатулках
шкатулке
шкатулках
Выделаю. Данные/Удалить дубликаты.
Получаю:
шкатулка
шкатулки
шкатулки
шкатулок
шкатулке
шкатулку
шкатулкой
Это не то, что я хотел бы видеть. Он же все падежи сократил. Мне надо оставить все словоформы, но по одному разу.
Результат я сейчас достигаю через расширенный фильтр. Но это сильно дольше.
Скажите, пожалуйста, что можно предпринять? Удалить дубликаты как-нибудь настраивается?
Перебрать в цикле значения из диапазона, если диапазон составляет одну ячейку
Пользователь
Сообщений: Регистрация: 11.01.2013
27.06.2018 23:50:35
MS Office Excel 2007
Код
Set sh = Sheets("Лист1")
Set Result0 = Range(sh.Cells(1, 1), sh.Cells(1, 1)) 'Type Variant/Object/Range, Value "Текст1"
Set Result1 = Range(sh.Cells(1, 1), sh.Cells(2, 1)) 'Type Variant/Object/Range
Проблема у меня в том, что, вроде бы, применяю свойство Range единообразно. Разница в том, что в случае Result0 исходный диапазон составляет одну ячейку, а в случае Result1 ячеек две.
Я хотел бы перебрать результат в цикле. Пусть ячейка одна, но начало цикла будет совпадать с его концом, в результате будет одна итерация. Но в Result0 располагается как бы значение. И я никак не могу придумать, как можно в цикле перебрать содержимое этих обоих из этих объектов Range.
Применил метод Application.Transpose к обоим результатам. И вот здесь уже заметна разница.
Разница в том, что в случае с TransposedResult0 я не могу перебрать результат в цикле. А TransposedResult1 - вполне позволяет обратиться по индексу (TransposedResult1(1), TransposedResult1(2)).
Помогите, пожалуйста, добиться такого же результата для исходного диапазона в одну ячейку.
Изменено: - 28.06.2018 00:34:33
Найти Range в другом Range
Пользователь
Сообщений: Регистрация: 11.01.2013
25.06.2018 18:20:00
Excel 2007.
У меня на листе Workshop в колонке 1 расположен признак ключа, а в колонке 2 расположен ключ. Например, ключ - Набор, а признак - Специи. Это будет ряд для набора специй. А также могут быть другие наборы, водочный, набор ножей и т.п.
На листе Variants у меня в колонке колонке 1 расположен признак ключа, а в колонке 2 расположен ключ.
Я хочу взять Sheets("Workshop").Range(Cells(1,1), Cells(1,2)), т.е. две ячейки - ключ с признаком в одном ряду. И найти этот ключ с признаком на листе Variants.
Я попробовал использовать метод Find - передал параметр Range в метод Find. И получил<Application-defined or object-defined error>.
Получается, надо брать Ключ, искать его в колонке на листе Variants. Потом проверять в соседней колонке признак. Если не совпадает с искомым признаком, применять метод FindNext, чтобы найти следующий ключ.
Мне кажется, это нерационально.
Подскажите, пожалуйста, наиболее рациональный способ решения этой задачи.
Метод Find не выдает Nothing
Пользователь
Сообщений: Регистрация: 11.01.2013
22.06.2018 19:43:31
Нет опыта программирования на VBA, сразу споткнулся.
Код
Беру в цикле ячейку и смотрю, есть ли она в нужном мне столбце:
CurrentValue = Cells(CurrentRow, CurrentCol).Value()
FoundCell = Sheets("Variants").Range("A:A").Find(What:=CurrentValue, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
Если значение в списке, все нормально. Если же значение не найдено, то программа выдает ошибку: Run-time error '91': Object variable or With block variable not set. Судя по документации, метод Find должен выдавать Nothing, если не найдено искомое. Почему он падает в ошибку? Как ее обработать? Где в документации смотреть?
Был бы признателен за ответ.
Перенести только формулы и форматы
Пользователь
Сообщений: Регистрация: 11.01.2013
02.09.2013 15:48:24
В А1 у меня 1, в А2 - 2. В А3 - сумма А1 и А2. Выделяю А1-А3. Копирую. Иду на новое место. Специальная вставка / формулы и форматы чисел. Вставляет почему-то с цифрами. Т.е. из А1 и А2 тянет цифры.
Помогите, пожалуйста.
Версии файла
Пользователь
Сообщений: Регистрация: 11.01.2013
31.05.2012 10:46:10
Сегодня обнаружил, что могу просматривать версии своего файла.
Во-первых, это может быть удобно. Во-вторых, тут вопросы безопасности - дабы не раскрыть кому-то конфиденциальную информацию.
В общем, обнаружил такое свойство. И сразу попробовал на других файлах. Иногда версий нет (т.е. список версий пуст). А иногда вкладка с версиями вообще не доступна.
Не могли бы Вы подсказать, от чего это зависит.
В текстовой строке определить место символа.
Пользователь
Сообщений: Регистрация: 11.01.2013
14.05.2012 10:46:53
Хочу в строке определить место символа, обозначающего поставщика. Поставщиков условно трое. Символы - J, K, P. Затрудняюсь скомбинировать функции FIND и OR. Офис английский 2003.
Бегунок и цифровая подпись
Пользователь
Сообщений: Регистрация: 11.01.2013
03.05.2012 15:50:05
Хочу реализовать вот это:
1. Один или два сотрудника готовят служебную записку, подписывают ее. В записке обозначен бюджет. 2. Отдают на подпись начальнику своего отдела. 3. Подписывает главбух. 4. Подписывает директор.
Затем сотрудник расходует бюджет и фиксирует все свои затраты.
В бумаге уже устали.
Присматриваюсь к цифровой подписи. Цифровая подпись к Excel-файлу, в принципе, прицепляется. Да вот беда - цифровая подпись возможна только одна. Цифровая подпись означает, что документ не изменился ни на один бит. Т.е. множественные подписи невозможны.
Не могли бы Вы посоветовать мне что-нибудь?
Разобраться с функцией TEXT
Пользователь
Сообщений: Регистрация: 11.01.2013
02.05.2012 13:33:07
Офис у меня английский 2003.
Хочу из даты получить текстовое: 19 апреля 2012 г., а в другйо ячейке April 19, 2012
Не получается почему-то.
Кроме того, возникли вопросы: 1. Почему разделитель у меня точка с запятой? По мануалу запятая должна быть. 2. Почему формат пытается доминировать в таблице - он может отображаться прямо в ячейке - dd.mm.yyyy. Или иначе (как на скриншоте). Но, тем не менее, формат - бывает - попадает в отображаемый результат работы формулы. 3. Почему на скриншоте цифра вклинилась в мясо - раздвинув формат. Справа-слева я бы еще понял. Этот вопрос - конечно, не глобальный, но, может быть, поможет понять суть этой формулы.
Импорт из 1С в Excel
Пользователь
Сообщений: Регистрация: 11.01.2013
21.03.2012 19:55:09
Менеджеры по продажам у нас работают в старой программе. Они продают товар, им обычно хватает такого инструмента. А логисты и бухгалтерия работают в 1С 8.2.
Иногда попадаются такие клиенты, которым не нравится форма счета, которую выставляют менеджеры. Действительно, она, конечно страшненькая.
Собственно говоря, менеджеры договариваются о сделке, шлют логисту номер счета. Логист запускает обработку в 1С и подтягивает данные из старой программы.
Все работает нормально. Я - логист, и вот устал я менеджерам слать эти счета. Один-два счета в день, а все равно это нерационально. 1С у нас менеджерам руководство не купит.
Я бы хотел сделать шаблончик. Там шапка, подвал и поле для ввода номера счета. Макрос делает импорт из 1С и сохраняет новый файл с именем - номер счета + наименование покупателя.
Не могли бы Вы мне дать подсказку, как организовать такой импорт. И где почитать.
Копирование ячейки и передача значения по ссылке.
Пользователь
Сообщений: Регистрация: 11.01.2013
11.03.2012 12:27:11
Был удивлен, но если сделать копирование, то информация передается по ссылке. В А2 у нас формула макс(B:B)+1. Смотрите: копируем А2, идем в столбец В, делаем специальную вставку, values. И так в цикле - 10 раз.
При этом вставляется не 10 раз значение, бывшее в ячейке А2 на момент копирования, а каждый раз уже приращенное значение.
Чтобы зафиксировать значение, мне придется присвоить его переменной. И уже потом вставлять 10 раз.
Можно ли найти более элегантное решение?
Как изменять range в цикле?
Пользователь
Сообщений: Регистрация: 11.01.2013
11.03.2012 10:10:21
Делаю базу данных. Чур, не пинать за то, что она не подчиняется правилам нормализации. Вопрос в другом.
Программа может обрабатывать до 10 накладных. Надо просто сохранить информацию в реестре, а затем выводить ее в виде печатной формы (лист "Печатная форма"). Вся печатная форма у нас будет представлять одну отгрузку.
Моя идея такова. Отгрузке присваиваем номер. В данном случае он у нас в реестре выделен красным. Из исходной таблицы (лист "Подготовка") берем данные поочередно о партиях (данные в столбцах, ориентируемся на номера по порядку), переносим все в реестр, транспонируем, вставляем. Затем из реестра будем выдеркивать функцией ВПР.
Вроде бы, все просто: 1. Поставил курсор на А1. 2. В цикле: 1) сместился на ячейку вправо. 2) взял в память область шириной в один столбец, высотой 17 рядов. 3) перешел на лист "Реестр", поставил курсор на нужную ячейку. 4) вставил значения с транспонированием. 5) вернулся на лист "Подготовка".
Да вот беда, затрудняюсь такой цикл организовать. Смотрю на Range, а он, кажется, оперирует только областями вида B1:B17. И как же мне прогнать в цикле дальше - С, D и т.д. до К?
Indirect и ссылка на ячейку в другом файле
Пользователь
Сообщений: Регистрация: 11.01.2013
03.02.2012 15:09:50
Есть файл с данными дилеров. В другом файла на я в ячейку ввел имя файла с данными дилеров. Присвоил этой ячейке имя Dealers.
И теперь хочу получить данные из упомянутого файла, а там еще с указанного листа. Вроде бы, надо через indirect. Но не получается.
Помогите, пожалуйста.
Памятка
Пользователь
Сообщений: Регистрация: 11.01.2013
13.12.2011 10:26:35
Хочу сделать памятку: при закрытии книги пользователь перенаправляется на лист "Памятка". Если пользователь подтверждает свое желание выйти, то - соответственно, выходим.
Если же пользователь от вида памятки возбудился, то не закрываем файл, а перенаправляем пользователя обратно на лист "Рабочая база".
Пытаюсь использовать обработку события Workbook_BeforeClose.
Но столкнулся с ситуацией, что не закрывать файл в этом случае я не могу. Т.е. файл-то все равно закрывается, видимо, потому что событие - before close.
Помогите, пожалуйста, разобраться.
Учесть разницу во времени и округлить в большую сторону с шагом в четверть часа
Пользователь
Сообщений: Регистрация: 11.01.2013
10.11.2011 12:26:58
Не могу разобраться. Задача - посчитать фактическое время работы и округлить его в большую сторону с шагом в четверть часа.
Выбрал формат ячейки - (все форматы), задал формат: ч:мм Соответственно можно теперь эффективно получать разницу во времени в часах и минутах.
В примере мы получаем 1:12.
Однако, теперь формат становится не удобен. Потому что полученное время надо округлять в большую сторону с шагом в четверть часа. А потом еще умножать на тарифную ставку.
Соответственно, оплачиваемое время хочется иметь в числовом формате (в нашем примере - это будет 1,25).
Могу решить эту задачу путем пространных вычислений: вычленения минут, округления их в большую сторону и т.д. Но подозреваю, что это нерационально.
Был бы очень признателен за совет.
Значение по умолчанию для связанных списков
Пользователь
Сообщений: Регистрация: 11.01.2013
28.10.2011 11:34:36
Есть связанные списки. Чищу содержимое макросом (проверку данных осталяем). Как сделать, значение по умолчанию для второго списка? Иными словами, условно, чтобы при выборе марки Toyota подставлялось Alteza, a Ford - Aspire.
Date Picker не умеет выдавать месяца по-русски
Пользователь
Сообщений: Регистрация: 11.01.2013
28.10.2011 10:25:06
У меня офис 2003, руссифицированный.
Как победить? Мне бы подошло и по-английски. Но кракозябры - не вариант.
Крашу/защищаю при открытии. Убираю заливку/защиту (ToggleButton) - ошибка.
Пользователь
Сообщений: Регистрация: 11.01.2013
26.10.2011 15:50:15
Сабж, собственно.
При открытии книги я защищаю лист и окрашиваю его. На листе "Справочник" есть кнопка "Защитить/Снять защиту" . Первый раз после открытия нажатие на кнопку вызывает Run-time error 1004. Нельзя установить ColorIndex класса Interior.
Если завершить работу макроса, то потом можно пользоваться указанной кнопкой без проблем. Как победить?
Попутно. Когда снимаю защиту и убираю заливку указанной кнопкой, то белеет только первый ряд и ячейка А2. Почему?
Выбор уникальных значений из списка (макросом)
Пользователь
Сообщений: Регистрация: 11.01.2013
25.10.2011 12:45:27
Есть перечень на листе "Справочник". А уникальные значения переносим на лист "Справочник1".
Подскажите, пожалуйста, почему у меня идет дублирование первого элемента в списке на листе "Справочник".
Заранее спасибо.
Как найти вхождение
Пользователь
Сообщений: Регистрация: 11.01.2013
06.10.2011 11:55:37
Есть два столбца, они отличаются на один-два символа. Иногда символ добавляется в первый столбец, а иногда-во второй. Затрудняюсь вычленить общую часть.
Печать конвертов: как научить принтер попадать на маленький конверт
Пользователь
Сообщений: Регистрация: 11.01.2013
30.08.2011 15:29:19
Автоматизировал себе печать конвертов. Доволен. Да вот незадача. Раньше был у меня HP 3390, а в новом офисе HP 1320n. Не могу настроить вывод конверта на печать, чтобы попадать точно на конверт. У меня поле «Кому» вообще не видно. А поле «Куда» попадает в середину конверта.
Иными словами, я сделал реестрик, а из него выдергивается информация в печатную форму (см. приложенный файл). Подходим к принтеру, направляющие в лотке полистовой подачи выставляем по узкой стороне конверта. И вперед. Прямо не задумываясь жмем кнопку печати. Так было раньше. А тут – не могу никак. Играл с полями, размерами рядов, колонок, ячеек. У принтера почему-то такой драйвер, что не задать C5, a custom size в Excel нет.
Можете ли вы что-нибудь мне посоветовать?
Конкатенация (почему возникают пробелы)
Пользователь
Сообщений: Регистрация: 11.01.2013
09.08.2011 10:21:09
Программа регистрации заявлений. Скан-копия должна быть положена в соответствующий создаваемый автоматически каталог.
Если запустить макрос кнопкой New Application, то формируется номер как комбинация номеров из столбцов А-B-C-D. Для работы макроса нужно выбрать ответственного в верхнем выпадающем списке (PiC). Остальное можно не задавать.
Осторожно: прога плодит директории в каталоге C:
Не могу разобраться, почему возникают пробелы после дефисов. Т.е. директория формируется вот в таком ключе: 21- 21- 0-ADM. Как искоренить?
Выпадающие списки (не могу победить delimited list)
Пользователь
Сообщений: Регистрация: 11.01.2013
26.05.2011 12:53:37
Посмотрите, пожалуйста, пример.
Хочу сделать, возможность задания: 1) компании, 2) кому вручить А вот телефон должен сам подставляться.
Да вот беда - что делать с т.н. delimited list? Надо как-то изменять табличку или я не прав?
Условное форматирование (?)
Пользователь
Сообщений: Регистрация: 11.01.2013
19.05.2011 11:15:36
Предыстория (не вошло в пример). Маркетинг. С сайтов интернет-магазинов копируется информация. И строится сводная таблица: модель, цена. Иначе говоря, есть интересующих список моделей. Смотрим - модель совпала, значит в следующей ячейке стоит цена.
Проблема: Магазины часто предлагают комплекты. Например, возьмем электронику. Интересует информация на какой-нибудь адаптер Bluetooth, красная цена которому 5 тысяч. А он идет в комплекте с автомобильной навигационной системой, которая стоит 50 тысяч. Описанный выше алгоритм посмотрит название модели, возьмет цену из соседней ячейки и выдаст примерно 55 тысяч. Не годится. И автоматически отсечь лишнее вряд ли удастся (чай, не искусственный интеллект).
Мозговой штурм: Нужен черный список. Вот этот магазин предлагает такие-то комплекты. И если модель в черном списке, то надо просто всю строку выделить цветом.
Вернемся к файлу с примером:
На листе "Исходные данные" есть черный список: модель и что в комплекте. В нашем случае магазин Drv Mystery MCD-585MPU в комплекте с iPad, а Mystery MCD-664MPU в комплекте с антенной.
На листе "Сводная_Таблица" собрали цены. И есть аналог автофильтра - механизм схлопывания колонок, оставляя данные только по одному магазину.
Не могу сделать так, чтобы когда я схлопну лишние колонки, все строки с моделями из черного списка подсвечивались красным.
Был бы очень признателен за помощь.
Очистить ячейку от мусора и получить число
Пользователь
Сообщений: Регистрация: 11.01.2013
12.05.2011 14:56:10
Собираю ценовую информацию с сайтов. Она бывает представлена в виде текстового выражения.
Затрудняюсь макросом удалить из ячейки все кроме сути. Мешают буквы, пробелы, невидимые символы (см. А2-А4), разделители разрядов. Десятичный раздетилель может быть в виде точки или запятой. Тоже затрудняюсь с ним что-то сделать.
Дробную часть надо сохранить. Т.е. получить нормальное число с двумя знаками после запятой.
Справочники, клики, два примера
Пользователь
Сообщений: Регистрация: 11.01.2013
11.05.2011 16:52:55
Хочу сделать переключатель: при нажатии на гиперссылку в соседней ячейке поднимается флажок - вот этот ряд выбран. Плюс еще целый ряд моментов описан в примере.
Безоговорочно удалить лист
Пользователь
Сообщений: Регистрация: 11.01.2013
07.05.2011 00:00:16
Когда удаляем лист, получаем запрос на подтверждение - там могут быть данные, подтвердите намерение удалить.