Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Перенос из ячейки(текст+цифры) только последних 10 цифр

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Uznaika

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте. Нужна помощь.
Есть файл ексел пример:
столбец B: пустой
столбец C: Вкл. компрессора (рем. 0,3 мм.) КамАЗ 130-3509092-63
Каким способом реализовать перенос из C в B последних 15 цифр с тире и точками?
Я нашел скрипт VBS но он переносит все символы из ячейки, пример работы скрипта 03130-3509092-63  
[SPOILER]
Function Extract_Number_from_Text(sWord As String, Optional Metod As Integer)
'sWord = ссылка на ячейку или непосредственно текст
'Metod = 0 – числа
'Metod = 1 – текст
    Dim sSymbol As String, sInsertWord As String
    Dim i As Integer
 
    If sWord = "" Then Extract_Number_from_Text = "Нет данных!": Exit Function
    sInsertWord = ""
    sSymbol = ""
    For i = 1 To Len(sWord)
        sSymbol = Mid(sWord, i, 1)
        If Metod = 1 Then
            If Not LCase(sSymbol) Like "*[0-9]*" Then
                If (sSymbol = "," Or sSymbol = "." Or sSymbol = " ") And i > 1 Then
                    If Mid(sWord, i - 1, 1) Like "*[0-9]*" And Mid(sWord, i + 1, 1) Like "*[0-9]*" Then
                        sSymbol = ""
                    End If
                End If
                sInsertWord = sInsertWord & sSymbol
            End If
        Else
            If LCase(sSymbol) Like "*[0-9.-]*" Then
                If LCase(sSymbol) Like "*[.,]*" And i > 1 Then
                    If Not Mid(sWord, i - 1, 1) Like "*[0-9]*" Or Not Mid(sWord, i + 1, 1) Like "*[0-9]*" Then
                        sSymbol = ""
                    End If
                End If
                sInsertWord = sInsertWord & sSymbol
            End If
        End If
    Next i
    Extract_Number_from_Text = sInsertWord
End Function
[/SPOILER]
Может кто подсказать как реализовать это, может есть другие варианты?
Буду признателен за подсказки.
в VB я новичок

Всего записей: 2 | Зарегистр. 24-10-2011 | Отправлено: 13:07 04-08-2016
KDPoid



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VBA же старается быть максимально интуитивным.
Вот ваша функция чего-то там в цикле елозит, выделяет только цифры и допустимые знаки, какие-то танцы с бубном.
Последнее что она делает:
Extract_Number_from_Text = sInsertWord  
Возвращает из Extract_Number_from_Text результат, который к этому моменту лежит в sInsertWord .
Теперь вам нужно не весь результат, а только сколько-нибудь символов справа.
Так и напишем...

Код:
Function Extract_Number_from_Text(sWord As String, Optional Metod As Integer, Optional RCount As Integer)
'sWord = ссылка на ячейку или непосредственно текст  
'Metod = 0 – числа  
'Metod = 1 – текст  
'RCount = количество символов справа
    Dim sSymbol As String, sInsertWord As String
    Dim i As Integer
   
    If sWord = "" Then Extract_Number_from_Text = "Íåò äàííûõ!": Exit Function
    sInsertWord = ""
    sSymbol = ""
    For i = 1 To Len(sWord)
        sSymbol = Mid(sWord, i, 1)
        If Metod = 1 Then
            If Not LCase(sSymbol) Like "*[0-9]*" Then
                If (sSymbol = "," Or sSymbol = "." Or sSymbol = " ") And i > 1 Then
                    If Mid(sWord, i - 1, 1) Like "*[0-9]*" And Mid(sWord, i + 1, 1) Like "*[0-9]*" Then
                        sSymbol = ""
                    End If
                End If
                sInsertWord = sInsertWord & sSymbol
            End If
        Else
            If LCase(sSymbol) Like "*[0-9.-]*" Then
                If LCase(sSymbol) Like "*[.,]*" And i > 1 Then
                    If Not Mid(sWord, i - 1, 1) Like "*[0-9]*" Or Not Mid(sWord, i + 1, 1) Like "*[0-9]*" Then
                        sSymbol = ""
                    End If
                End If
                sInsertWord = sInsertWord & sSymbol
            End If
        End If
    Next i
    Extract_Number_from_Text = Right(sInsertWord, RCount)
End Function

Сколько последних символов надо взять, я сделал параметром, и изменил последнюю строчку.
В вашем примере, чтобы такой функцией заполнять B из С нужно написать макрос использования этой функции. Что-нибудь типа:

Код:
Sub qweqwe()
  Range("B1").Value = Extract_Number_from_Text(Range("C1").Value, 0, 14)
End Sub

Всего записей: 404 | Зарегистр. 08-08-2006 | Отправлено: 14:42 04-08-2016
Uznaika

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
VBA же старается быть максимально интуитивным.  
Вот ваша функция чего-то там в цикле елозит, выделяет только цифры и допустимые знаки, какие-то танцы с бубном.  

 
Спасибо за ответ. буду пробовать.  

Всего записей: 2 | Зарегистр. 24-10-2011 | Отправлено: 15:27 04-08-2016
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Перенос из ячейки(текст+цифры) только последних 10 цифр


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru