Консультация № 68903
28.12.2006, 13:03
0.00 руб.
0 1 1
Добрый день!
помогите написать макрос.
у меня есть список(в столбце "А:А").
необходимо через окно ввода(типа inputbox, если возможно или другое).
ввести слово(или словосочетание, которое находится в списке) в форму и если это слово(или словосочетание) находится
на 1-м месте по отношению к другим, то в столбец "В" соответствующий этой строке поставить плюс "+",
если не на 1-м, то ничего проставлять не надо и переход на следующую строку
и так до конца списка столбца "А:А".
пример в приложении.
мерси заранее

Приложение:
12-12-06 стулья офисные Встроенная мебель 2006 12-11-06 Встроенная мебель стулья офисные 2006 11-04-06 Встроенная мебель стулья офисные 2006 02-04-06 стулья офисные Встроенная мебель 2006 31-03-06 стулья офисные Встроенная мебель 2006 13-02-06 Встроенная мебель стулья офисные 2006 29-01-06 Встроенная мебель стулья офисные 2006 29-12-05 стулья офисные Встроенная мебель 2005 23-12-05 Встроенная мебель стулья офисные 2005

Обсуждение

Неизвестный
30.12.2006, 15:21
общий
это ответ
Здравствуйте, Wera-d!
Если я правильно понял, чего надо, то выглядеть такой макрос должен приблизительно так:
1). Создайте в редакторе VBA форму (UserForm1). Най ней поместите текстовое поле (textBox1) и кнопку (CommandButton1).
2). Щелкните правой клавишей мышки на ярлыке листа в экселе и во всплывающем меню выберите пункт "Исходный текст".
3). Создайте там любую процедуру, которая будет Вам нужна чтобы провести нужные действия (например, Worksheet_Activate()).
4). В ней напишите код, который будет немодально (чтобы Вы могли иметь доступ к ячейкам на листе) выводить Вашу форму на экран. Например, такой:

Private Sub Worksheet_Activate() ‘Происходит при переходе на рабочий лист
If f Is Nothing Then ‘Если форма не загружена, то...
Set f = New UserForm1 ‘Загружаем ее
Load f

f.Show vbModeless ‘Показываем
End If
End Sub

Private Sub Worksheet_Deactivate() ‘Происходит при переключении на другой лист
If Not (f Is Nothing) Then ‘Если форма загружена, то...
Unload f ‘... выгружаем ее, чтобы не мешала другой работе -
Set f = Nothing ‘она же нужна например только на нужном нам листе
End If
End Sub

Таким образом, мы будем иметь выскакивающую на экран форму при переходе на нужный нам лист (Например, Лист1).

5). В форме как реакцию на щелчок на кнопке введите такой код:

Private Sub CommandButton1_Click()
Dim txt As String, stroka As String
Dim i As Long
Dim c As Range

txt = "##?##?## " & UCase(TextBox1.Text) & "*"
If Len(txt) = 0 Then
MsgBox "Введите текст!", vbCritical, "Ошибка"
Exit Sub
Else
i = 1
Set c = ActiveSheet.Columns(1)
Do While 1
stroka = UCase(c.Rows(i).Text)
If Len(stroka) = 0 Then Exit Do

If stroka Like txt Then
c.Rows(i).Columns(2) = "+"
Else
c.Rows(i).Columns(2) = vbNullString ‘Вот это надо для того, чтобы Вы вручную не очищали 2 столбец после предыдущих результатов, но если не хотите, то сотрите эту строку
End If

i = i + 1
Loop
MsgBox "Все!"
End If
End Sub

Вводите в текстовом поле нужные слова и жмите кнопку.
Форма ответа