Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Выбор и пересчет цифр из алфавитно-цифровой строки

1.8K
04 июля 2003 года
ziv
71 / / 04.07.2003
Требуется на VBA(Excel)из строки:
"Детали №№10-15 - левые и №№25-30 - правые"
отделить 10-15 и 25-30 и подсчитать общую сумму деталей.

какие пути решения этой проблемы могут быть?
258
07 июля 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by ziv
Требуется на VBA(Excel)из строки:
"Детали №№10-15 - левые и №№25-30 - правые"
отделить 10-15 и 25-30 и подсчитать общую сумму деталей.

какие пути решения этой проблемы могут быть?



Ну например так:

Код:
Sub МакросПроба()
  Dim s As String, iEnd As Integer
  Dim a1 As Integer, a2 As Integer, a3 As Integer, a4 As Integer
   
  s = "Детали №№10-15 - левые и №№25-30 - правые"
   
  a1 = CInt(InStrCifra(s, iEnd))
  s = Right(s, Len(s) - iEnd + 1)
  a2 = CInt(InStrCifra(s, iEnd))
  s = Right(s, Len(s) - iEnd + 1)
  a3 = CInt(InStrCifra(s, iEnd))
  s = Right(s, Len(s) - iEnd + 1)
  a4 = CInt(InStrCifra(s, iEnd))
 
End Sub

А вот сама функция:
Public Function InStrCifra(s As String, ByRef iEnd As Integer) As String
' Возвращает из строки s первую последовательность из цифр
' Например: из "ddd45dd34" - вернет 45
' после этого iEnd примет новое значение, равное последней найденной цифре
' в отобранном куске строки (в примере выше будет iEnd=5).

  Dim i As Integer, exitBool As Boolean
 
  InStrCifra = ""
  exitBool = False

  For i = 1 To Len(s)
    If Asc(Mid(s, i, 1)) > 47 And Asc(Mid(s, i, 1)) < 58 Then
      InStrCifra = InStrCifra & Mid(s, i, 1)
      exitBool = True
    Else
      If exitBool Then
        iEnd = i
        Exit For
      End If
    End If
  Next i
   
End Function
1.8K
08 июля 2003 года
ziv
71 / / 04.07.2003
Спасибо.
Что-то я про Asc() совсем забыл :)

А в чем разница в операциях со строковыми переменными между:

str=str1 & str2
str=str1 + str2

ведь результат один и тот же?
258
08 июля 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by ziv
Спасибо.
Что-то я про Asc() совсем забыл :)

А в чем разница в операциях со строковыми переменными между:

str=str1 & str2
str=str1 + str2

ведь результат один и тот же?



В данном случае никакой.
& - закреплен за операцией слияния со строковыми переменными, а
+ - имеет двоякое применение: арифм. сложение или слияние строк. пер.

Если у тебя str1 и str2 были бы типа Variant, то в зависимости от типа реальных данных в str1,2 можно ожидать либо сумму либо слитую строку - иногда это удобно, а иногда можно получить трудноуловимый глюк, если ты этого не ждешь.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог