Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Подскажите, пожалуйста, как сделать... Добавлено: 18.09.10 10:37  

Автор вопроса:  Scod13 | Web-сайт: 1 | ICQ:
... так, чтобы в excel'e проделывалось вот такая операция (по всей видимости на языке VB):

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

Т.е. есть A1 - главная, куда вводится текст.
Есть B1, C1, D1 - куда должны будут вводиться данные.
Есть Другой лист с базой данных (A1:An - фио, B1:Bn - возраст, C1:Cn - образование и т.д.), где каждому новому А1 соответствуют свои уже заданные B1, C1, D1.

Нужно сделать так, чтобы при написании в базовую A1 осуществлялся поиск этого текста по базе данных среди A1:An, и в случае совпадения для некоторого Ai в ячейки исходного листа B1, C1, D1 подставлялись соответствующие данные второго листа Bi, Ci, Di.

Данные все преимущественно текстовые либо "текст+числа" - то есть снова текстовые, наверное.

Прошу помочь. Ибо мои познания здесь ограничиваются простой функцией ЕСЛИ в самом excel'e, но получается слишком громоздко, нужно писать для каждой заполняемой ячейки, которые могут быть разнесены по первому листу на разные расстояния.

:((

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 Eugy



Вопросов: 0
Ответов: 73
 Профиль | | #1 Добавлено: 18.09.10 12:19
если бесплатно, то вот так
  1. Option Explicit
  2.  
  3. Private Sub Worksheet_Change(ByVal Target As Range)
  4.     If Target.Column = 1 Then ' если что-то меняется в первом столбце
  5.         Dim xRow As Long ' текущая строка
  6.         Dim fRow As Long ' ПОИСКПОЗ
  7.         Dim findstr As String ' искомый текст
  8.         Dim fndRes As Variant ' результат ПОИСКПОЗ
  9.         Dim ws2 As Worksheet
  10.         xRow = Target.row
  11.         Set ws2 = Worksheets("Лист2") 'лист с данными
  12.         findstr = Target.Text
  13.         fndRes = Application.Match(findstr, ws2.Range("A1:A32000"), 0) ' ПОИСКПОЗ
  14.         If IsNumeric(fndRes) Then
  15.             fRow = fndRes
  16.             'если найдено - копировать значения Bn:Dn с листа
  17.             Range("B" & xRow & ":D" & xRow).Value = ws2.Range("B" & fRow & ":D" & fRow).Value
  18.         Else
  19.             Range("B" & xRow & ":D" & xRow).Value = Split(String(3, "?"))  'нет данных
  20.         End If
  21.     End If
  22. End Sub

Ответить

Номер ответа: 2
Автор ответа:
 Scod13



ICQ:

Вопросов: 1
Ответов: 1
 Web-сайт: 1
 Профиль | | #2
Добавлено: 18.09.10 14:12
Благодарю! Уже что-то :)

Ответить

Номер ответа: 3
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #3 Добавлено: 19.09.10 15:46
Можно еще попробовать функцию Excel - VLOOKUP (ВПР по-русски :-)). Может и не нужно будет ничего писать.

Ответить

Номер ответа: 4
Автор ответа:
 Eugy



Вопросов: 0
Ответов: 73
 Профиль | | #4 Добавлено: 21.09.10 01:22
Так точно, но графоманы не ищут легких путей:)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам