Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
29.03.2024, 16:42:24

Войти
Название темы должно отражать её содержание.
Темы типа "ПОМОГИТЕ!!!", "Срочно!", "Не получается сделать", "Нужна помощь" и т.п. будут удаляться без объяснения причин
33 233 Сообщений в 5 454 Тем от 6 753 Пользователей
Последний пользователь: malanik777
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Разделение числовой и текстовой составляющей ячейки
Страниц: [1]   Вниз
Печать
Автор Тема: Разделение числовой и текстовой составляющей ячейки  (Прочитано 6011 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Fokin
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 5


Просмотр профиля E-mail
« : 30.10.2019, 14:32:20 »

Добрый день!
Знаний в програмиравнии у меня мало, потому решил спросить у Вас.

Пример
(ячейка А1) = ±0,1ºС

Задание
Мне нужно сделать так чтоб в ячейку А10 записало текст, тоесть ºС. А в ячейку В10 число, тоесть 0,1. В дальнейшем буду оперировать этими ячейками.

П.С. макрос пишется для кнопки

Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #1 : 30.10.2019, 16:05:06 »

Без файла примера сложно что-то конкретное советовать. Но как направление мысли - можете ознакомиться со статьей: Как оставить в ячейке только цифры или только текст?
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Fokin
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 5


Просмотр профиля E-mail
« Ответ #2 : 30.10.2019, 16:29:53 »

На новые мысли ссылка не натолкнула, так как ее уже смотрел Улыбка
С числовой частью буду еще проводить манипуляции
если будет нужно то сброшу файлы, но там 3 формы с кодами для форматирования страницы и заполнения ячеек
« Последнее редактирование: 30.10.2019, 16:34:06 от Fokin » Записан
vikttur
Глобальный модератор
Ветеран
*****

Репутация: +124/-0
Офлайн Офлайн

Сообщений: 1 816



Просмотр профиля
« Ответ #3 : 30.10.2019, 16:58:27 »

Это не пример, это картинка. В ней формулы не работают )
Записан
Fokin
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 5


Просмотр профиля E-mail
« Ответ #4 : 30.10.2019, 17:17:18 »

Ну ладно хотите файлы, то получайте  Подмигивающий
Сразу открыть файл График ВГКВ, потом второй файлик.
после открытия файла запустится форма на которой необходимо нажать кнопку "новый протокол". Пройдет процес форматирования и  созданоя новой страницы. Во второй форме вписать номер протокола (от 1 до 15), далее можно все упустить и нажать кнопку "далее". На третей форме необходимо написать код  для кнопки "не трож меня" со следующим процесом:
1) с ячейки (15, 6) текстовую часть (ºС, бар) записать в ячейку (34,28)
2) с ячейки (17, 12) числовую часть (0,1) записать в ячейку (33, 26)
3) в ячейке (36, 24) произвести сравнения ячеек (34, 19) и (33, 26), если вторая не превышает или равна первой то написать слого "годен". Если же первышает то "негоден"

П.С. Название кнопок рабочее Улыбка
П.С.2 В VBA не силен, потому написал кода как знал, может что посоветуете для упрощения кода  Улыбка
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #5 : 31.10.2019, 11:37:56 »

Код для кнопки:
Код: (vb)
Private Sub CommandButton2_Click()
    Dim s$, stxt$, dblNum#
    'получаем текст(...бар)
    s = Cells(15, 6).Value
    stxt = Extract_Number_from_Text(s, 1)
    Cells(34,28).Value = stxt
    'получаем число (0,2)
    s = Cells(17, 12).Value
    dblNum = CDbl(Extract_Number_from_Text(s, 0))
    Cells(33, 26).Value = dblNum
End Sub


Чтобы заработало надо код из статьи, на которую я давал ссылку поместить в стандартный модуль(можно, конечно, и в модуль этой же формы, но тогда функция будет доступна исключительно из этой формы). Вот этот код нужно было использовать целиком:
Код: (vb)
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

На всякий случай приложил книгу12 с этими кодами.
С п.3. попробуйте самостоятельно, т.к. в моем файле ячейка (34, 19) почему-то пустая и сравнивать неясно что вообще. Но по логике продолжение кода для кнопки должно быть таким:
Код: (vb)
    If dblNum <= Cells(34, 19).Value Then
        Cells(36, 24).Value = "годен"
    Else
        Cells(36, 24).Value = "не годен"
    End If
« Последнее редактирование: 31.10.2019, 11:44:46 от Дмитрий Щербаков(The_Prist) » Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Fokin
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 5


Просмотр профиля E-mail
« Ответ #6 : 31.10.2019, 17:50:32 »

Дмитрий Щербаков(The_Prist) Спасибо за написание кода  Улыбка
Немножко подправил код и все записывает в нужные для меня ячейки. Но столкнулся с проблемой, когда отделяем текстовую часто, то в ячейку записывает знаки +/- и точки ... а нужно только буквы как пример бар, МПа и ºС. Это можно как-то исправить?)
В приложеном файле на листе "5 - " результат работы макросов
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #7 : 31.10.2019, 18:04:00 »

Используйте функцию Replace для удаление всего лишнего. Применять к результату:
Код: (vb)
stxt = Extract_Number_from_Text(s, 1)  
Cells(34,28).Value = Replace(stxt, chr(133),"")

Дело в том, что у Вас там не просто три точки, а спец.символ троеточия - "…". Ну или как вариант изменить функцию таким образом, чтобы она всегда брала только текст, без всяких знаков препинания и пробелов:
Код: (vb)
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 LCase(sSymbol) Like "*[а-яёйa-z]*" Then
                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
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Fokin
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 5


Просмотр профиля E-mail
« Ответ #8 : 01.11.2019, 14:14:20 »

Спасибо! Реализовал через функцию Replace.
Появились новые проблемки:
Код: (vb)
                    Dim s$, stxt$, dblNum#
                    'получаем текст(...бар)
                    s = Cells(15, 6).Value
                    stxt = Extract_Number_from_Text(s, 1)
                    Cells(34, 28) = stxt
               
                    'получаем число(0, 2)
                    s = Cells(17, 12).Value
                    dblNum = CDbl(Extract_Number_from_Text(s, 0))
                    Cells(33, 24) = dblNum
                    With Cells(33, 24).Font
                                .ThemeColor = xlThemeColorDark1
                                .TintAndShade = 0
                        End With
                    If Cells(33, 26) <= Cells(33, 24).Value Then
                        Cells(36, 24).Value = "годен"
                    Else
                        Cells(36, 24).Value = "не годен"
                    End If
                    stxt = Extract_Number_from_Text(s, 1)
                    'удаление ненужных знаков
                    Cells(34, 28).Value = Replace(stxt, Chr(133), "")
                    Cells(34, 28).Value = Replace(stxt, Chr(177), "")

1) В Cells(34, 28) подтягиевает текстовую часть с Cells(17, 12), а должно с Cells(15, 6). Без функции Replace все работает правильно.
2) При сравнении показаний Cells(33, 26) <= Cells(33, 24), если числа однаковые то пишет "не годен" вместо "годен"
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #9 : 01.11.2019, 14:36:26 »

Ну Вы хоть чуточку логику включайте, когда что-то делаете Улыбка
Без функции Replace все работает правильно
не в ней дело, а в том, что Вы лишнее пихаете туда, где оно не нужно и не пытаетесь проследить за последовательностью действий кода
Код: (vb)
stxt = Extract_Number_from_Text(s, 1) 'ну и зачем эта строка Вам? Текст вытащили выше, а здесь в переменной s уже значение как раз из Cells(17, 12)
'удаление ненужных знаков  
Cells(34, 28).Value = Replace(stxt, Chr(133), "")  'здесь удалили из stxt
Cells(34, 28).Value = Replace(stxt, Chr(177), "")  'и здесь тоже. Значит в итоге только эта строка работает

а вот так правильно(без первой строки вообще):
Код: (vb)
stxt = Replace(stxt, Chr(133), "")
Cells(34, 28).Value = Replace(stxt, Chr(177), "")

Вы же сами здесь записываете именно текст в Cells(34,28). А теперь проследите, какое значение для переменной s берется в этот момент. Зачем Вы повторно извлекаете данные функцией? Они выше все получены в stxt


если числа однаковые то пишет "не годен" вместо "годен"
и в чем проблема убрать знак равно в этой части или переделать как Вам надо?
Код: (vb)
If Cells(33, 26) <= Cells(33, 24).Value Then

Ну а вообще, скорее всего значения там не равны. Вариантов несколько:
1. В одной ячейке текст, а в другой число
2. Кол-во знаков после запятой в ячейках либо различается, либо сами значения после запятой отличаются. Без примера файла конкретно сказать ничего нельзя.
« Последнее редактирование: 01.11.2019, 16:17:07 от Дмитрий Щербаков(The_Prist) » Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Артур-Артур
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 1


Просмотр профиля E-mail
« Ответ #10 : 26.04.2021, 13:29:43 »

Добрый день. Я здесь впервые. Пожалуйста помогите разобраться. Использую функцию "Extract_Number_from_Text".
0,0600000000000022 превращает в 6,00000000000022-02 и дальше не могу округлить ее. Функция ОКРУГЛ дает ошибку.

 
« Последнее редактирование: 26.04.2021, 13:33:12 от Артур-Артур » Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #11 : 26.04.2021, 19:29:51 »

Ну и Вам тоже самое, что и выше: без файла примера гадать как-то не хочется. Может у Вас в ячейке именно такие значения и записаны, но форматом скрыты...
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru