Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2013, 18:06   #1
KJ_ya
Пользователь
 
Регистрация: 18.08.2012
Сообщений: 10
Вопрос Как избежать циклической формулы?

Есть таблица. Можно выбрать из списка код, и к нему ВПРом подтягивается имя. Если выбрать из списка имя, то просто цена также по средством ВПР.
Но если в одной строке выбрать только имя, а в строке ниже - КОД, то функция ВПР работает на все ячейки диапазона и верхняя строчка затирается, т.к. в ячейке с кодом - пусто(
как сделать, чтобы, если выбрал только код, то подтягивалось имя, а если выбрал имя, то подтягивается код? Если писать как в впр, то получается, что формулы ссылаются друг на друга.
Запуталась уже.
Профессионалы, помогите, плиз!
Код:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
   
       Set XLro = Range("A20:A30")
   Set XLrd = Range("B20:B30")
 
     Cancel = True
     
 If Target.Cells.Count > 1 Then Exit Sub

If Not Application.Intersect([c14], Target) Is Nothing Then
 
 UserForm1.Show

End If

     '1 столбец Коды
      
   If Not Application.Intersect(XLro, Target) Is Nothing Then
   
        Dim Col As New Collection
        Dim x, x1 As Integer
        Dim c As Long

        c = 1
        x = 1
    
        Do While Not IsEmpty(Sheets("Cat").Cells(x, c))
           On Error Resume Next
           Col.Add Sheets("Cat").Cells(x, c), Sheets("Cat").Cells(x, c)
         x = x + 1
        Loop
        
        For x1 = 1 To x
            UserForm2.ListBox1.AddItem Col(x1 - 1)
     
        Next

               UserForm2.Show
               Q = 20
               If Cells(Q, 1) <> "" Then
               
               XLrd.FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[-1],Cat!C[-1]:C[2],2,0)),"" "",(VLOOKUP(RC[-1],Cat!C[-1]:C[2],2,0)))"
               Else: Q = Q + 1
               End If
               
               End If
               
   '1 столбец Имена
If Not Application.Intersect(XLrd, Target) Is Nothing Then
         c = 2
         x = 1
        Do While Not IsEmpty(Sheets("Cat").Cells(x, c))
           On Error Resume Next
           Col.Add Sheets("Cat").Cells(x, c), Sheets("Cat").Cells(x, c)
         x = x + 1
        Loop
        For x1 = 1 To x
            UserForm2.ListBox1.AddItem Col(x1 - 1)
        Next

               UserForm2.Show
                           
               End If
End Sub
Вложения
Тип файла: zip test2.zip (17.7 Кб, 8 просмотров)
KJ_ya вне форума Ответить с цитированием
Старый 27.01.2013, 19:38   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

А зачем вообще формула? Можно загрузить таблицу в 3-колоночный листбокс (отображаются только 2 колонки) и брать данные из него.
Вложения
Тип файла: rar test2-1.rar (16.2 Кб, 10 просмотров)
exceleved@yandex.ru Яндекс.Деньги: 410011500007619

Последний раз редактировалось Казанский; 27.01.2013 в 19:43.
Казанский вне форума Ответить с цитированием
Старый 27.01.2013, 20:26   #3
KJ_ya
Пользователь
 
Регистрация: 18.08.2012
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
А зачем вообще формула? Можно загрузить таблицу в 3-колоночный листбокс (отображаются только 2 колонки) и брать данные из него.
Это отлично! Спасибо!
Просто нужна возможность этот код вводить вручную, а не выбирать из списка, чтобы кто знает код - набирал его, а кто нет - выбирал из списка. Поэтому я в имена впр сделала.
И еще надо, чтобы независимо от того - ввели только код или только выбрали имя - в обеих ячейках был и код и имя.

Последний раз редактировалось KJ_ya; 27.01.2013 в 20:34.
KJ_ya вне форума Ответить с цитированием
Старый 27.01.2013, 21:54   #4
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

И еще надо, чтобы независимо от того - ввели только код или только выбрали имя - в обеих ячейках был и код и имя
Это как раз было реализовано.
Сделал выпадающие списки в ячейках с помощью Проверки данных. Теперь можно и вводить вручную, и выбирать из выпадающего списка, и вызывать форму (может, это и не нужно).
Можно ввести значение сразу в несколько ячеек (Ctrl+Enter).
Можно выделить несколько ячеек и нажать Del - очистятся целые строки.
Вложения
Тип файла: rar test2-1.rar (20.2 Кб, 22 просмотров)
exceleved@yandex.ru Яндекс.Деньги: 410011500007619

Последний раз редактировалось Казанский; 27.01.2013 в 21:58.
Казанский вне форума Ответить с цитированием
Старый 27.01.2013, 22:22   #5
KJ_ya
Пользователь
 
Регистрация: 18.08.2012
Сообщений: 10
Хорошо

Цитата:
Сообщение от Казанский Посмотреть сообщение
И еще надо, чтобы независимо от того - ввели только код или только выбрали имя - в обеих ячейках был и код и имя
Это как раз было реализовано.
Сделал выпадающие списки в ячейках с помощью Проверки данных. Теперь можно и вводить вручную, и выбирать из выпадающего списка, и вызывать форму (может, это и не нужно).
Можно ввести значение сразу в несколько ячеек (Ctrl+Enter).
Можно выделить несколько ячеек и нажать Del - очистятся целые строки.
Огромное спасибо!!!! Это отлично!!! Неделю почти билась и списки выпадающие прошла, но, почему-то не доработала (не сделала из взаимозависимыми), а это решило мою проблему!!! СПАСИБО!
KJ_ya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как избежать подвисания Juffin Общие вопросы Delphi 12 18.05.2011 23:41
програмирование алгоритмов итерациональной циклической структуры с применением реккурентной формулы Dizly Паскаль, Turbo Pascal, PascalABC.NET 4 18.12.2010 21:38
Как избежать Selection? Мультипликатор Microsoft Office Word 10 21.06.2010 17:15
Бот - как избежать слежки? boris-blade Win Api 9 28.12.2009 09:11
как избежать кэширования в Опере rolling PHP 3 01.12.2009 18:34