Страницы: 1
RSS
Как автоматически изменять вводимые значения на другие
 
Здраствуйте, пожалуйста, помогите решить задачу! Как автоматически менять вводимые в ячеки значения на другие (как ВПР, только значения проставляются в ту же ячейку в которую вводятся данные).
 
Макросом. Вопрос: а зачем такие сложности? Используйте выпадающий список - всего три значения и ничего другого ввести будет невозможно.
 
Дело в том, что сами значения маленькие и их быстрее вручную напечатать чем использовать выпадающий список, и еще один не маловажный момент - ярлычек выпадающего списка закрывает соседнюю ячейку куда нужно вводить номера (в оригинале таблица очень сжата и расширить ее нельзя), а цель приследуется только одна: максимум ускорить работу, в селепую, не переключая язык быстро вбивать первые символы и все. Нашел похожий пример, но из-за незнания VBA не получается расширить действие на оба столбца, и при пустых значениях выставляет #Н/Д. Если не сложно помогите усложнить). Прием думаю многим пригодится, полезная штука.
 
Автозамена? Параметры Excel - Правописание - Параметры автозамены.
 
Спасибо! Хорошая идея, как вариант подходит, просто и понятно. Все же хочется общее решение, которое бы и в будущем в более сложных случаях пригодилось.
 
Автозамена регистр в некоторых случаях не меняет, а это тоже важно, и с данной таблицей работает несколько пользователей, которым придется настраивать автозамену, объяснять зачем и для чего это нужно. Подскажите как доработать этот ариант из примера (только на два и более столбца, а лучше на определенный диапазон(ы), и без #Н/Д):  
 
Option Explicit  
Private Sub Worksheet_Change(ByVal Target As Range)  
  If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub  
  With Application  
  .EnableEvents = False  
  Target = .VLookup(Target.Value, Columns("C:D"), 2, 0)  
  .EnableEvents = True  
  End With  
End Sub
 
На диапазон А1:В10  
If Target.Cells.Count > 1 Then Exit Sub  
If Not Intersect(Target, Range("A1:B10")) Is Nothing Then  
With Application  
...
 
Такой вариант:  
 
таблицу замены делаем такой:  
 
"Контролируемый  
диапазон"  
A1:A10, D2:D11  
ТАБЛИЦА 2  
f FW  
F FW  
FW FW  
а FW  
 
и т.д.    
 
Я её сдвинул в  N:O, в N2 записан перечень контролируемых диапазонов!  
Его можно "динамически" менять и дополнять, только оставьте вокруг незаполненные ячейки (чтоб работал CurrentRegion).  
 
Макрос:  
 
Private Sub Worksheet_Change(ByVal Target As Range)  
   If Target.Cells.Count > 1 Then Exit Sub  
   If Not Intersect(Target, Range([n2].Value)) Is Nothing Then
       With Application  
           .EnableEvents = False  
           Dim a, i&  
           a = [n2].CurrentRegion.Value
           For i = 4 To UBound(a)  
               If a(i, 1) = Target.Value Then Target.Value = a(i, 2): Exit For  
           Next  
           .EnableEvents = True  
       End With  
   End If  
End Sub
 
Доброва времени суток! Юрий М и Hugo, вы не могли бы свои варианты решения вставить в мою таблицу и выложить на форуме, у меня не получается, VBA не знаю поэтому сложности в выявлении неправильных действий.
 
Доброе утро!  
Я с работы не могу файлы выкладывать. Может быть кто-то кто может сделает пример по моему способу?  
 
Private Sub Worksheet_Change(ByVal Target As Range)  
этот макрос кладёте в модуль нужного листа (как сделано в Вашем примере в post_333205.rar)  
Таблицу соответствий можно и не сдвигать, это не принципиально.
 
Hugo, доброе утро! Мне уже не кспеху, я уже отработал (Хабаровск), так что могу подождать пока вы придете домой, пробовал в исходный лист вставлять ваш макрос но при изменении ячейки выдовало ошибку. Пока что использую метод Казанского (неплохо звучит: МЕТОД КАЗАНСКОГО:-)) с автозаменой, но макрос будет полезнее, хотелось бы чтобы было в нем немного понятнее (если вас это не затруднит) где и что изменять, для применения его на других таблицах с разной структурой и данными, как диапазон "таблицы2" вынести на другой лист, менять контролируемые диапазоны.
 
Доброе :)  
 
Хорошо Вам, у Вас уже вечер пятницы, совсем спешить с работой не нужно :)  
 
Вот именно чтоб проще менять "контролируемые" ячейки, я и вынес их перечень на лист, над таблицей соответствия.  
Но можно и где-то рядом его расположить, не важно.  
Просто пишите в любой указанной в коде ячейке через запятую перечень диапазонов: A1:A10, H2:H3 и т.д.  
А ниже начиная с четвёртой строки (на это число ориентирован код) можете "бесконечно" продлевать список соответствий.  
Можно эти параметры располагать на другом (служебном) листе, или всё прописать непосредственно в коде (но так сложнее их менять, если понадобится).  
 
Этот код не мешает вводить то, чего нет в списке, например букву "a"  
Можно его чуть изменить, чтоб не обращал внимания на регистр - так можно список сократить в 2 раза :)  
 
Если до вечера файл не появится - выложу.
 
Тоже решал.Посчитал решение Hugo достаточно)
 
Тоже вариант.  
 
Я файл уже подготовил - чуть развил идею :)  
Вечером покажу, может кому пригодится.
 
Обещанное.
 
Hugo и Маугли, спасибо! Hugo, раз уж вы начали развивать идею :-), можно сделать так: в диапазоне А1:А10 используется для подстановки Таблица1, в В1:В10 - Таблица2 (Таблица1 и Таблица2 с разными данными) и т. д., и использовать вариант Маугли с "Диспетчером имен"?
 
Hugo вариант очень хороший, но разобратся для меня сложновато (где что можно поменять), объединитесь с Маугли, в его варианте все сразу понятно и где диапазоны выставить которые будут контролироваться, и где поставить именнованный диапазон.
 
Hugo, разобрался где менять диапазоны), теперь нужно придти от частного к общему, использовать один исходный код для всех листов. К примеру зашел в сервис лист в первой строке над каждой таблицей указал необходимые листы, во второй необходимые диапазоны для этих листов, только вот как диапазоны перечислять? Может как нибудь так Лист2!F24:F28, Лист1!A24:A28, и т.д. Вариант получится универсальный и практичный!
 
Hugo, спасибо большое! Рабочий день прошел на ура! Скажите возможно ли объеденить код с вашими вариантами в один, и исппользовать несколько разных диапазонов подстановки на разных диапазонах одного листа?
 
Можно.  
В коде листа есть строка:  
 
If Not Intersect(Target, Range(.[A2].Value)) Is Nothing Then
 
так вот если это условие не выполняется, можно ниже дописать другое условие, на проверку другого диапазона. Соответственно с подстановкой данных из другого массива.  
Вот только сделать универсально и автоматически - это сложнее, и честно лениво и неохота продумывать.  
Просто сделайте на сервисном листе столько "настроечных столбцов", сколько нужно, и пропишите их в коде.
 
Спасибо, вы мне очень помогли! Буду разбираться дальше, вопросов и идей еще куча, но по другим темам)
Страницы: 1
Читают тему
Наверх