Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Обработка строковых выражений - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Обработка строковых выражений (Макросы/Sub)
Обработка строковых выражений
aleksandr2138 Дата: Четверг, 04.04.2019, 22:40 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте , мне дали задание по информатике написать программу для проверки баланса левых и правых скобок в заданом тексте , в информатике не особо понимаю), написал код, но не могу понять где в нем ошибка, пишет Next without For
[vba]
Код
Dim s As String, i, k As Byte
s = Range("A2")
For i = 1 To Len(s)
If Mid(s, i, 1) = "(" Then
k = k + 1
ElseIf Mid(s, i, 1) = ")" Then
k = k - 1
If n < 0 Then
Cells(2, 2) = k
End If
Next
If n = 0 Then
Cells(2, 2) = k
End Sub
[/vba]


Ларичев
 
Ответить
СообщениеЗдравствуйте , мне дали задание по информатике написать программу для проверки баланса левых и правых скобок в заданом тексте , в информатике не особо понимаю), написал код, но не могу понять где в нем ошибка, пишет Next without For
[vba]
Код
Dim s As String, i, k As Byte
s = Range("A2")
For i = 1 To Len(s)
If Mid(s, i, 1) = "(" Then
k = k + 1
ElseIf Mid(s, i, 1) = ")" Then
k = k - 1
If n < 0 Then
Cells(2, 2) = k
End If
Next
If n = 0 Then
Cells(2, 2) = k
End Sub
[/vba]

Автор - aleksandr2138
Дата добавления - 04.04.2019 в 22:40
bmv98rus Дата: Четверг, 04.04.2019, 22:49 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 411 ±
Замечаний: 20% ±

Excel 2013/2016
aleksandr2138, как только научитесь оформлять код правильно на форуме , и вложенность оформлять отступами, так сразу найдете ошибку, правда ваш баланс не сработает если количеста открывающих и закрывающих скобок совпадет, а вот порядок будет неверным "..)..(..)..(.."


Замечательный медведь, процентов на 20.

Сообщение отредактировал bmv98rus - Пятница, 05.04.2019, 19:04
 
Ответить
Сообщениеaleksandr2138, как только научитесь оформлять код правильно на форуме , и вложенность оформлять отступами, так сразу найдете ошибку, правда ваш баланс не сработает если количеста открывающих и закрывающих скобок совпадет, а вот порядок будет неверным "..)..(..)..(.."

Автор - bmv98rus
Дата добавления - 04.04.2019 в 22:49
Pelena Дата: Пятница, 05.04.2019, 07:08 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 14233
Репутация: 3110 ±
Замечаний: ±

Excel 2010, 2016 & Mac Excel
aleksandr2138, оформите код тегами с помощью кнопки # в режиме правки поста


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
Сообщениеaleksandr2138, оформите код тегами с помощью кнопки # в режиме правки поста

Автор - Pelena
Дата добавления - 05.04.2019 в 07:08
aleksandr2138 Дата: Среда, 10.04.2019, 20:23 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте , мне дали задание по информатике написать программу для проверки баланса левых и правых скобок в заданом тексте , в информатике не особо понимаю), написал код, но не могу понять где в нем ошибка, пишет Run-Time Error 6
[vba]
Код

Dim s As String, i, k As Byte
s = Range("A2")
For i = 1 To Len(s)
If Mid(s, i, 1) = "(" Then
k = k + 1
ElseIf Mid(s, i, 1) = ")" Then
k = k - 1
End If
If k < 0 Then
Cells(2, 2) = "баланса нету "
End If
Next
If k = 0 Then
Cells(2, 2) = "баланс есть"
End If
End Sub
[/vba]


Ларичев

Сообщение отредактировал aleksandr2138 - Среда, 10.04.2019, 20:24
 
Ответить
СообщениеЗдравствуйте , мне дали задание по информатике написать программу для проверки баланса левых и правых скобок в заданом тексте , в информатике не особо понимаю), написал код, но не могу понять где в нем ошибка, пишет Run-Time Error 6
[vba]
Код

Dim s As String, i, k As Byte
s = Range("A2")
For i = 1 To Len(s)
If Mid(s, i, 1) = "(" Then
k = k + 1
ElseIf Mid(s, i, 1) = ")" Then
k = k - 1
End If
If k < 0 Then
Cells(2, 2) = "баланса нету "
End If
Next
If k = 0 Then
Cells(2, 2) = "баланс есть"
End If
End Sub
[/vba]

Автор - aleksandr2138
Дата добавления - 10.04.2019 в 20:23
Pelena Дата: Среда, 10.04.2019, 20:31 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 14233
Репутация: 3110 ±
Замечаний: ±

Excel 2010, 2016 & Mac Excel
aleksandr2138, дублировать темы не надо, объединила с прежней
По теме
[vba]
Код
Sub баланс()
    Dim s As String, i, k As Byte
    s = Range("A2")
    For i = 1 To Len(s)
        If Mid(s, i, 1) = "(" Then
            k = k + 1
        ElseIf Mid(s, i, 1) = ")" Then
            k = k - 1
        End If
    Next
    If k = 0 Then
        Cells(2, 2) = "баланс есть"
    Else
        Cells(2, 2) = "баланса нету "
    End If
End Sub
[/vba]


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
Сообщениеaleksandr2138, дублировать темы не надо, объединила с прежней
По теме
[vba]
Код
Sub баланс()
    Dim s As String, i, k As Byte
    s = Range("A2")
    For i = 1 To Len(s)
        If Mid(s, i, 1) = "(" Then
            k = k + 1
        ElseIf Mid(s, i, 1) = ")" Then
            k = k - 1
        End If
    Next
    If k = 0 Then
        Cells(2, 2) = "баланс есть"
    Else
        Cells(2, 2) = "баланса нету "
    End If
End Sub
[/vba]

Автор - Pelena
Дата добавления - 10.04.2019 в 20:31
_Boroda_ Дата: Среда, 10.04.2019, 20:57 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 15417
Репутация: 6032 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Александр, на месте преподавателя я бы обратил внимание на следующие моменты:
1. Не обозвана переменная i, там тоже нужно написать As ...
2. Как уже указал выше Михаил, у Вас не обработан случай, когда количество закр и откр скобок одинаково, но их порядок неверен - )(, или ...(...)...)...(..., или )...(.)(.)...(
3. Как уже указал выше Михаил, крайне желательно оформлять код отступами (клавиша Tab), тогда Вам будет гораздо сложнее запутаться
В итоге получается
[vba]
Код
Sub tt()
    Dim s As String, i As Byte, k As Byte, t As String
    t = "баланса нет"
    s = Range("A2")
    For i = 1 To Len(s)
        If Mid(s, i, 1) = "(" Then
            k = k + 1
        ElseIf Mid(s, i, 1) = ")" Then
            k = k - 1
        End If
        If k < 0 Then
            Exit For
        End If
    Next
    If k = 0 Then
        t = "баланс есть"
    End If
    Range("B2") = t
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеАлександр, на месте преподавателя я бы обратил внимание на следующие моменты:
1. Не обозвана переменная i, там тоже нужно написать As ...
2. Как уже указал выше Михаил, у Вас не обработан случай, когда количество закр и откр скобок одинаково, но их порядок неверен - )(, или ...(...)...)...(..., или )...(.)(.)...(
3. Как уже указал выше Михаил, крайне желательно оформлять код отступами (клавиша Tab), тогда Вам будет гораздо сложнее запутаться
В итоге получается
[vba]
Код
Sub tt()
    Dim s As String, i As Byte, k As Byte, t As String
    t = "баланса нет"
    s = Range("A2")
    For i = 1 To Len(s)
        If Mid(s, i, 1) = "(" Then
            k = k + 1
        ElseIf Mid(s, i, 1) = ")" Then
            k = k - 1
        End If
        If k < 0 Then
            Exit For
        End If
    Next
    If k = 0 Then
        t = "баланс есть"
    End If
    Range("B2") = t
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 10.04.2019 в 20:57
RAN Дата: Среда, 10.04.2019, 21:31 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 5100
Репутация: 1016 ±
Замечаний: 0% ±

2010
Цитата aleksandr2138, 04.04.2019 в 22:40, в сообщении № 1 ()
пишет Next without For

Чтобы не писал, удалим их. :)
[vba]
Код
Sub ww()
    Dim s As String
    s = Selection.Value
    If Len(s) Mod 2 = Len(Replace(Replace(s, "(", ""), ")", "")) Mod 2 Then
        MsgBox "Есть"
    Else
        MsgBox "Нет"
    End If
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Цитата aleksandr2138, 04.04.2019 в 22:40, в сообщении № 1 ()
пишет Next without For

Чтобы не писал, удалим их. :)
[vba]
Код
Sub ww()
    Dim s As String
    s = Selection.Value
    If Len(s) Mod 2 = Len(Replace(Replace(s, "(", ""), ")", "")) Mod 2 Then
        MsgBox "Есть"
    Else
        MsgBox "Нет"
    End If
End Sub
[/vba]

Автор - RAN
Дата добавления - 10.04.2019 в 21:31
bmv98rus Дата: Среда, 10.04.2019, 22:28 | Сообщение № 8
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 411 ±
Замечаний: 20% ±

Excel 2013/2016
Чтобы не писал, удалим их

не сработает если количеста открывающих и закрывающих скобок совпадет, а вот порядок будет неверным "..)..(..)..(.."

2. Как уже указал выше Михаил, у Вас не обработан случай, когда количество закр и откр скобок одинаково, но их порядок неверен - )(, или ...(...)...)...(..., или )...(.)(.)...(


Замечательный медведь, процентов на 20.
 
Ответить
Сообщение
Чтобы не писал, удалим их

не сработает если количеста открывающих и закрывающих скобок совпадет, а вот порядок будет неверным "..)..(..)..(.."

2. Как уже указал выше Михаил, у Вас не обработан случай, когда количество закр и откр скобок одинаково, но их порядок неверен - )(, или ...(...)...)...(..., или )...(.)(.)...(

Автор - bmv98rus
Дата добавления - 10.04.2019 в 22:28
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Обработка строковых выражений (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2019 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!