Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.73
BDSTPET
0 / 0 / 0
Регистрация: 02.06.2012
Сообщений: 14
#1

Проверка строк на вхождение, исправить код - VBA

02.06.2012, 21:37. Просмотров 3088. Ответов 13
Метки нет (Все метки)

При проверке VBA выдает ошибку

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub PR()
Dim A As String, B As String, bFlag As Boolean, i As Long, Result As Long, iAsc As Integer
A = InputBox("Ввод строки А:")
B = InputBox("Ввод строки B:")
For i = 1 To Len(A)
    bFlag = bFlag Or InStr(1, B, Mid(A, i, 1)) =  “если будет хоть одно невхождение” то bFlag=True
    iAsc = Asc(Mid(A, i, 1)) “результат вычисляем в первом же цикле”
    If iAsc >= 65 And iAsc <= 122 Then Result = Result + iAsc
Next i
If bFlag Then =”если не все буквы строки А входят в строку В то считаем произведение”
    Result = 1
    For i = 1 To Len(B)
        If IsNumeric(Mid(B, i, 1)) Then Result = Result * Val(Mid(B, i, 1))
    Next i
End If
MsgBox "Строка В: " & B & vbNewLine & "Строка А: " & A & vbNewLine & "Результат: " & Result
End Sub
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2012, 21:37
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Проверка строк на вхождение, исправить код (VBA):

Код склеивания строк, нужно поправить код соединения строк с запятыми для Excel
Есть красивый код но в нем учитывается и пустые строки для соединения и...

Как проверить, есть ли в ячейке вхождение одной из строк?
Как проверить есть ли в ячейки вхождение одной из строк. Например, в ячейке...

Проверка строк на совпадения
Друзья имеется 2 таблицы , пример : 1 лист - 20 30 40 30 20 11 10 30 20...

Исправить и доработать код
Здравствуйте! Помогите пожалуйста отладить программу. Программа рабочая, там...

Исправить код программы
Изначальное задание ...... Заданы две матрицы А (4,4) и В (3,3) и два...

Сложение переменных, исправить код
Помогите, пожалуйста, найти ошибку. (вложение) Макрос &quot;main&quot;. 'недельный...

13
ikki
призрак
2822 / 878 / 117
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
02.06.2012, 21:45 #2
Цитата Сообщение от BDSTPET Посмотреть сообщение
При проверке VBA выдает ошибку
а что требуется?
чтобы не выдавал? исправить.
по-другому вряд ли получится - ни "пожалуйста", ни "плизззз", ни "за раннее спосибо" VBA не принимает.

если Вы таки спросите, как исправить?, то я таки спрошу: где ошибка? и какая ошибка?

или... это нам предупреждение?
что VBA - редиска?
Вы сделали такое открытие и решили поведать миру?
0
Dragokas
Эксперт WindowsАвтор FAQ
16927 / 7012 / 851
Регистрация: 25.12.2011
Сообщений: 10,808
Записей в блоге: 16
02.06.2012, 21:57 #3
Цитата Сообщение от BDSTPET Посмотреть сообщение
bFlag = bFlag Or InStr(1, B, Mid(A, i, 1)) = “если будет хоть одно невхождение” то bFlag=True
конечно выдает... что Вы этим хотели сказать? Русских команд ВБА не понимает, только: if...then...else. Комментарии ставяться после апострофа '

и да, хотя бы напишите каково было тех.задание.

Добавлено через 11 минут
Давайте догадаюсь: посчитать сумму ASC кодов букв строки B, которые есть в строке А (без повторов), а также произведение всех цифр строки B.
0
BDSTPET
0 / 0 / 0
Регистрация: 02.06.2012
Сообщений: 14
02.06.2012, 22:01  [ТС] #4
Задание: Проверить,входит ли каждая из букв данной строки А в строку В. Если да, то вычислить сумму кодов латинских букв строки А. Если нет, вычислить произведение цифр из строки В
0
Dragokas
Эксперт WindowsАвтор FAQ
16927 / 7012 / 851
Регистрация: 25.12.2011
Сообщений: 10,808
Записей в блоге: 16
02.06.2012, 22:05 #5
1. Логическая ошибка:
Цитата Сообщение от BDSTPET Посмотреть сообщение
Visual Basic
1
If iAsc >= 65 And iAsc <= 122 Then Result = Result + iAsc
проверяются лишние символы. Можно так:
Visual Basic
1
If ucase(iAsc) >= 65 And ucase(iAsc) <= 90 Then Result = Result + iAsc
1
BDSTPET
0 / 0 / 0
Регистрация: 02.06.2012
Сообщений: 14
02.06.2012, 22:17  [ТС] #6
Так правильно?

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub PR()
Dim A As String, B As String, bFlag As Boolean, i As Long, Result As Long, iAsc As Integer
A = InputBox("Ввод строки А:")
B = InputBox("Ввод строки B:")
For i = 1 To Len(A)
    bFlag = bFlag Or InStr(1, B, Mid(A, i, 1))
    bFlag = True
    iAsc = Asc(Mid(A, i, 1))
    If UCase(iAsc) >= 65 And UCase(iAsc) <= 90 Then Result = Result + iAsc
Next i
If bFlag Then
    Result = 1
    For i = 1 To Len(B)
        If IsNumeric(Mid(B, i, 1)) Then Result = Result * Val(Mid(B, i, 1))
    Next i
End If
MsgBox "Строка В: " & B & vbNewLine & "Строка А: " & A & vbNewLine & "Результат: " & Result
End Sub
0
Dragokas
Эксперт WindowsАвтор FAQ
16927 / 7012 / 851
Регистрация: 25.12.2011
Сообщений: 10,808
Записей в блоге: 16
02.06.2012, 22:21 #7
Нет. Я Вам дал ошибочный вариант. Там тип данных был неверный.
Но у Вас все равно работать правильно не будет. Вот:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Option Explicit
 
Sub PR()
Dim A As String, B As String, bFlag As Boolean, i As Long, Result As Long, Lett As String
A = InputBox("Ввод строки А:")
B = InputBox("Ввод строки B:")
For i = 1 To Len(A)
    Lett = Mid(A, i, 1)
    If InStr(1, B, Lett) = 0 And Lett Like "[A-Za-zА-яҐЁЄЇіґёєї]" Then bFlag = True: Exit For
    If Asc(UCase(Lett)) >= 65 And Asc(UCase(Lett)) <= 90 Then Result = Result + Asc(Lett)
Next i
If bFlag Then '”если не все буквы строки А входят в строку В то считаем произведение”
    Result = 1
    For i = 1 To Len(B)
        If IsNumeric(Mid(B, i, 1)) Then Result = Result * Val(Mid(B, i, 1))
    Next i
End If
MsgBox "Строка В: " & B & vbNewLine & "Строка А: " & A & vbNewLine & "Результат: " & Result
End Sub
0
BDSTPET
0 / 0 / 0
Регистрация: 02.06.2012
Сообщений: 14
02.06.2012, 22:25  [ТС] #8
Извините, а что значат вот эти строки:
Visual Basic
1
2
Lett = Mid(A, i, 1)
    If InStr(1, B, Lett) = 0 And Lett Like "[A-Za-zА-яҐЁЄЇіґёєї]" Then bFlag = True: Exit For
0
Dragokas
Эксперт WindowsАвтор FAQ
16927 / 7012 / 851
Регистрация: 25.12.2011
Сообщений: 10,808
Записей в блоге: 16
02.06.2012, 22:28 #9
Теперь Lett принимает каждую букву текста А (а не ASC-код буквы, как раньше с переменной iASC).

У Вас в задании написано:
Цитата Сообщение от BDSTPET Посмотреть сообщение
входит ли каждая из букв данной строки А в строку В
а Вы проверяли вхождение каждого из символов, не важно буква или нет.
Как работает команда Like, думаю, несложно ввести в поисковике "VBA Like" (1 ссылка).

Вот еще Вам для справки таблица символов, соответствия ASC-кодам.
0
Вложения
Тип файла: xls Таблица символов.xls (33.5 Кб, 13 просмотров)
BDSTPET
0 / 0 / 0
Регистрация: 02.06.2012
Сообщений: 14
02.06.2012, 22:40  [ТС] #10
Цитата Сообщение от Diskretor Посмотреть сообщение
Теперь Lett принимает каждую букву текста А (а не ASC-код буквы, как раньше с переменной iASC).
Это я понял.
Не могли бы Вы мне объяснить что значит:
Visual Basic
1
And Lett Like "[A-Za-zА-яҐЁЄЇіґёєї]"
Добавлено через 9 минут
Извините за столько вопросов, но нельзя ли так написать
Visual Basic
1
And Lett Like "[A-Z]"
0
Dragokas
Эксперт WindowsАвтор FAQ
16927 / 7012 / 851
Регистрация: 25.12.2011
Сообщений: 10,808
Записей в блоге: 16
02.06.2012, 22:50 #11
Цитата Сообщение от BDSTPET Посмотреть сообщение
входит ли каждая из букв данной строки А в строку В.
Можно. Но я понимаю буквально. Если сразу не написано, что они тоже латинские, то и проверяю все.

Если хотите проще тогда вместо:
Visual Basic
1
2
3
4
5
For i = 1 To Len(A)
    Lett = Mid(A, i, 1)
    If InStr(1, B, Lett) = 0 And Lett Like "[A-Za-zА-яҐЁЄЇіґёєї]" Then bFlag = True: Exit For
    If Asc(UCase(Lett)) >= 65 And Asc(UCase(Lett)) <= 90 Then Result = Result + Asc(Lett)
Next i
Это:
Visual Basic
1
2
3
4
5
6
7
8
For i = 1 To Len(A)
    Lett = Mid(A, i, 1)
    If Lett Like "[A-Za-z]" Then
        If InStr(B, Lett) = 0 Then
            bFlag = True: Exit For
        Else: Result = Result + Asc(Lett)
    End If
Next
0
BDSTPET
0 / 0 / 0
Регистрация: 02.06.2012
Сообщений: 14
02.06.2012, 23:09  [ТС] #12
Выдает ошибку с Next. Next without For

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub PR()
Dim A As String, B As String, bFlag As Boolean, i As Long, Result As Long, Lett As String
A = InputBox("Ввод строки А:")
B = InputBox("Ввод строки B:")
For i = 1 To Len(A)
    Lett = Mid(A, i, 1)
    If Lett Like "[A-Za-z]" Then
        If InStr(B, Lett) = 0 Then
            bFlag = True: Exit For
        Else: Result = Result + Asc(Lett)
    End If
Next
If bFlag Then '"если не все буквы строки А входят в строку В то считаем произведение"
    Result = 1
    For i = 1 To Len(B)
        If IsNumeric(Mid(B, i, 1)) Then Result = Result * Val(Mid(B, i, 1))
    Next i
End If
MsgBox "Строка В: " & B & vbNewLine & "Строка А: " & A & vbNewLine & "Результат: " & Result
End Sub
0
Dragokas
Эксперт WindowsАвтор FAQ
16927 / 7012 / 851
Регистрация: 25.12.2011
Сообщений: 10,808
Записей в блоге: 16
02.06.2012, 23:19 #13
Снова мой fail. Забыл end if:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub PR()
Dim A As String, B As String, bFlag As Boolean, i As Long, Result As Long, Lett As String
A = InputBox("Ââîä ñòðîêè À:")
B = InputBox("Ââîä ñòðîêè B:")
For i = 1 To Len(A)
    Lett = Mid(A, i, 1)
    If Lett Like "[A-Za-z]" Then
        If InStr(B, Lett) = 0 Then
            bFlag = True: Exit For
            Else: Result = Result + Asc(Lett)
        End If
    End If
Next
If bFlag Then '"åñëè Г*ГҐ ГўГ±ГҐ ГЎГіГЄГўГ» ñòðîêè ГЂ âõîäÿò Гў ñòðîêó Г‚ ГІГ® Г±Г·ГЁГІГ*ГҐГ¬ ïðîèçâåäåГ*ГЁГҐ"
    Result = 1
    For i = 1 To Len(B)
        If IsNumeric(Mid(B, i, 1)) Then Result = Result * Val(Mid(B, i, 1))
    Next i
End If
MsgBox "ÑòðîêГ* Г‚: " & B & vbNewLine & "ÑòðîêГ* ГЂ: " & A & vbNewLine & "ÐåçóëüòГ*ГІ: " & Result
End Sub
1
BDSTPET
0 / 0 / 0
Регистрация: 02.06.2012
Сообщений: 14
02.06.2012, 23:21  [ТС] #14
Большое Вам спасибо!
0
02.06.2012, 23:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2012, 23:21
Привет! Вот еще темы с решениями:

Арифметические вычисления, исправить код
в цикле Do While (Abs(y) &lt; e) где, Abs(y) = 4 е = 2 он пишет true... что...

Работа с шаблонами: исправить код
Добрый день,подскажите пожалуйста почему не работает данная часть кода? ...

Исправить код сжимания цифр
как исправить этот код сжимания чтобы 15-16, 20-21 не соединял, а только такие...

Проверка на вхождение строки в массив строк работает некорректно
У меня есть строка и массив строк, к примеру string mes =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru