Excel макрос ячейка содержит текст

Вы пробуете сделать выбор из того, что выбора не имеет. Т.е., если бы Вы проверяли только наличие слова «Форум1», тогда применение Select Case было бы оправданным, например

Visual Basic
1
2
3
4
5
6
7
8
Select Case InStr(1, Cells(i, 1).Value, "Форум1",vbTextCompare)
     Case is = 1 ' "Форум1" - первое слово фразы
           '(какие-то действия)
     Case is = 0 ' "Форум1" отсутствует 
           '(какие-то действия)
     Case is>1 ' "Форум1" находится в середине фразы      
           '(какие-то действия)
End select

В Вашем случае Вы ищете три разных выражения, и тогда лучьше использовать что-то другое, как подсказывает, например, Pavel55.
И все-таки желательно применять .Value, vbTextCompare (vbBinaryCompare)

Добавлено через 4 часа 19 минут
Давайте тогда добьем строковую функцию instr() до конца.
Никогда не возникала у меня подобная ситуация, но не так давно участник форума Скрипт посоветовал применить Instr() совместно с функцией, к примеру, Ucase() — тоже строковая фукция. И буквально на следующий день…. Поэтому и Вам передаю его совет. Все-таки лучьше застраховаться и писать в функции следующим образом (или что-то подобное):

Visual Basic
1
InStr(1, Ucase(Cells(i, 1).Value), Ucase("Форум1"),vbTextCompare)

Что б понять, прогоните где-то в модуле выражение:

Visual Basic
1
2
3
Dim mStr$
    mstr="Форум1"
    Debug.Print Ucase(mstr) ' Ctrl + G. Можно еще Ucase("Форум1"), или Ucase(Trim(Cells(i,1).value))

При этом, сами значения mStr и cells(i,1).value изменится только в момент (и на момент) применения ф-ции InStr для сравнения. Но это не панацэя!
Удачи.

I want to check a range of cells for a certain piece of text. This text is always in my document, except it’s cell is variable (column is always B). So I check a range from 1:75 whether any cells contain a piece of text, but it doesn’t seem to work.

Dim FoundRange As Range
Set FoundRange = Cells.Find("5/7 binnen 4h")
Range("I" & EmptyCell + 2).Value = ... (value of cell I on same row as B)

Cell I’m looking for always contains this text Onderhoud 5/7 binnen 4h but its position can vary, that’s why I just need to check whether it contains any of it. When I find that cell, I need the value I on the same row.

Any suggestions are welcome!

Community's user avatar

asked Feb 23, 2012 at 16:13

CustomX's user avatar

2

Could you not just search for the substring?

Sheet1.Cells.Find("string to find")

Will return the a range containing the string (or nothing if the string can’t be found.

For example

Public Sub Macro1()
Dim FoundRange As Range

Set FoundRange = Sheet1.Cells.Find("5/7 binnen 4h")

' display the cell address to the user
MsgBox FoundRange.Address


' put the found value in column i in the same row as the found text in a known location ($C$1 in this case)
Sheet1.Range("$C$1").Value = Sheet1.Cells(FoundRange.Row, 9).Value

' put the found value in four columns to the right in the same row as the found text in a known location ($C$1 in this case)
Sheet1.Range("$C$2").Value = FoundRange.Offset(0, 4).Value

End Sub

answered Feb 23, 2012 at 16:26

Steve Homer's user avatar

Steve HomerSteve Homer

3,8272 gold badges21 silver badges40 bronze badges

9

This is too much to fit into a comment, so posting it as an answer…

You should be careful when using Find() with just a single argument: if you’ve previously used Find() in your code and (eg) specified an argument lookat:=xlWhole then you may not get the results you expect, particularly if you’re looking for a substring of a cell’s value. Settings passed to Find() are persistent: if you don’t specify an argument then it may be carried over from the previous use.

As an example (working with a sheet containing the text «hello tom» in B4:

Sub Tester()

    Dim f

    Set f = ActiveSheet.Cells.Find(what:="tom", lookat:=xlPart)
    Report f

    Set f = ActiveSheet.Cells.Find(what:="tom", lookat:=xlWhole)
    Report f

    Set f = ActiveSheet.Cells.Find("tom")
    Report f

End Sub

Sub Report(f)
    If Not f Is Nothing Then
        Debug.Print f.Address
    Else
        Debug.Print "not found"
    End If
End Sub

Running this gives:

$B$4
not found
not found

I seem to recall this is also the case if you’ve used Find() «manually» and then use it in code later in the same session (didn’t test though).

answered Feb 23, 2012 at 17:24

Tim Williams's user avatar

Tim WilliamsTim Williams

150k8 gold badges96 silver badges124 bronze badges

2

На чтение 19 мин. Просмотров 24.3k.

VBA If Statement

Пьер Корнель

Угадай, если сможешь, и выбери, если посмеешь

Содержание

  1. Краткое руководство по VBA If Statement
  2. Что такое IF  и зачем оно тебе?
  3. Тестовые данные
  4. Формат операторов VBA If Then
  5. Простой пример If Then
  6. Условия IF
  7. Использование If ElseIf
  8. Использование If Else
  9. Используя If And/If Or
  10. Функция IIF
  11. Использование Select Case
  12. Попробуйте это упражнение

Краткое руководство по VBA If Statement

Описание Формат Пример
If Then If [условие верно] 
Then [действие]
End If
If score = 100 
Then Debug.Print
«Отлично» 
End If
If Else If [условие верно]
Then [действие]
Else [действие]
End If
If score = 100 
Then Debug.Print 
«Отлично» 
Else Debug.Print 
«Попробуй снова» 
End If
If ElseIf If [1 условие верно] 
Then [действие]
ElseIf [2 условие
верно] 
Then [действие]
End If
If score = 100 
Then Debug.Print 
«Отлично» 
ElseIf score > 50 
Then Debug.Print 
«Пройдено» 
ElseIf score <= 50 
Then Debug.Print 
«Попробуй снова» 
End If
Else и ElseIf
(Else должно
идти
после ElseIf’s)
If [1 условие верно] 
Then [действие]
ElseIf [2 условие
верно] 
Then [действие]
Else [действие]
End If
If score = 100 
Then Debug.Print 
«Отлично» 
ElseIf score > 50 
Then Debug.Print 
«Пройдено» 
ElseIf score > 30 
Then Debug.Print 
«Попробуй снова» 
Else Debug.Print 
«Ой» 
End If
If без Endif
(Только одна
строка)
If [условие верно] 
Then [действие]
If value <= 0 
Then value = 0

В следующем коде показан простой пример использования
оператора VBA If

If Sheet1.Range("A1").Value > 5 Then
    Debug.Print "Значение больше 5."
ElseIf Sheet1.Range("A1").Value < 5 Then
    Debug.Print "Значение меньше 5."
Else
    Debug.Print "Значение равно 5."
End If

Что такое IF  и зачем оно тебе?

Оператор VBA If используется, чтобы позволить вашему коду
делать выбор, когда он выполняется.

Вам часто захочется сделать выбор на основе данных, которые
читает ваш макрос.

Например, вы можете захотеть читать только тех учеников, у
которых оценки выше 70. Когда вы читаете каждого учащегося, вы можете
использовать инструкцию If для проверки отметок каждого учащегося.

Важным словом в последнем предложении является проверка. Оператор
If используется для проверки значения, а затем для выполнения задачи на основе
результатов этой проверки.

Тестовые данные

Мы собираемся использовать следующие тестовые данные для
примеров кода в этом посте.

VBA If Sample Data

Формат операторов VBA If Then

Формат оператора If Then следующий

За ключевым словом If следуют условие и ключевое слово Then

Каждый раз, когда вы используете оператор If Then, вы должны использовать соответствующий оператор End If.

Когда условие оценивается как истинное, обрабатываются все
строки между If Then и End If.

If [условие верно] Then
    [строки кода]
    [строки кода]
    [строки кода]
End If

Чтобы сделать ваш код более читабельным, рекомендуется
делать отступы между операторами If Then и End If.

Отступ между If и End If

Отступ означает просто переместить строку кода на одну вкладку вправо. Правило большого пальца состоит в том, чтобы сделать отступ между начальным и конечным операторами, такими как:

Sub … End Sub
If Then … End If
If Then… ElseIf … Else … Endif
For … Next
Do While … Loop
Select Case … End Case

Для отступа в коде вы можете выделить строки для отступа и нажать клавишу Tab. Нажатие клавиш Shift + Tab сделает отступ кода, т.е. переместит его на одну вкладку влево.

Вы также можете использовать значки на панели инструментов Visual Basic для отступа кода.

VBA If

Если вы посмотрите на примеры кода на этом сайте, вы увидите, что код имеет отступ.

Простой пример If Then

Следующий код выводит имена всех студентов с баллами более 50.

Sub ChitatOcenki()
    
    Dim i As Long
    ' Пройдите столбцы отметок
    For i = 2 To 11
        ' Проверьте, больше ли баллов,чем 50
        If Sheet1.Range("C" & i).Value > 50 Then
            ' Напечатайте имя студента в «Immediate Window» (Ctrl + G)
            Debug.Print Sheet1.Range("A" & i).Value & " " & Sheet1.Range("B" & i).Value
        End If
    
    Next
    
End Sub

Результаты:

  • Василий Кочин
  • Максим Бородин
  • Дмитрий Маренин
  • Олеся Клюева
  • Евгений Яшин

Поэкспериментируйте с этим примером и проверьте значение или знак > и посмотрите, как изменились результаты.

Условия IF

Часть кода между ключевыми словами If и Then называется условием. Условие — это утверждение, которое оценивается как истинное или ложное. Они в основном используются с операторами Loops и If. При создании условия вы используете такие знаки, как «>, <, <>,> =, <=, =».

Ниже приведены примеры условий:

Условие Это верно, когда
x < 5 x меньше,чем 5
x <= 5 x меньше, либо равен 5
x > 5 x больше, чем 5
x >= 5 x больше, либо равен 5
x = 5 x равен 5
x <> 5 x не равен 5
x > 5 And x < 10 x больше, чем 5 И x меньше, чем 10
x = 2 Or x >10 x равен 2 ИЛИ x больше,чем 10
Range(«A1») = «Иван» Ячейка A1 содержит текст «Иван»
Range(«A1») <> «Иван» Ячейка A1 не содержит текст «Иван»

Вы могли заметить x = 5, как условие. Не стоит путать с х = 5, при использовании в качестве назначения.

Когда в условии используется «=», это означает, что «левая сторона равна правой стороне».

В следующей таблице показано, как знак равенства используется
в условиях и присваиваниях.

Использование «=» Тип Значение
Loop Until x = 5 Условие Равен ли x пяти
Do While x = 5 Условие Равен ли x пяти
If x = 5 Then Условие Равен ли x пяти
For x = 1 To 5 Присваивание Установите значение х = 1, потом = 2 и т.д.
x = 5 Присваивание Установите х до 5
b = 6 = 5 Присваивание и
условие
Присвойте b
результату условия
6 = 5
x = MyFunc(5,6) Присваивание Присвойте х
значение,
возвращаемое
функцией

Последняя запись в приведенной выше таблице показывает
оператор с двумя равными. Первый знак равенства — это присвоение, а любые
последующие знаки равенства — это условия.

Поначалу это может показаться странным, но подумайте об этом
так. Любое утверждение, начинающееся с переменной и равно, имеет следующий
формат

[переменная] [=] [оценить эту часть]

Поэтому все, что находится справа от знака равенства, оценивается и результат помещается в переменную. Посмотрите на последние три строки таблицы, как:

[x] [=] [5]

[b] [=] [6 = 5]

[x] [=] [MyFunc (5,6)]

Использование If ElseIf

Инструкция ElseIf позволяет вам выбирать из нескольких вариантов. В следующем примере мы печатаем баллы, которые находятся в диапазоне.

Sub IspElseIf()
    
    If Marks >= 85 Then
        Debug.Print "Высший балл"
    ElseIf Marks >= 75 Then
        Debug.Print "Отлично"
    End If
    
End Sub

Важно понимать, что порядок важен. Условие If проверяется
первым.

Если это правда, то печатается «Высший балл», и оператор If заканчивается.

Если оно ложно, то код переходит к следующему ElseIf и
проверяет его состояние.

Давайте поменяемся местами If и ElseIf из последнего
примера. Код теперь выглядит так

Sub IspElseIfNeverno()
    
    ' Этот код неверен, так как ElseIf никогда не будет верным
    If Marks >= 75 Then
        Debug.Print "Отлично"
    ElseIf Marks >= 85 Then
        ' код никогда не достигнет здесь
        Debug.Print "Высший балл"
    End If
    
End Sub

В этом случае мы сначала проверяем значение более 75. Мы никогда не будем печатать «Высший балл», потому что, если значение больше 85, это вызовет первый оператор if.

Чтобы избежать подобных проблем, мы должны использовать два
условия. Они помогают точно указать, что вы ищете, чтобы избежать путаницы.
Пример ниже показывает, как их использовать. Мы рассмотрим более многочисленные
условия в разделе ниже.

If marks >= 75 And marks < 85 Then
    Debug.Print "Отлично"
ElseIf marks >= 85 And marks <= 100 Then
    Debug.Print "Высший балл"
End If

Давайте расширим оригинальный код. Вы можете использовать столько операторов ElseIf, сколько захотите. Мы добавим еще несколько, чтобы учесть все наши классификации баллов.

Использование If Else

Утверждение Else используется, как ловушка для всех. Это в основном означает «если бы не было условий» или «все остальное». В предыдущем примере кода мы не включили оператор печати для метки сбоя. Мы можем добавить это, используя Else.

Sub IspElse()
    
    If Marks >= 85 Then
        Debug.Print "Высший балл"
    ElseIf Marks >= 75 Then
        Debug.Print "Отлично"
    ElseIf Marks >= 55 Then
        Debug.Print "Хорошо"
    ElseIf Marks >= 40 Then
        Debug.Print "Удовлетворительно"
    Else
        ' Для всех других оценок
        Debug.Print "Незачет"
    End If
    
End Sub

Так что, если это не один из других типов, то это провал.

Давайте напишем некоторый код с помощью наших примеров
данных и распечатаем студента и его классификацию.

Sub DobClass()
    
    ' получить последнюю строку
    Dim startRow As Long, lastRow As Long
    startRow = 2
    lastRow = Sheet1.Cells(Sheet1.Rows.Count, 1).End(xlUp).Row
    
    Dim i As Long, Marks As Long
    Dim sClass As String

    ' Пройдите столбцы отметок
    For i = startRow To lastRow
        Marks = Sheet1.Range("C" & i).Value
        ' Проверьте отметки и классифицируйте соответственно
        If Marks >= 85 Then
            sClass = "Высший балл"
        ElseIf Marks >= 75 Then
            sClass = "Отлично"
        ElseIf Marks >= 55 Then
            sClass = "Хорошо"
        ElseIf Marks >= 40 Then
            sClass = "Удовлетворительно"
        Else
            ' Для всех других оценок
            sClass = "Незачет"
        End If
    
        ' Запишите класс в столбец E
        Sheet1.Range("E" & i).Value = sClass
    Next
    
End Sub

Результаты выглядят так: в столбце E — классификация баллов

VBA If ElseIf Class

Используя If And/If Or

В выражении If может быть несколько условий. Ключевые слова VBA And и Or позволяют использовать несколько условий.

Эти слова работают так же, как вы используете их на
английском языке.

Давайте снова посмотрим на наши примеры данных. Теперь мы
хотим напечатать всех студентов, которые набрали от 50 до 80 баллов.

Мы используем Аnd, чтобы добавить дополнительное условие. Код гласит: если оценка больше или равна 50 и меньше 75, напечатайте имя студента.

Sub ProverkaStrokiOcenok()

    Dim i As Long, marks As Long
    For i = 2 To 11
        
        ' Хранить оценки для текущего студента
        marks = Sheet1.Range("C" & i).Value
        
        ' Проверьте, если отметки больше 50 и меньше 75
        If marks >= 50 And marks < 80 Then
             ' Напечатайте имя и фамилию в Immediate window (Ctrl+G)
             Debug.Print Sheet1.Range("A" & i).Value & Sheet1.Range("B" & i).Value
        End If
    
    Next

End Sub

Вывести имя и фамилию в результаты:

  • Дмитрий Маренин
  • Олеся Клюева
  • Евгений Яшин

В нашем следующем примере мы хотим знать, кто из студентов сдавал историю или геометрию. Таким образом, в данном случае мы говорим, изучал ли студент «История» ИЛИ изучал ли он «Геометрия» (Ctrl+G).

Sub ChitatObektOcenki()
    
    Dim i As Long, marks As Long
    
    ' Пройдите столбцы отметок
    For i = 2 To 11
        marks = Sheet1.Range("D" & i).Value
        ' Проверьте, если отметки больше 50 и меньше 80
        If marks = "История" Or marks = "Геометрия" Then
            ' Напечатайте имя и фамилию в Immediate window (Ctrl+G)
            Debug.Print Sheet1.Range("A" & i).Value & " " & Sheet1.Range("B" & i).Value
        End If
    
    Next
    
End Sub

Результаты:

  • Василий Кочин
  • Александр Грохотов
  • Дмитрий Маренин
  • Николай Куликов
  • Олеся Клюева
  • Наталия Теплых
  • Дмитрий Андреев

Использование нескольких таких условий часто является
источником ошибок. Эмпирическое правило, которое нужно помнить, должно быть
максимально простым.

Использование IF AND

And работает следующим образом:

Условие 1 Условие 2 Результат
ИСТИНА ИСТИНА ИСТИНА
ИСТИНА ЛОЖЬ ЛОЖЬ
ЛОЖЬ ИСТИНА ЛОЖЬ
ЛОЖЬ ЛОЖЬ ЛОЖЬ

Что вы заметите, так это то, что And верно только тогда, когда все условия выполняются.

Использование IF OR

Ключевое слово OR работает следующим образом

Условие 1 Условие 2 Результат
ИСТИНА ИСТИНА ИСТИНА
ИСТИНА ЛОЖЬ ИСТИНА
ЛОЖЬ ИСТИНА ИСТИНА
ЛОЖЬ ЛОЖЬ ЛОЖЬ

Что вы заметите, так это то, что OR ложно, только когда все условия ложны.

Смешивание And и Or может затруднить чтение кода и привести к ошибкам. Использование скобок может сделать условия более понятными.

Sub OrSAnd()
    
 Dim subject As String, marks As Long
 subject = "История"
 marks = 5
    
 If (subject = "Геометрия" Or subject = "История") And marks >= 6 Then
     Debug.Print "ИСТИНА"
 Else
     Debug.Print "ЛОЖЬ"
 End If
    
End Sub

Использование IF NOT

Также есть оператор NOT. Он возвращает противоположный результат условия.

Условие Результат
ИСТИНА ЛОЖЬ
ЛОЖЬ ИСТИНА

Следующие две строки кода эквивалентны.

If marks < 40 Then 
If Not marks >= 40 Then

так же, как и

If True Then 
If Not False Then 

и

If False Then 
If Not True Then 

Помещение условия в круглые скобки облегчает чтение кода

If Not (marks >= 40) Then

Распространенное использование Not — при проверке, был ли установлен объект. Возьмите Worksheet для примера. Здесь мы объявляем рабочий лист.

Dim mySheet As Worksheet
' Некоторый код здесь

Мы хотим проверить действительность mySheet перед его использованием. Мы можем проверить, если это Nothing.

If mySheet Is Nothing Then

Нет способа проверить, является ли это чем-то, поскольку есть много разных способов, которым это может быть что-то. Поэтому мы используем NOT с Nothing.

If Not mySheet Is Nothing Then

Если вы находите это немного запутанным, вы можете использовать круглые скобки, как здесь

If Not (mySheet Is Nothing) Then

Функция IIF

VBA имеет функцию, аналогичную функции Excel If. В Excel вы часто используете функцию If следующим образом:

= ЕСЛИ (F2 =»»,»», F1 / F2)

Формат

= If (условие, действие, если ИСТИНА, действие, если ЛОЖЬ).

VBA имеет функцию IIf, которая работает так же. Давайте посмотрим на примере. В следующем коде мы используем IIf для проверки значения переменной val. Если значение больше 10, мы печатаем ИСТИНА, в противном случае мы печатаем ЛОЖЬ.

Sub ProveritVal()
 
    Dim result As Boolean
    Dim val As Long
    
    ' Печатает ИСТИНА
    val = 11
    result = IIf(val > 10, ИСТИНА, ЛОЖЬ)
    Debug.Print result
    
    ' печатает ЛОЖЬ
    val = 5
    result = IIf(val > 10, ИСТИНА, ЛОЖЬ)
    Debug.Print result
    
End Sub

В нашем следующем примере мы хотим распечатать «Удовлетворитеьно» или «Незачет» рядом с каждым студентом в зависимости от их баллов. В первом фрагменте кода мы будем использовать обычный оператор VBA If, чтобы сделать это.

Sub ProveritDiapazonOcenok()

    Dim i As Long, marks As Long
    For i = 2 To 11
        
        ' Хранить оценки для текущего студента
        marks = Sheet1.Range("C" & i).Value
        
        ' Проверьте, прошел ли студент или нет
        If marks >= 40 Then
             ' Запишите имена для столбца F
             Sheet1.Range("E" & i) = "Удовлетворительно"
        Else
             Sheet1.Range("E" & i) = "Незачет"
        End If
    
    Next

End Sub

В следующем фрагменте кода мы будем использовать функцию IIf. Код здесь намного аккуратнее.

Sub ProveritDiapazonOcenok ()

    Dim i As Long, marks As Long
    For i = 2 To 11
        
        ' Хранить оценки для текущего студента
        marks = Sheet1.Range("C" & i)
        
        ' Проверьте, прошел ли студент или нет
        Sheet1.Range("E" & i).Value = IIf(marks >= 40,"Удовлетворительно","Незачет")
    
    Next

End Sub

Функция IIf очень полезна для простых случаев, когда вы имеете дело с двумя возможными вариантами.

Использование Nested IIf

Вы также можете вкладывать IIf-операторы, как в Excel. Это означает использование результата одного IIf с другим. Давайте добавим еще один тип результата в наши предыдущие примеры. Теперь мы хотим напечатать «Отлично», «Удовлетворительно» или «Незачетт» для каждого студента.

Используя обычный VBA, мы сделали бы это так

Sub ProveritRezultatiTip2()

    Dim i As Long, marks As Long
    For i = 2 To 11
        
        ' Хранить оценки для текущего студента
        marks = Sheet1.Range("C" & i).Value
        
        If marks >= 75 Then
             Sheet1.Range("E" & i).Value = "Отлично"
        ElseIf marks >= 40 Then
             ' Запишите имена для столбца F
             Sheet1.Range("E" & i).Value = "Удовлетворительно"
        Else
             Sheet1.Range("E" & i).Value = "Незачет"
        End If
    
    Next

End Sub

Используя вложенные IIfs, мы могли бы сделать это так

Sub IspNestedIIF()

Dim i As Long, marks As Long, result As String
For i = 2 To 11
    
marks = Sheet1.Range("C" & i).Value
result = IIf(marks >= 55,"Хорошо",IIf(marks >= 40,"Удовлетворительно","Незачет"))

Sheet1.Range("E" & i).Value = result

Next

End Sub

Использование вложенного IIf хорошо в простых случаях, подобных этому. Код прост для чтения и, следовательно, вряд ли вызовет ошибки.

Чего нужно остерегаться

Важно понимать, что функция IIf всегда оценивает как
Истинную, так и Ложную части выражения независимо от условия.

В следующем примере мы хотим разделить по баллам, когда он не равен нулю. Если он равен нулю, мы хотим вернуть ноль.

marks = 0
total = IIf(marks = 0, 0, 60 / marks)

Однако, когда отметки равны нулю, код выдаст ошибку «Делить на ноль». Это потому, что он оценивает как Истинные, так и Ложные утверждения. Здесь ложное утверждение, т.е. (60 / Marks), оценивается как ошибка, потому что отметки равны нулю.

Если мы используем нормальный оператор IF, он будет
запускать только соответствующую строку.

marks = 0
If marks = 0 Then
    'Выполняет эту строку только когда отметки равны нулю
    total = 0
Else
    'Выполняет только эту строку, когда отметки не равны нулю
    total = 60 / marks
End If

Это также означает, что если у вас есть функции для ИСТИНА и ЛОЖЬ, то обе будут выполнены. Таким образом, IIF будет запускать обе функции, даже если он использует только одно возвращаемое значение. Например:

' Обе функции будут выполняться каждый раз
total = IIf(marks = 0, Func1, Func2)

IF против IIf

Так что лучше?

В этом случае вы можете видеть, что IIf короче для написания и аккуратнее. Однако если условия усложняются, вам лучше использовать обычное выражение If. Недостатком IIf является то, что он недостаточно известен, поэтому другие пользователи могут не понимать его так же, как и код, написанный с помощью обычного оператора if.

Кроме того, как мы обсуждали в последнем разделе, IIF всегда оценивает части ИСТИНА и ЛОЖЬ, поэтому, если вы имеете дело с большим количеством данных, оператор IF будет быстрее.

Мое эмпирическое правило заключается в том, чтобы
использовать IIf, когда
он будет прост для чтения и не требует вызовов функций. Для более сложных
случаев используйте обычный оператор If.

Использование Select Case

Оператор Select Case
— это альтернативный способ написания статистики If с большим количеством ElseIf. Этот тип операторов
вы найдете в большинстве популярных языков программирования, где он называется
оператором Switch. Например,
Java, C #, C ++ и Javascript
имеют оператор switch.

Формат

Select Case [переменная]
    Case [условие 1]
    Case [условие 2]
    Case [условие n]
    Case Else
End Select

Давайте возьмем наш пример DobClass сверху и перепишем его с помощью оператора Select Case.

Sub DobavitClass()
    
    ' получить последнюю строку
    Dim startRow As Long, lastRow As Long
    startRow = 2
    lastRow = Sheet1.Cells(Sheet1.Rows.Count, 1).End(xlUp).Row
    
    Dim i As Long, Marks As Long
    Dim sClass As String

    ' Пройдите столбцы отметок
    For i = startRow To lastRow
        Marks = Sheet1.Range("C" & i).Value
        ' Проверьте отметки и классифицируйте соответственно
        If Marks >= 85 Then
            sClass = "Высший балл"
        ElseIf Marks >= 75 Then
            sClass = "Отлично"
        ElseIf Marks >= 55 Then
            sClass = "Хорошо"
        ElseIf Marks >= 40 Then
            sClass = "Удовлетворительно"
        Else
            ' Для всех других оценок
            sClass = "Незачет"
        End If
    
        ' Запишите класс в столбец E
        Sheet1.Range("E" & i).Value = sClass
    Next
    
End Sub

Ниже приведен тот же код с использованием оператора Select Case. Главное, что вы заметите, это то, что мы используем “Case 85 to 100” rather than “marks >=85 And marks <=100”. , а не “marks >=85 And marks <=100”.

Sub DobavitClassSSelect()
    
    ' получить первую и последнюю строки
    Dim firstRow As Long, lastRow As Long
    firstRow = 2
    lastRow = Cells(Cells.Rows.Count, 1).End(xlUp).Row
    
    Dim i As Long, marks As Long
    Dim sClass As String

    ' Пройдите столбцы отметок
    For i = firstRow To lastRow
        marks = Sheet1.Range("C" & i).Value
        ' Проверьте отметки и классифицируйте соответственно
        Select Case marks
        Case 85 To 100
            sClass = "Высший балл"
        Case 75 To 84
            sClass = "Отлично"
        Case 55 To 74
            sClass = "Хорошо"
        Case 40 To 54
            sClass = "Удовлетворительно"
        Case Else
            ' Для всех других оценок
            sClass = "Незачет"
        End Select
        ' Запишите класс в столбец E
        Sheet1.Range("E" & i).Value = sClass
    Next
    
End Sub

Использование Case Is

Вы можете переписать оператор select в том же формате, что и оригинальный ElseIf. Вы можете использовать Is с Case.

Select Case marks
    Case Is >= 85
         sClass = "Высший балл"
    Case Is >= 75
        sClass = "Отлично"
    Case Is >= 55
        sClass = "Хорошо"
    Case Is >= 40
        sClass = "Удовлетворительно"
    Case Else
        ' Для всех других оценок
        sClass = "Незачет"
End Select

Вы можете использовать Is для проверки нескольких значений.
В следующем коде мы проверяем, равны ли оценки 5, 7 или 9.

Sub TestNeskZnach()
    
    Dim marks As Long
    marks = 7
    
    Select Case marks
        Case Is = 5, 7, 9
            Debug.Print True
        Case Else
            Debug.Print False
    End Select
    
End Sub

Попробуйте это упражнение

В этой статье много рассказывали о выражении If. Хороший способ помочь вам понять — это попытаться написать код, используя темы, которые мы рассмотрели. В следующем упражнении используются тестовые данные из этой статьи. Ответ на упражнение ниже.

Мы будем использовать ячейку G1, чтобы написать имя
субъекта.

В колонках от H до L запишите всех студентов, которые имеют оценки по этому предмету. Мы хотим классифицировать их результат как успешный или неудачный. Оценка ниже 40 — неудача, оценка 40 или выше — Зачет.

Колонка H: Имя

Колонка I: Фамилия

Колонка J: Баллы

Колонка H: Предмет

Столбец I: Тип результата — Зачет или Незачет

Если ячейка G1 содержит «Геометрия», то ваш результат должен выглядеть следующим образом:

VBA If Statement

Ответ на упражнение

Следующий код показывает, как выполнить вышеупомянутое упражнение.

Примечание: есть много способов выполнить задачу, поэтому не расстраивайтесь, если ваш код отличается.

Sub ZapisatRezultat()
     
    ' Получить тему
    Dim subject As String
    subject = Sheet1.Range("G1").Value
     
    If subject = "" Then
        Exit Sub
    End If
     
    ' Получить первый и последний ряд
    Dim firstRow As Long, lastRow As Long
    firstRow = 2
    lastRow = Cells(Cells.Rows.Count, 1).End(xlUp).Row
     
    ' Очистить любой существующий вывод
    Sheet1.Range("H:L").ClearContents
     
    ' Отслеживать выходной ряд
    Dim outRow As Long
    outRow = 1
     
    Dim i As Long, marks As Long, rowSubject As String
    ' Прочитать данные
    For i = firstRow To lastRow
        marks = Sheet1.Range("C" & i).Value
        rowSubject = Sheet1.Range("D" & i).Value
        If rowSubject = subject Then
            ' Запишите данные студента, если предмет Геометрия
            Sheet1.Range("A" & i & ":" & "D" & i).Copy
            Sheet1.Range("H" & outRow).PasteSpecial xlPasteValues
             
            ' Запишите Зачет или Незачет
            If marks < 40 Then
                Sheet1.Range("L" & outRow).Value = "Незачет"
            ElseIf marks >= 40 Then
                Sheet1.Range("L" & outRow).Value = "Зачет"
            End If
            ' Переместить вывод в следующую строку
            outRow = outRow + 1
        End If
         
    Next i
     
End Sub

Поиск какого-либо значения в ячейках Excel довольно часто встречающаяся задача при программировании какого-либо макроса. Решить ее можно разными способами. Однако, в разных ситуациях использование того или иного способа может быть не оправданным. В данной статье я рассмотрю 2 наиболее распространенных способа.

Поиск перебором значений

Довольно простой в реализации способ. Например, найти в колонке «A» ячейку, содержащую «123» можно примерно так:

Sheets("Данные").Select
For y = 1 To Cells.SpecialCells(xlLastCell).Row
    If Cells(y, 1) = "123" Then
        Exit For
    End If
Next y
MsgBox "Нашел в строке: " + CStr(y)

Минусами этого так сказать «классического» способа являются: медленная работа и громоздкость. А плюсом является его гибкость, т.к. таким способом можно реализовать сколь угодно сложные варианты поиска с различными вычислениями и т.п.

Поиск функцией Find

Гораздо быстрее обычного перебора и при этом довольно гибкий. В простейшем случае, чтобы найти в колонке A ячейку, содержащую «123» достаточно такого кода:

Sheets("Данные").Select
Set fcell = Columns("A:A").Find("123")
If Not fcell Is Nothing Then
    MsgBox "Нашел в строке: " + CStr(fcell.Row)
End If

Вкратце опишу что делают строчки данного кода:
1-я строка: Выбираем в книге лист «Данные»;
2-я строка: Осуществляем поиск значения «123» в колонке «A», результат поиска будет в fcell;
3-я строка: Если удалось найти значение, то fcell будет содержать Range-объект, в противном случае — будет пустой, т.е. Nothing.

Полностью синтаксис оператора поиска выглядит так:

Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

What — Строка с текстом, который ищем или любой другой тип данных Excel

After — Ячейка, после которой начать поиск. Обратите внимание, что это должна быть именно единичная ячейка, а не диапазон. Поиск начинается после этой ячейки, а не с нее. Поиск в этой ячейке произойдет только когда весь диапазон будет просмотрен и поиск начнется с начала диапазона и до этой ячейки включительно.

LookIn — Тип искомых данных. Может принимать одно из значений: xlFormulas (формулы), xlValues (значения), или xlNotes (примечания).

LookAt — Одно из значений: xlWhole (полное совпадение) или xlPart (частичное совпадение).

SearchOrder — Одно из значений: xlByRows (просматривать по строкам) или xlByColumns (просматривать по столбцам)

SearchDirection — Одно из значений: xlNext (поиск вперед) или xlPrevious (поиск назад)

MatchCase — Одно из значений: True (поиск чувствительный к регистру) или False (поиск без учета регистра)

MatchByte — Применяется при использовании мультибайтных кодировок: True (найденный мультибайтный символ должен соответствовать только мультибайтному символу) или False (найденный мультибайтный символ может соответствовать однобайтному символу)

SearchFormat — Используется вместе с FindFormat. Сначала задается значение FindFormat (например, для поиска ячеек с курсивным шрифтом так: Application.FindFormat.Font.Italic = True), а потом при использовании метода Find указываем параметр SearchFormat = True. Если при поиске не нужно учитывать формат ячеек, то нужно указать SearchFormat = False.

Чтобы продолжить поиск, можно использовать FindNext (искать «далее») или FindPrevious (искать «назад»).

Примеры поиска функцией Find

Пример 1: Найти в диапазоне «A1:A50» все ячейки с текстом «asd» и поменять их все на «qwe»

With Worksheets(1).Range("A1:A50")
  Set c = .Find("asd", LookIn:=xlValues)
  Do While Not c Is Nothing
    c.Value = "qwe"
    Set c = .FindNext(c)
  Loop
End With

Обратите внимание: Когда поиск достигнет конца диапазона, функция продолжит искать с начала диапазона. Таким образом, если значение найденной ячейки не менять, то приведенный выше пример зациклится в бесконечном цикле. Поэтому, чтобы этого избежать (зацикливания), можно сделать следующим образом:

Пример 2: Правильный поиск значения с использованием FindNext, не приводящий к зацикливанию.

With Worksheets(1).Range("A1:A50")
  Set c = .Find("asd", lookin:=xlValues)
  If Not c Is Nothing Then
    firstResult = c.Address
    Do
      c.Font.Bold = True
      Set c = .FindNext(c)
      If c Is Nothing Then Exit Do
    Loop While c.Address <> firstResult
  End If
End With

В ниже следующем примере используется другой вариант продолжения поиска — с помощью той же функции Find с параметром After. Когда найдена очередная ячейка, следующий поиск будет осуществляться уже после нее. Однако, как и с FindNext, когда будет достигнут конец диапазона, Find продолжит поиск с его начала, поэтому, чтобы не произошло зацикливания, необходимо проверять совпадение с первым результатом поиска.

Пример 3: Продолжение поиска с использованием Find с параметром After.

With Worksheets(1).Range("A1:A50")
  Set c = .Find("asd", lookin:=xlValues)
  If Not c Is Nothing Then
    firstResult = c.Address
    Do
      c.Font.Bold = True
      Set c = .Find("asd", After:=c, lookin:=xlValues)
      If c Is Nothing Then Exit Do
    Loop While c.Address <> firstResult
  End If
End With

Следующий пример демонстрирует применение SearchFormat для поиска по формату ячейки. Для указания формата необходимо задать свойство FindFormat.

Пример 4: Найти все ячейки с шрифтом «курсив» и поменять их формат на обычный (не «курсив»)

lLastRow = Cells.SpecialCells(xlLastCell).Row
lLastCol = Cells.SpecialCells(xlLastCell).Column
Application.FindFormat.Font.Italic = True
With Worksheets(1).Range(Cells(1, 1), Cells(lLastRow, lLastCol))
  Set c = .Find("", SearchFormat:=True)
  Do While Not c Is Nothing
    c.Font.Italic = False
    Set c = .Find("", After:=c, SearchFormat:=True)
  Loop
End With

Примечание: В данном примере намеренно не используется FindNext для поиска следующей ячейки, т.к. он не учитывает формат (статья об этом: https://support.microsoft.com/ru-ru/kb/282151)

Коротко опишу алгоритм поиска Примера 4. Первые две строки определяют последнюю строку (lLastRow) на листе и последний столбец (lLastCol). 3-я строка задает формат поиска, в данном случае, будем искать ячейки с шрифтом Italic. 4-я строка определяет область ячеек с которой будет работать программа (с ячейки A1 и до последней строки и последнего столбца). 5-я строка осуществляет поиск с использованием SearchFormat. 6-я строка — цикл пока результат поиска не будет пустым. 7-я строка — меняем шрифт на обычный (не курсив), 8-я строка продолжаем поиск после найденной ячейки.

Хочу обратить внимание на то, что в этом примере я не стал использовать «защиту от зацикливания», как в Примерах 2 и 3, т.к. шрифт меняется и после «прохождения» по всем ячейкам, больше не останется ни одной ячейки с курсивом.

Свойство FindFormat можно задавать разными способами, например, так:

With Application.FindFormat.Font 
  .Name = "Arial" 
  .FontStyle = "Regular" 
  .Size = 10 
End With

Поиск последней заполненной ячейки с помощью Find

Следующий пример — применение функции Find для поиска последней ячейки с заполненными данными. Использованные в Примере 4 SpecialCells находит последнюю ячейку даже если она не содержит ничего, но отформатирована или в ней раньше были данные, но были удалены.

Пример 5: Найти последнюю колонку и столбец, заполненные данными

Set c = Worksheets(1).UsedRange.Find("*", SearchDirection:=xlPrevious)
If Not c Is Nothing Then
  lLastRow = c.Row: lLastCol = c.Column 
Else
  lLastRow = 1: lLastCol = 1
End If
MsgBox "lLastRow=" & lLastRow & " lLastCol=" & lLastCol

В этом примере используется UsedRange, который так же как и SpecialCells возвращает все используемые ячейки, в т.ч. и те, что были использованы ранее, а сейчас пустые. Функция Find ищет ячейку с любым значением с конца диапазона.

Поиск по шаблону (маске)

При поиске можно так же использовать шаблоны, чтобы найти текст по маске, следующий пример это демонстрирует.

Пример 6: Выделить красным шрифтом ячейки, в которых текст начинается со слова из 4-х букв, первая и последняя буквы «т», при этом после этого слова может следовать любой текст.

With Worksheets(1).Cells
  Set c = .Find("т??т*", LookIn:=xlValues, LookAt:=xlWhole)
  If Not c Is Nothing Then
    firstResult = c.Address
    Do
      c.Font.Color = RGB(255, 0, 0)
      Set c = .FindNext(c)
      If c Is Nothing Then Exit Do
    Loop While c.Address <> firstResult
  End If
End With

Для поиска функцией Find по маске (шаблону) можно применять символы:
* — для обозначения любого количества любых символов;
? — для обозначения одного любого символа;
~ — для обозначения символов *, ? и ~. (т.е. чтобы искать в тексте вопросительный знак, нужно написать ~?, чтобы искать именно звездочку (*), нужно написать ~* и наконец, чтобы найти в тексте тильду, необходимо написать ~~)

Поиск в скрытых строках и столбцах

Для поиска в скрытых ячейках нужно учитывать лишь один нюанс: поиск нужно осуществлять в формулах, а не в значениях, т.е. нужно использовать LookIn:=xlFormulas

Поиск даты с помощью Find

Если необходимо найти текущую дату или какую-то другую дату на листе Excel или в диапазоне с помощью Find, необходимо учитывать несколько нюансов:

  • Тип данных Date в VBA представляется в виде #[месяц]/[день]/[год]#, соответственно, если необходимо найти фиксированную дату, например, 01 марта 2018 года, необходимо искать #3/1/2018#, а не «01.03.2018»
  • В зависимости от формата ячеек, дата может выглядеть по-разному, поэтому, чтобы искать дату независимо от формата, поиск нужно делать не в значениях, а в формулах, т.е. использовать LookIn:=xlFormulas

Приведу несколько примеров поиска даты.

Пример 7: Найти текущую дату на листе независимо от формата отображения даты.

d = Date
Set c = Cells.Find(d, LookIn:=xlFormulas, LookAt:=xlWhole)
If Not c Is Nothing Then
  MsgBox "Нашел"
Else
  MsgBox "Не нашел"
End If

Пример 8: Найти 1 марта 2018 г.

d = #3/1/2018#
Set c = Cells.Find(d, LookIn:=xlFormulas, LookAt:=xlWhole)
If Not c Is Nothing Then
  MsgBox "Нашел"
Else
  MsgBox "Не нашел"
End If

Искать часть даты — сложнее. Например, чтобы найти все ячейки, где месяц «март», недостаточно искать «03» или «3». Не работает с датами так же и поиск по шаблону. Единственный вариант, который я нашел — это выбрать формат в котором месяц прописью для ячеек с датами и искать слово «март» в xlValues.

Тем не менее, можно найти, например, 1 марта независимо от года.

Пример 9: Найти 1 марта любого года.

d = #3/1/1900#
Set c = Cells.Find(Format(d, "m/d/"), LookIn:=xlFormulas, LookAt:=xlPart)
If Not c Is Nothing Then
  MsgBox "Нашел"
Else
  MsgBox "Не нашел"
End If

Метод Find объекта Range для поиска ячейки по ее данным в VBA Excel. Синтаксис и компоненты. Знаки подстановки для поисковой фразы. Простые примеры.

Метод Find объекта Range предназначен для поиска ячейки и сведений о ней в заданном диапазоне по ее значению, формуле и примечанию. Чаще всего этот метод используется для поиска в таблице ячейки по слову, части слова или фразе, входящей в ее значение.

Синтаксис метода Range.Find

Expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

Expression – это переменная или выражение, возвращающее объект Range, в котором будет осуществляться поиск.

В скобках перечислены параметры метода, среди них только What является обязательным.

Метод Range.Find возвращает объект Range, представляющий из себя первую ячейку, в которой найдена поисковая фраза (параметр What). Если совпадение не найдено, возвращается значение Nothing.

Если необходимо найти следующие ячейки, содержащие поисковую фразу, используется метод Range.FindNext.

Параметры метода Range.Find

Наименование Описание
Обязательный параметр
What Данные для поиска, которые могут быть представлены строкой или другим типом данных Excel. Тип данных параметра — Variant.
Необязательные параметры
After Ячейка, после которой следует начать поиск.
LookIn Уточняет область поиска. Список констант xlFindLookIn:

  • xlValues (-4163) – значения;
  • xlComments (-4144) – примечания*;
  • xlNotes (-4144) – примечания*;
  • xlFormulas (-4123) – формулы.
LookAt Поиск частичного или полного совпадения. Список констант xlLookAt:

  • xlWhole (1) – полное совпадение;
  • xlPart (2) – частичное совпадение.
SearchOrder Определяет способ поиска. Список констант xlSearchOrder:

  • xlByRows (1) – поиск по строкам;
  • xlByColumns (2) – поиск по столбцам.
SearchDirection Определяет направление поиска. Список констант xlSearchDirection:

  • xlNext (1) – поиск вперед;
  • xlPrevious (2) – поиск назад.
MatchCase Определяет учет регистра:

  • False (0) – поиск без учета регистра (по умолчанию);
  • True (1) – поиск с учетом регистра.
MatchByte Условия поиска при использовании двухбайтовых кодировок:

  • False (0) – двухбайтовый символ может соответствовать однобайтовому символу;
  • True (1) – двухбайтовый символ должен соответствовать только двухбайтовому символу.
SearchFormat Формат поиска – используется вместе со свойством Application.FindFormat.

* Примечания имеют две константы с одним значением. Проверяется очень просто: MsgBox xlComments и MsgBox xlNotes.

В справке Microsoft тип данных всех параметров, кроме SearchDirection, указан как Variant.

Знаки подстановки для поисковой фразы

Условные знаки в шаблоне поисковой фразы:

  • ? – знак вопроса обозначает любой отдельный символ;
  • * – звездочка обозначает любое количество любых символов, в том числе ноль символов;
  • ~ – тильда ставится перед ?, * и ~, чтобы они обозначали сами себя (например, чтобы тильда в шаблоне обозначала сама себя, записать ее нужно дважды: ~~).

Простые примеры

При использовании метода Range.Find в VBA Excel необходимо учитывать следующие нюансы:

  1. Так как этот метод возвращает объект Range (в виде одной ячейки), присвоить его можно только объектной переменной, объявленной как Variant, Object или Range, при помощи оператора Set.
  2. Если поисковая фраза в заданном диапазоне найдена не будет, метод Range.Find возвратит значение Nothing. Обращение к свойствам несуществующей ячейки будет генерировать ошибки. Поэтому, перед использованием результатов поиска, необходимо проверить объектную переменную на содержание в ней значения Nothing.

В примерах используются переменные:

  • myPhrase – переменная для записи поисковой фразы;
  • myCell – переменная, которой присваивается первая найденная ячейка, содержащая поисковую фразу, или значение Nothing, если поисковая фраза не найдена.

Пример 1

Sub primer1()

Dim myPhrase As Variant, myCell As Range

myPhrase = «стакан»

Set myCell = Range(«A1:L30»).Find(myPhrase)

If Not myCell Is Nothing Then

MsgBox «Значение найденной ячейки: « & myCell

MsgBox «Строка найденной ячейки: « & myCell.Row

MsgBox «Столбец найденной ячейки: « & myCell.Column

MsgBox «Адрес найденной ячейки: « & myCell.Address

Else

MsgBox «Искомая фраза не найдена»

End If

End Sub

В этом примере мы присваиваем переменной myPhrase значение для поиска – "стакан". Затем проводим поиск этой фразы в диапазоне "A1:L30" с присвоением результата поиска переменной myCell. Далее проверяем переменную myCell, не содержит ли она значение Nothing, и выводим соответствующие сообщения.

Ознакомьтесь с работой кода VBA в случаях, когда в диапазоне "A1:L30" есть ячейка со строкой, содержащей подстроку "стакан", и когда такой ячейки нет.

Пример 2

Теперь посмотрим, как метод Range.Find отреагирует на поиск числа. В качестве диапазона поиска будем использовать первую строку активного листа Excel.

Sub primer2()

Dim myPhrase As Variant, myCell As Range

myPhrase = 526.15

Set myCell = Rows(1).Find(myPhrase)

If Not myCell Is Nothing Then

MsgBox «Значение найденной ячейки: « & myCell

Else: MsgBox «Искомая фраза не найдена»

End If

End Sub

Несмотря на то, что мы присвоили переменной числовое значение, метод Range.Find найдет ячейку со значением и 526,15, и 129526,15, и 526,15254. То есть, как и в предыдущем примере, поиск идет по подстроке.

Чтобы найти ячейку с точным соответствием значения поисковой фразе, используйте константу xlWhole параметра LookAt:

Set myCell = Rows(1).Find(myPhrase, , , xlWhole)

Аналогично используются и другие необязательные параметры. Количество «лишних» запятых перед необязательным параметром должно соответствовать количеству пропущенных компонентов, предусмотренных синтаксисом метода Range.Find, кроме случаев указания необязательного параметра по имени, например: LookIn:=xlValues. Тогда используется одна запятая, независимо от того, сколько компонентов пропущено.

Пример 3

Допустим, у нас есть многострочная база данных в Excel. В первой колонке находятся даты. Нам необходимо создать отчет за какой-то период. Найти номер начальной строки для обработки можно с помощью следующего кода:

Sub primer3()

Dim myPhrase As Variant, myCell As Range

myPhrase = «01.02.2019»

myPhrase = CDate(myPhrase)

Set myCell = Range(«A:A»).Find(myPhrase)

If Not myCell Is Nothing Then

MsgBox «Номер начальной строки: « & myCell.Row

Else: MsgBox «Даты « & myPhrase & » в таблице нет»

End If

End Sub

Несмотря на то, что в ячейке дата отображается в виде текста, ее значение хранится в ячейке в виде числа. Поэтому текстовый формат необходимо перед поиском преобразовать в формат даты.

Поиск ячеек, содержащих определенное слова (VBA)

​Смотрите также​​ открытого файла.​200?’200px’:»+(this.scrollHeight+5)+’px’);»>=ЕСЛИ(ЕНД(ПОИСКПОЗ(1;—ЕЧИСЛО(ПОИСК({«Дефектоскопист»:»Электрогазосварщик»:»Электросварщик»};B2));0));»»;»+ретик»)​ = 7 To​
​ Split(Mid(adr, 2, 1000))​ занят.​Alex77755​в этом прайсе​ справки) For Each​Dim iWord As​ 400, что там​ я видимо слишком​ сделать — 20х20​alucard91​ ячейки — 10;​

​ в макросе. Я​​ Single​Tanya15​Вот код, но​
​AlexM​ i1 For i​Vlad999​yl3d​

​: Можно как-нибудь так.​​ беру цену D8​ c In [A1:C5]​ Variant, iSource As​ в строке -​ много хочу от​:)
​ в словарь с​: VBA для Excel.​:)

​ «AN185» — 5.​​ пыталась сделать через​s = 0​: Здравствуйте, подскажите, пожалуйста,​ думаю вам он​:​ = 1 To​: 1. уберите скобки​: Vlad999 , ясно​Развивать дальше фильтры​вставляю в базу​ ‘ If c.Font.Name​ Range, iCell As​ непонятно (может там​ экселя))​ столбцом, split ячейки,​Массив ключевых слов​ ИНАЧЕ во всех​ Formula.R1C1 и Index​For i =​ как правильно прописать​ ничем не поможет,​китин​ 4 .Pattern =​ у ms​Vlad999​ и условия​ H43​ Like «Cour*» Then​

​ Range iWord =​​ слов в пару​
​Но начальная проблема​
​ перебор этого массива,​ и специфика текста​ других случаях -​ Match, но насколько​
​ 2 To 6​
​ код VBA.​ т.к. вставляет полностью​
​, зачем ПОИСКПОЗ()​ «s?передачаs» If .test(Range(«A»​
​Dim ms2. замените​:​
​yl3d​________________​ ‘ c.Font.Name =​
​ Replace([A1], » «,​
​ раз больше).​
​ решена, вопрос закрыт,​ проверка по словарю,​
​ в ячейке исключает​
​ 6.67.​
​ я поняла RC​
​For j =​Необходимо в диапазоне​ весь файл.​
​200?’200px’:»+(this.scrollHeight+5)+’px’);»>=ЕСЛИ(ИЛИ(ЕЧИСЛО(ПОИСК({«Дефектоскопист»:»Электрогазосварщик»:»Электросварщик»};B2)));»+ретик»;»»)​ & j).Offset(, i).Value)​ часть кода, это​yl3d​: Добрый вечер, специалисты​но из производителей​ «Times New Roman»​ «-«, , 1)​

​Да и вообще​​ всем спасибо!​ выполнение макроса, выход.​ одновременное упоминание двух​

​Я сделал эту​​ не может искать​:(​ 1 To 6​

​ текстовых ячеек найти​​Sub find Set​
​китин​ Then Range(«K» &​ еще одна проверка​, результат записывать в​ по экселю.​ штук 20​ If c Like​ ‘: iWord =​ где это всё…​Hugo121​Т.к. так и​ ключей.​ формулу, но она​

planetaexcel.ru

поиск части текста макрос VBA

​ часть текста из​​If Cells(i, j)​ ячейки которые содержат​
​ imprng =activecell Open​:​ j) = «Есть»​ если искомое не​ одну ячейку или​Помогите разобраться с​артикулов десятки тысяч,​ «*» & pomenat​ Replace(iWord, «.», «»)​ может там вообще​: Да что там​ не сказали что​Так что возможно​ работает некорректно…​ ячейки. Есть ли​ = «яблоко» Then​ слово, например «яблоко».​ «файл» for input​AlexM​ Exit For Else​ найдено.​ один адрес -​
​ проблемой.​описания каждый придумывает​
​ & «*» Then​ Set iSource =​

​ нигде ни одного​​ сложного — добавить​

​ за таблица и​​ лишь одно совпадение​ЕСЛИ(ЕОШИБКА(ПОИСК(«AN85A «;B38;1));10;ЕСЛИ(ЕОШИБКА(ПОИСК(«AN185A»;B38;1));5;6.67))​ какие-нибудь другие варианты​s = s​ Т.е. есть ячейки​ as #1 Do​,​ Range(«K» & j)​If adr <>​ одна ячейка?​В книге несколько​ в своем формате​ c.Font.Name = «Times​ [AG2:BE14] For Each​ привычного пробела нет​ пробелы по концам,​ ячейка — только​ -> один макрос.​Sh_Alex​ решения этого вопроса?​ + Cells(i, j​ с текстом «зеленое​ until eof(1) Line​просто ПОИСК не​ = «Нет» End​

​ «» Then ms​​проверяйте​ листов.​ в какой колонке​ New Roman» End​ iWord In Split(iWord,​ Хотя раз код​ чтоб находить слова​ алгоритм.​Спасибо.​: Вот так будет​Может кто-то уже​ + 1)​ яблоко», «красное яблоко»,​

​ input #1, text​​ работал, а до​

planetaexcel.ru

Поиск куска текста в ячейке

​ If Next i,​​ = Split(Mid(adr, 2,​Sub vvv() Dim​На листах 1,2,3,4​ какую инфу писать​ If Nextили​ «-«) Set iCell​ отработал — значит​ целиком…​alucard91​pashulka​ правильно: =ЕСЛИ(ЕОШИБКА(ПОИСК(«AN85A»;A1));ЕСЛИ(ЕОШИБКА(ПОИСК(«AN185A»;A1));6.67;5);10)​ сталкивался?​
​End If​ «яблоко» и тд,​ Sheets(«Лист1»).Select Range(«A5»).Select activeCell​
​ ИЛИ мозгов не​

​ j End With​​ 1000)) Cells(i, 5).Resize(,​ Ws As Worksheet,​
​ в некоторых ячейках​

​Не могу найти​​InStr​ = iSource.Find(Trim(iWord), ,​ были.​Вообще если бы​: Спасибо, вечером опробую.​: Один из возможных​
​С уважением, Александр.​

​Заранее спасибо за​​Next j​ необходимо, что бы​ = text Loop​

planetaexcel.ru

Поиск значения в ячейке

​ хватило​​ End Sub​
​ UBound(ms) + 1)​ i%, FR As​
​ находится текст.​ формулу которая найдет​
​заюзать — самое​ xlValues, xlWhole) If​Где должен быть​ был сразу показан​Если не получится​ вариантов :​Sh_Alex​ помощь!​Cells(i, 7) =​ он нашел всех​ Close #1 End​AlexM​
​Пытливый​
​ = ms End​ Range, adr$, f$,​
​На листе «Поиск»​
​ выбранное слово или​
​ доступное средство…​
​ Not iCell Is​
​ код — это​ материал для работы​ — выложу файл-образец.​Private Sub Test()​
​: А с учетом​Kuzmich​

​ s​​ их.​ sub​
​: Для уменьшения количества​: Здравствуйте.​ If​ a$, ms() For​ — находится столбец​ выражение в общей​voidex​

​ Nothing Then »’​​ выяснили​
​ — всем было​pashulka, большое спасибо,​ Dim iWord As​ того, что функция​: Использовать Find​
​s = 0​V​Aleks777​
​ букв в формуле​

​Мне необходимо собрать​​yl3d​ i = 5​
​ C5:C17 — в​ ячейке и вернет​: спасибо! instr то​ Exit For End​alucard91​ бы легче.​ очень компактный код,​ Variant, iCell As​ ПОИСК(«AN85A»;A1) при отрицательном​Kuzmich​Next i​: и что дальше​:​ можно поэкспериментировать с​ формулу, которая:​: Vlad999 , спасибо​ To Cells(Rows.Count, 3).End(xlUp).Row​ котором вписаны слова,​
​ номер этой ячейки,​ что нужно​ If Next​: Спасибо за оживленный​pashulka​ все работает прекрасно​ Range For Each​ результате выдает #ЗНАЧ!,​: Макрос, запускать при​End Sub​ с этим делать​f1eshka​ массивом, например так​- берет Ф.И.О​ большое.​ f = Cells(i,​ по которым я​http://office.microsoft.com/ru-ru/ex…_matches_speci​artsmart​Hugo121​

​ дискус)​​:​Вот только как​ iWord In Split([A1])​ то можно покороче:​
​ активном листе Tabelle1,​итогояблоко1арбуз25яблоко2526апельсин2апельсин26арбуз140зеленое яблоко 3яблоко24вишня8624яблоко​ будете?​,​200?’200px’:»+(this.scrollHeight+5)+’px’);»>{«ефект»:»рогаз»:»росва»}​
​ человека (столбец 1),​Все работает.​ 3).Value For Each​
​ хочу осуществить поиск.​A​: Добрый день,​: Добавил небольшой код,​Приведу документ в​alucard91​ добавить поиск по​
​ Set iCell =​ =ЕСЛИ(ЕОШ(ПОИСК(«AN85A»;A1));ЕСЛИ(ЕОШ(ПОИСК(«AN185A»;A1));6.67;5);10)​ значения подтягиваются в​ арбуз 4апельсин28зеленое яблоко920красное​как вариант таблицу​

​Sub test() ‘​​Пытливый​
​- находит его​adrinalinka​
​ Ws In Sheets​Как макросом -​Данные​
​уже сломал голову​ подправил чуть существующее​ удобоваримый вид и​, Если не подлежит​
​ ключу из двух​ [A5:T24].Find(iWord, , xlValues,​С уважением, Александр.​ столбец В. В​

​ яблоко5красное яблоко33апельсин320​​ загнать в массив​ strFilePath = «MyTestFile.txt»​:​

​ должность (столбец 2),​​: Добрый день!​​ If Ws.Name <>​​ провести поиск ключевых​Белов​ в попытке решить​ (минимально — выход​
​ выложу завтра сюда​ редактированию, то как​ слов?​ xlWhole) If Not​azat​ ячейке с Potato​В итоге считает​ и циклом перебирать​ Call ImportFromTxt(«D:1.txt», «*строка*»)​AlexM​- и если​Нужна Ваша помощь.​ «Поиск» Then Set​ слов по листам​БД123​ проблему​ если не нашёлся​

​ с полным описанием​​ узнать что сколько​Ну тоесть Дядя​ iCell Is Nothing​: Отлично. Все заработало.​
​ уберите пробел в​ только «яблоко», а​ .​ End Sub Sub​,​ в его должности​
​ Видела похожие темы,​ FR = Ws.Cells.Find(f)​ 1,2,3,4 и вывести​Формула Описание (результат)​
​есть 4 прайса​ ключ, и выбор​ задачи.​

​ слов должен содержать​​ он ищет, а​ Then Run Choose(iCell.Column,​ Только вместо A1​ конце Sub iType()​ зеленые и красные​
​Пытливый​ ImportFromTxt(ByVal strFilePath As​китин​ находит определенные слова​ но все равно​

​ If Not FR​​ найденный текст -​​=ЕСЛИ(ЕЧИСЛО(ПОИСК(«л»;A2));»Верно»; «Неверно») Проверка​​ поставщиков, у них​ не А1, а​Извините за конфуз)​ ключ ?​ вот Дядя Вася​
​ «Change», «Delta», «Sum»,​ надо B38)​ Dim i As​
​ не учитывает. Необходимо,​: Варианты: Воспользоваться методом​ String, ByVal strLike​,​ (в 1 ячейке​ не получилось сделать.​

​ Is Nothing Then​​ в третью строку​ ячейки A2 на​ меняются цены и​ первой ячейки найденного​

​Hugo121​​Может Вы хотите​​ — уже нет.​​ и т.д.) Exit​alucard91​ Long Dim iLastRow​​ чтобы считал по​​ Find для диапазона.​ As String) Const​Мужики спасибо!​ — 1 слово)​Дана таблица. По​ adr = adr​ листа «Поиск» -​
​ наличие буквы «л»​ наличие (нужно обновить)​ диапазона, и убрал​​: Не нужен обязательно​​ перебрать все варианты​

​Hugo121​​ For End If​
​: Добрый день!​ As Long Dim​ всем ячейкам в​ Вопрос — что​ ForReading As Byte​Вы не совсем​ выдает в ячейку​ столбцам перечислены стадии​ & » «​ с выводом адреса​ (Верно)​
​Название все пишут​ удаление диапазона, ибо​ оригинал (личные и​ ?​: Мой алгоритм в​ Next End SubИли​Имеется некая ячейка,​ FoundCell As Range​
​ которых содержится слово​ дальше с ними​ = 1 Dim​

​ меня поняли:​​ «+ ретик», если​ переработки (всего 4​
​ & Ws.Name &​ ячейки, в которой​=ЕЧИСЛО(ПОИСК(«БД»;A3)) Проверка ячейки​ по разному но​ это мне мешало​
​ секретные данные убирайте),​

​Или же Вам​​ первом варианте избавлен​ так, если в​ содержащая текст.​ iLastRow = Cells(Rows.Count,​ «яблоко»​ делать надо?​ i As Long​мне нужна была​ слова не встречаются​ стадии — 4​

​ «!» & FR.Address​​ был найден этот​ A3 на наличие​ содержатся точно либо​ Заменил на очистку​
​ нужен полный аналог​ достаточно частичного совпадения​ от этой проблемы.​ таблице ключевых слов​Имеется таблица 20*20,​ «C»).End(xlUp).Row Range(«B2:B» &​Казанский​
​upd V, опередил​ Dim fso As​ формула, которая:​ — оставляет ячейку​ столбца). В какой-то​ ‘—цикл по следующим​
​ текст ?​ текста «БД» (ИСТИНА)​

​ правильный номер номер​​ — смотрите там​​ — форматы, расположение​​ … тогда замените​pashulka​ первый столбец, не​​ содержащая ключевые слова.​​ iLastRow).ClearContents With Worksheets(«Tabelle2»)​: Tanya15, If Cells(i,​ с вопросом!​
​ Object, tso As​- берет Ф.И.О​ пустой.​ из стадий может​ найденным ячейкам a​Vlad999​вроде работает и​ (в разных форматах,​ есть остатки!)​ данных, ну и​ xlWhole на xlPart​:​ [A:A] :​Как при помощи​ For i =​ j) like «*яблоко*»​Nordheim​ Object Dim strLine​

​ человека (столбец 1),​​200?’200px’:»+(this.scrollHeight+5)+’px’);»>​ встречаться «передача», которая​ = FR.Address ‘—запоминаем​: на листе один​ показывает ВЕРНО/НЕВЕРНО​ с пробелом,точкой или​Это для начала,​ в данном случае​ или добавьте символ​alucard91​Private Sub Test2()​ макроса запустить проверку​ 2 To iLastRow​
​ Then​: Sub test() Dim​ As String Dim​- находит его​

​=ЕСЛИ(ИЛИ(ВПР(A2;A:B;2;0)=»Дефектоскопист»;ВПР(A2;A:B;2;0)=»Электрогазосварщик»;ВПР(A2;A:B;2;0)=»Электросварщик»);»+ретик»;»»)​​ может звучать по-разному​ адрес первой найденной​

CyberForum.ru

Поиск в ячейках по части слова

​ текст всегда в​​но как понять​ тире и тп.)​
​ там ведь нужно​ свои макросы не​ подстановки «*»​
​, В этом случае​ Dim iWord As​ ячейки, чтобы при​ Set FoundCell =​Tanya15​ i&, iCnt1&, iCnt2&,​ x As Long:​ должность (столбец 2)​Нет формулы поиска​ (например, передача с​ ячейки Do Set​ одном экземпляре?​ в какой ячейке​ или правильное указание​ поиск ключей переделывать,​ лишним будет показать,​Hugo121​

​ — можно выбрать​​ Variant, iSource As​ нахождении в ней​
​ .Columns(2).Find(Cells(i, «A»), ,​: Все так просто​ arr() ‘1 вариант​ x = 1​ и уже ПОТОМ…​ слова в массиве.​ передачей обязательств или​ FR = Ws.Cells.FindNext(FR)​yl3d​ он нашел соответствие??​ модели в тексте​ а некогда…​ если возможно.​​: — так все​​ другой критерий разделения​ Range, iCell As​

​ любого слова из​​ xlValues, xlPart) If​Спасибо!​

CyberForum.ru

Поиск определенной части текста в ячейке

​ поиск на листе​​ Set fso =​
​Но с Вашей​китин​ передача в стороннюю​
​ If FR.Address =​: Vlad999 , нет​Alex77755​ (с пробелом или​
​Hugo121​alucard91​ ключи говорят что​ ключей, например, запятую​ Range Set iSource​ столбца 1 -​ Not FoundCell Is​Nordheim​ For i =​ CreateObject(«Scripting.FileSystemObject») ‘ Set​ помощью у меня​: может так?только нужные​
​ организацию). Надо, чтобы​ a Then Exit​ — может быть​
​: Я бы формулами​ без, или в​: Переделал поиск -​
​: Секретных данных нет,​ известны — есть​
​Код A1 =​ = [C5:V24] For​
​ выполнить макрос 1,​ Nothing Then Cells(i,​

​: под ваш пример.​​ 1 To 100​ tso = fso.OpenTextFile(strFilePath,​
​ получилось!!!​

​ слова надо вынести​​ в пятом столбце​ Do adr =​
​ несколько ячеек с​ не стал такое​ скобках)​
​ проверяйте.​
​ условия и задачи​
​ где-то некая таблица.​ Дядя Вася, мама,​
​ Each iWord In​
​ из столбца 2​ «B») = .Cells(FoundCell.Row,​
​Sub test() Dim​ If UCase(Cells(i, 1).Value)​
​ ForReading) i =​
​ЕСЛИ(ИЛИ(ЕЧИСЛО(ПОИСК({«Дефектоскопист»:»Электрогазосварщик»:»Электросварщик»};ВПР(A2;Лист1!A:B;2;0))));»+ретик»;»»)​ в отдельный столбец​
​ выполнялось следующее условие​
​ adr & «​ похожим текстом​ делать.​Нужно найти соответствие​
​voidex​ постарался максимально расписать​pashulka​ мыла, раму ‘можно​ Split([A1]) Set iCell​ — выполнить макрос​
​ «D») End If​
​ i&, iCnt1&, iCnt2&,​
​ Like UCase(«яблоко») Then​
​ 1 Do While​
​Второй лист.​
​200?’200px’:»+(this.scrollHeight+5)+’px’);»>=ЕСЛИ(ЕНД(ПОИСКПОЗ(1;—ЕЧИСЛО(ПОИСК($E$6:$E$8;B2));0));»»;»+ретик»)​
​ =если в каком​ » & Ws.Name​Vlad999​Макросами проще. Загонять​
​ прайсов и базы​: Всем доброго времени​ в самом документе.​
​:​ без пробелов Private​
​ = iSource.Find(iWord, ,​ 2, и так​ Next End With​

​ arr(), ikey ‘1​​ iCnt1 = iCnt1​ Not tso.AtEndOfStream ‘​СПАСИБО!!!​
​формула массива​ из столбцов есть​ & «!» &​
​: для одного.​ в массивы и​ по модели/номеру​ суток​
​От использования разных​Hugo121​ Sub Test1v2() Dim​ xlValues, xlWhole) If​ для каждого столбца​

​ End Sub​​ вариант For Each​ + 1 Next​
​ strLine = tso.ReadLine​
​f1eshka​только не понял​
​ слово «передача», то​ FR.Address Loop ‘————​
​Sub vvv() Dim​ работать с ними.​

​если есть совпадение​​есть макрос(точнее его​ макросов в зависимости​, Имелось ввиду, что​

​ iWord As Variant,​​ Not iCell Is​
​ ключевых слов.​Nordheim​

CyberForum.ru

Поиск текста с выводом адреса ячейки

​ ikey In ActiveSheet.UsedRange​​ i ‘2 вариант​ If strLine Like​
​: Доброго времени суток.​ причем тут ФИО?​
​ появляется слово «есть».​ End If End​
​ Ws As Worksheet,​Но по тем​ указать Цену из​
​ часть которую я​ от результата совпадения​ если изначально -​ iCell As Range​ Nothing Then Run​Пример:​
​: Sub test() Dim​ If UCase(ikey.Value) Like​ поиск в массиве​ strLike Then Cells(x,​ Допустим есть файл​YouGreed​Задача, вроде простая,​ If Next ‘Cells(i,​ i%, FR As​ данным, что приложены​ Прайса в Базу​

​ бы хотел изменить​​ в таблице ушел​ было достаточно искать​ For Each iWord​

​ Choose(iCell.Column — iSource.Column​​Ячейка = «мама​ i&, cell As​ UCase(«*яблоко*») Then iCnt1​ arr = Range([a1],​

​ 1).Value = strLine​​ info.txt ( состоит​
​: Пытливый, Так?​ но не могу​ 5) = adr​ Range, adr$, f$​ даже не могу​если изменилось указать​pomenat = InputBox(«введите​ к одному макросу,​любое слово​ In Split([A1], «,»)​ + 1, «Change»,​ мыла раму»​ Range With Sheets(«Tabelle1″)​ = ikey(1, 2)​ [a100]).Value For i​ x = x​ из множества строк,​200?’200px’:»+(this.scrollHeight+5)+’px’);»>=ЕСЛИ(СУММ(($E$5:$E$7=ПСТР(ВПР($A2;$A$2:$B$4;2;);1;НАЙТИ(» «;ВПР($A2;$A$2:$B$4;2;);1)-1))*СТРОКА($A2));»+ ретик»;»-«)​ сообразить, как с​ ‘если в одну​ For i =​ подсказать конкретно.​ наличие 1/0​ слово») For Z​ зависящему от этого​

​из перечисленных, т.е.​​ Set iCell =​

​ «Delta», «Sum», и​​Таблица ключевых слов:​​ For i =​​ + iCnt1 Next​ = 1 To​ + 1 End​ например gsd =​
​Откровенно, накидал туда,​
​ помощью формул ее​ ‘если один адрес​ 5 To Cells(Rows.Count,​Для более конкретного​пример привел в​ = Z To​ результата.​ есть строка «дядю​ [A5:T24].Find(Trim(iWord), , xlValues,​ т.д.) Exit For​….1…….|……2……|…….3….​ 2 To .Cells(.Rows.Count,​ ikey MsgBox «На​ 100 If UCase(arr(i,​ If i =​ 797 …. dig​ всякого всякого, можно​ решить. Буду благодарна​ — одна ячейка​ 3).End(xlUp).Row f =​ ответа нужны конкретные​ приложении.​ LastRow1 If UCase(Cells(Z,​PS: кнопку убрал​ вася мама мыла​ xlWhole) If Not​ End If Next​Мама…|..Дядя…|..Дедка​ 1).End(xlUp).Row Set cell​ листе » &​ 1)) Like UCase(«яблоко»)​ i + 1​ = 7666 и​ попроще…​ за помощь!​ ms = Split(Mid(adr,​ Cells(i, 3).Value For​ файлы что есть​Буду благодарен за​ c).Text) = UCase(pomenat)​ в сторону и​ раму» и мы​ iCell Is Nothing​ End SubP.S. При​Папа….|…Тетя…|…Бабка​

​ = Sheets(«Tabelle2»).Columns(«b:b»).Find(Trim(.Cells(i, 1).Value),​​ iCnt1 & «​ Then iCnt2 =​
​ Loop tso.Close Set​ т.д.) в корне​
​Пытливый​Svsh2015​ 2, 1000)) Cells(i,​
​ Each Ws In​ и что хотелось​ помощь!​

​ And…..Как сделать так,​​ забыл вернуть, она​ ищем, сначала дядю,​
​ Then ‘Выполнение необходимого​ желании, можно использовать​Выполнить макрос #1​ lookat:=xlPart) If Not​ ябл.» End Sub​
​ iCnt2 + 1​ tso = Nothing​ в с экселевким(готова​: китин,​: добрый день,​ 5).Resize(, UBound(ms) +​ Sheets If Ws.Name​

​ бы получить​​Alex77755​ чтобы можно было​
​ на той же​

CyberForum.ru

Поиск фрагментов текста в ячейке с использованием макросов

​ потом васю и​​ макроса Exit For​
​ массив​ так как ячейка​ cell Is Nothing​Lina1515​
​ Next i ‘итог​ Set fso =​ таблица) нужно сделать​Принцип работы очень​для тестирования кнопка​ 1) = ms​ <> «Поиск» Then​artsmart​: Открой секрет как​ ввести(в inputbox) не​ вкладке что и​ т.д.​ End If Next​Hugo121​ содержит слово из​ Then .Cells(i, 2).Value​: Всем доброго времени​ MsgBox «На листе​
​ Nothing End Sub​ так, чтобы через​ нравится. Но можно​ test в файл-примере,​ ‘————————- adr =​ Set FR =​

​: Вот сделал два​​ ты получил 9792,02?​
​ полное содержание ячейки,​ описание, только сбоку.​То теперь, когда​
​ End Sub​

​: Добавляем к значению​​ первого столбца.​ = cell(1, 3)​ суток!​
​ » & iCnt1​Hugo121​ vba ексель находил​ без выноса? как-то​ кнопка clean -очистить:​ «» Next End​ Ws.Cells.Find(f) If Not​ файла вырезка​От сюда?​ которое надо обработать​Большое спасибо за​ выяснилось, что искомое​alucard91​ ячейки по пробелу​Надеюсь не сильно​ Next i End​Я недавно начала​ & » ябл.»​: Обычно нужно вставлять​ в этом файле​

CyberForum.ru

Поиск конкретного слова из текста в ячейке (Формулы/Formulas)

​ в формуле прописать​​Код =ЕСЛИ(СЧЁТЕСЛИ(B7:E7;»*Передача*»)>0;»Есть»;»Нет»)​
​ Sub​ FR Is Nothing​
​Прайслист поставщика 1​artsmart​
​ (например: желтый дом),​ внимание.​
​ значение может содержать​: Hugo121, простите, Ваш​ по концам (в​ запутал. Спасибо))​ With End Sub​ работать в VBA,​ & vbLf &​ не одно значение,​ определенные строки и​ (документ итак забит​
​Svsh2015​
​yl3d​

​ Then adr =​страница 2 -​

​: Через вспомогательные файлы​​ а одно слово​pashulka​несколько слов​​ вариант с пробелами​​ переменной).​
​pashulka​Lina1515​

​ поэтому у меня​​ «В массиве «​
​ а много, и​
​ выставлял в конкретные​ до отказа).​: добрый вечер,можно также​

​: Vlad999 , один​​ adr & «​
​ база данных SQL​ вообще-то делал​ «желтый» или «дом»​:​, возник мой вопрос.​ показался мне слишком​

​Цикл по 20х20​​: Excel ? Word​
​: Спасибо большое!​ возник маленький вопрос.​ & iCnt2 &​ разных. Поэтому есть​

​ ячейки ексель при​​Пытливый​​ использовать макрос,кнопка yy​

​ адрес- одна ячейка.​​ » & Ws.Name​​нужно из 1​​Из прайса всю​​ или если возможно(так​

​alucard91​​Hugo121​​ запутанным.​​ (можно 2 вложенных),​hands hands hands​ ?​azat​ Я его оформила​ » ябл.» End​

​ смысл сперва прочитать​​ этом, чтобы взятая​: YouGreed,​ в файл-примере:​Vlad999 , не​​ & "!" &​

​ страницы​​ строку разбиваю на​hands ​ для общего развития)​​, На первый взгляд,​​: Вопрос понятен.​​pashulka, текст в​
​ к каждому значению​
​Если в ячейке​: Подскажите пожалуйста правильную​
​ в Excel. Сама​ Sub​
​ весь файл в​ строка вставлялась в​
​Извини, формула хорошая​Sub yy() Dim​ работает.​
​ FR.Address End If​вытащить цены во​ слова​
​ вообще «жел»(если такое​
​ реальный разделитель данных,​
​Но без примера​

excelworld.ru

Поиск определенного текста в файле .txt и вставка в определенную ячейку в Excel

​ А1 редактированию не​​ прибавляем пробелы, ищем​ будет текст «папа​ формулу… Мне надо​ задача очень простая,​Tanya15​ словарь (ну или​ эксель с данными​ но если слово​ i&, j&, i1&​Выдает ошибку «run-time​ Next Cells(i, 5)​ вторую​F43​ возможно)​ у Вас это​ и подробного описания​ подлежит, так что​ используя Instr()​ + тетя =​ чтобы в ячейке​ если её решать​: Мой пример​ в коллекцию), а​ после знака равенства.​
​ не в начале​ i1 = Range(«B»​ error ’13’: Type​ = adr adr​artsmart​
​сравниваются с​Апострофф​-​ задачи непонятно, что​ буду пытаться составить​Если нашли -​ адюльтер», то какой​ B38 формула проверала​ в Excel. Я​Sub Кнопка2_Щелчок()​

​ затем циклом по​​ Пока сам только​​ предложения — сыпется.​​ & Cells.Rows.Count).End(xlUp).Row With​
​ mistmatch»​ = «» Next​: Что никто задачи​названиями, моделями, номерами​: Метод Range.Find с​и в этом​ вообще оптимальнее искать​ более четкие ключи​ анализ столбца, выполнение​ макрос нужно выполнить​ наличие текста «AN85A»​ бы использовала =VLOOKUP(«*»&A2&»*»;Sheet2!B:D;3;0).​Dim i As​ листу всё собранное​ научился делать простейший​китин​ CreateObject(«VBScript.RegExp»): .IgnoreCase =​и подсвечивает строку​ End Subдля нескольких​ ранее не рашал​ прайсов​ параметром LookAt:=xlPart​ случае, можно протестировать​ — ключей изначально​ для избежания колизий.​ макроса, выход.​ 1, 2 или​ и в случае​ Но я бы​ Single, j As​ разложить по местам.​ импорт данных из​: легко​ True For j​

​ кода: ms =​​ чуть позже. пока​ подобной?​получаем B8​или (тоже из​ :​ ясно что всего​Да и вообще​Можно и иначе​ 1+2​ истины, то значение​ хотела это автоматизировать​

CyberForum.ru

​ Single, s As​

Узнай цену своей работы

Формулировка задачи:

Здравствуйте
Подскажите как прописать условие если в ячейки текст

Код к задаче: «Проверить, есть ли в ячейке текст»

textual

Листинг программы

Sub NoText()
If Range("a9").Text <> "" Then
    MsgBox "В ячейке есть текст!"
End If
End Sub

Полезно ли:

9   голосов , оценка 4.222 из 5

Похожие ответы

  1. Обработка части текста из ячейки ворда
  2. Как сцепить текст если ячейка объединена
  3. Извлечение части данных из одной ячейки макросом
  4. В выделенном фрагменте преобразовать все поля типа eq в текст
  5. При открытии документа показать окно с текстом
  6. Определение ближайшей к ячейке автофигуры
  7. Не получается присвоить переменной vba из ячейки excel
  8. Вытащить из ячейки символы
  9. VBA Word выделение латинских букв в тексте
  10. Откат редактирования в текстбуксе
  11. Поиск всех ячеек, содержащих введенный текст

Понравилась статья? Поделить с друзьями:
  • Excel макросы оператор for
  • Excel макросы найти ячейку
  • Excel макрос экспорт в pdf
  • Excel макрос что такое value
  • Excel макрос число пропись