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

Вход

Регистрация

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

 

= Мир MS Excel/Найти часть предложения в ячейке - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Найти часть предложения в ячейке
Oh_Nick Дата: Понедельник, 14.08.2023, 16:42 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
У меня в ячейке каждый раз высвечиваются разные предложения, но все они содержат одну и ту же часть : Базовая ставка таможенной пошлины: + число (например Базовая ставка таможенной пошлины: 10%)

Помогите написать макрос, который по событию изменения предложений в ячейке D1 будет записывать эту часть, которую указал выше в ячейку B1. Например у нас в ячейке D1 появилось предложение : Части машин, агрегатов и оборудования прочие. 9: Части машин, агрегатов и оборудования прочие. Базовая ставка таможенной пошлины: 0, НДС, акциз, меры нетарифного регулирования. ТН ВЭД онлайн — товарная номенклатура внешнеэкономической , НДС

и как только оно появилось мы вставляем в ячейку B1 Базовая ставка таможенной пошлины: 0
 
Ответить
СообщениеУ меня в ячейке каждый раз высвечиваются разные предложения, но все они содержат одну и ту же часть : Базовая ставка таможенной пошлины: + число (например Базовая ставка таможенной пошлины: 10%)

Помогите написать макрос, который по событию изменения предложений в ячейке D1 будет записывать эту часть, которую указал выше в ячейку B1. Например у нас в ячейке D1 появилось предложение : Части машин, агрегатов и оборудования прочие. 9: Части машин, агрегатов и оборудования прочие. Базовая ставка таможенной пошлины: 0, НДС, акциз, меры нетарифного регулирования. ТН ВЭД онлайн — товарная номенклатура внешнеэкономической , НДС

и как только оно появилось мы вставляем в ячейку B1 Базовая ставка таможенной пошлины: 0

Автор - Oh_Nick
Дата добавления - 14.08.2023 в 16:42
Oh_Nick Дата: Понедельник, 14.08.2023, 16:50 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
Написал вот такой макрос, но он не очень удобен за счет того, что предложения каждый раз разные по символам + если брать количество символов, то он может обрезать число, т.к 0 пишется без знака % (например Базовая ставка таможенной пошлины: 0 , но Базовая ставка таможенной пошлины: 10%) и т.д

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("D1")) Is Nothing Then
        Dim cell As Range
        
        Set cell = Range("D1").Find("Базовая ставка таможенной пошлины:*")
        
        If Not cell Is Nothing Then
            Range("B1").Value = Mid(cell.Value, InStr(cell.Value, ":") + 48, 38)
        Else
            Range("B1").Value = "Отрезок не найден"
        End If
    End If
End Sub
[/vba]
 
Ответить
СообщениеНаписал вот такой макрос, но он не очень удобен за счет того, что предложения каждый раз разные по символам + если брать количество символов, то он может обрезать число, т.к 0 пишется без знака % (например Базовая ставка таможенной пошлины: 0 , но Базовая ставка таможенной пошлины: 10%) и т.д

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("D1")) Is Nothing Then
        Dim cell As Range
        
        Set cell = Range("D1").Find("Базовая ставка таможенной пошлины:*")
        
        If Not cell Is Nothing Then
            Range("B1").Value = Mid(cell.Value, InStr(cell.Value, ":") + 48, 38)
        Else
            Range("B1").Value = "Отрезок не найден"
        End If
    End If
End Sub
[/vba]

Автор - Oh_Nick
Дата добавления - 14.08.2023 в 16:50
Oh_Nick Дата: Понедельник, 14.08.2023, 16:52 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
Еще один нюанс: у меня в ячейке D1 формула, которая выдает это предложение, а этот макрос считает только текст. Как это можно обойти?
 
Ответить
СообщениеЕще один нюанс: у меня в ячейке D1 формула, которая выдает это предложение, а этот макрос считает только текст. Как это можно обойти?

Автор - Oh_Nick
Дата добавления - 14.08.2023 в 16:52
MikeVol Дата: Понедельник, 14.08.2023, 17:32 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 345
Репутация: 66 ±
Замечаний: 0% ±

Excel LTSC 2021 EN
Oh_Nick, И вам Здрасьте. Может так:
[vba]
Код

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("D1")) Is Nothing Then
        Dim cell    As Range: Set cell = Range("D1").Find("Базовая ставка таможенной пошлины:*")
        
        ' Вычисляем значение формулы
        Dim formulaResult As Variant: formulaResult = Application.Evaluate(Range("D1").Formula)

        If Not cell Is Nothing Then
            Range("B1").Value = Mid(formulaResult, InStr(formulaResult, ":") + 48, 38)
        Else
            Range("B1").Value = "Отрезок не найден"
        End If
    
    End If

End Sub
[/vba]
Не проверено на файле, проверяйте.


Ученик.
 
Ответить
СообщениеOh_Nick, И вам Здрасьте. Может так:
[vba]
Код

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("D1")) Is Nothing Then
        Dim cell    As Range: Set cell = Range("D1").Find("Базовая ставка таможенной пошлины:*")
        
        ' Вычисляем значение формулы
        Dim formulaResult As Variant: formulaResult = Application.Evaluate(Range("D1").Formula)

        If Not cell Is Nothing Then
            Range("B1").Value = Mid(formulaResult, InStr(formulaResult, ":") + 48, 38)
        Else
            Range("B1").Value = "Отрезок не найден"
        End If
    
    End If

End Sub
[/vba]
Не проверено на файле, проверяйте.

Автор - MikeVol
Дата добавления - 14.08.2023 в 17:32
Oh_Nick Дата: Понедельник, 14.08.2023, 19:48 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
MikeVol, не получилось

Файл приложил.
К сообщению приложен файл: hyperl_1.xlsm (24.1 Kb)
 
Ответить
СообщениеMikeVol, не получилось

Файл приложил.

Автор - Oh_Nick
Дата добавления - 14.08.2023 в 19:48
MikeVol Дата: Понедельник, 14.08.2023, 21:49 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 345
Репутация: 66 ±
Замечаний: 0% ±

Excel LTSC 2021 EN
у меня в ячейке D1 формула, которая выдает это предложение

И где эта формула в файле? Файл пример не годится! Ну а так исходя из того что я увидил в вашем фале, то вот следуйщий код:
[vba]
Код
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    
    If Not Intersect(Target, Range("D1")) Is Nothing Then
        Dim cellValue As String: cellValue = Range("D1").Value
        Dim cell    As Range: Set cell = Range("D1").Find("Базовая ставка таможенной пошлины:*")

        If Not cell Is Nothing Then
            Range("B1").Value = Mid(cellValue, InStr(cellValue, ":") + 48, 36)
        Else
            Range("B1").Value = "Отрезок не найден"
        End If
    
    End If

End Sub
[/vba]
Выдаёт ответ: Базовая ставка таможенной пошлины: 0


Ученик.
 
Ответить
Сообщение
у меня в ячейке D1 формула, которая выдает это предложение

И где эта формула в файле? Файл пример не годится! Ну а так исходя из того что я увидил в вашем фале, то вот следуйщий код:
[vba]
Код
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    
    If Not Intersect(Target, Range("D1")) Is Nothing Then
        Dim cellValue As String: cellValue = Range("D1").Value
        Dim cell    As Range: Set cell = Range("D1").Find("Базовая ставка таможенной пошлины:*")

        If Not cell Is Nothing Then
            Range("B1").Value = Mid(cellValue, InStr(cellValue, ":") + 48, 36)
        Else
            Range("B1").Value = "Отрезок не найден"
        End If
    
    End If

End Sub
[/vba]
Выдаёт ответ: Базовая ставка таможенной пошлины: 0

Автор - MikeVol
Дата добавления - 14.08.2023 в 21:49
Oh_Nick Дата: Вторник, 15.08.2023, 08:22 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
MikeVol, приложил с формулой, ничего не происходит
К сообщению приложен файл: 3752921.xlsm (24.0 Kb)
 
Ответить
СообщениеMikeVol, приложил с формулой, ничего не происходит

Автор - Oh_Nick
Дата добавления - 15.08.2023 в 08:22
Oh_Nick Дата: Вторник, 15.08.2023, 10:30 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
Попробовал вот такой вариант, но почему то снова не хочет ничего:

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("D1")) Is Nothing Then
        Dim cell As Range
        
        Set cell = Range("D1").Find("Базовая ставка таможенной пошлины:*")
        
        If Not cell Is Nothing Then
            Range("B1").Value = Trim(Left(cell.Value, Len(cell.Value) - Len(Split(cell.Value, ":")(0)))) 'извлечение числа после двоеточия
            
            If IsNumeric(Range("B1").Value) Then
                Range("B1").Value = Range("B1").Value & "%"
            End If
        Else
            Range("B1").Value = "Отрезок не найден"
        End If
    End If
End Sub
[/vba]
К сообщению приложен файл: 8458897.xlsm (24.5 Kb)
 
Ответить
СообщениеПопробовал вот такой вариант, но почему то снова не хочет ничего:

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("D1")) Is Nothing Then
        Dim cell As Range
        
        Set cell = Range("D1").Find("Базовая ставка таможенной пошлины:*")
        
        If Not cell Is Nothing Then
            Range("B1").Value = Trim(Left(cell.Value, Len(cell.Value) - Len(Split(cell.Value, ":")(0)))) 'извлечение числа после двоеточия
            
            If IsNumeric(Range("B1").Value) Then
                Range("B1").Value = Range("B1").Value & "%"
            End If
        Else
            Range("B1").Value = "Отрезок не найден"
        End If
    End If
End Sub
[/vba]

Автор - Oh_Nick
Дата добавления - 15.08.2023 в 10:30
mgt Дата: Вторник, 15.08.2023, 11:18 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 101
Репутация: 25 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim s$
    s = Range("d1").Text
    If InStr(1, s, "Базовая ставка таможенной пошлины:") > 0 Then
        Range("B1").Value = Val(Left(Right(s, Len(s) - InStr(1, s, "Базовая ставка таможенной пошлины:") - 33), _
        InStr(1, Right(s, Len(s) - InStr(1, s, "Базовая ставка таможенной пошлины:") - 33), ",") - 1))
    Else
        Range("B1").Value = "not found"
    End If
End Sub
[/vba]


Сообщение отредактировал mgt - Вторник, 15.08.2023, 11:20
 
Ответить
Сообщение[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim s$
    s = Range("d1").Text
    If InStr(1, s, "Базовая ставка таможенной пошлины:") > 0 Then
        Range("B1").Value = Val(Left(Right(s, Len(s) - InStr(1, s, "Базовая ставка таможенной пошлины:") - 33), _
        InStr(1, Right(s, Len(s) - InStr(1, s, "Базовая ставка таможенной пошлины:") - 33), ",") - 1))
    Else
        Range("B1").Value = "not found"
    End If
End Sub
[/vba]

Автор - mgt
Дата добавления - 15.08.2023 в 11:18
Oh_Nick Дата: Вторник, 15.08.2023, 11:44 | Сообщение № 10
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
mgt, вообще выдает debug и закрывает файл...
К сообщению приложен файл: 4447288.xlsm (21.9 Kb)
 
Ответить
Сообщениеmgt, вообще выдает debug и закрывает файл...

Автор - Oh_Nick
Дата добавления - 15.08.2023 в 11:44
Pelena Дата: Вторник, 15.08.2023, 11:55 | Сообщение № 11
Группа: Админы
Ранг: Местный житель
Сообщений: 19331
Репутация: 4482 ±
Замечаний: ±

Excel 365 & Mac Excel
Посмотрите такой вариант
К сообщению приложен файл: 5994920.xlsm (23.5 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеПосмотрите такой вариант

Автор - Pelena
Дата добавления - 15.08.2023 в 11:55
mgt Дата: Вторник, 15.08.2023, 12:00 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 101
Репутация: 25 ±
Замечаний: 0% ±

Excel 2010
mgt, вообще выдает debug и закрывает файл...

Открыл ваше вложение, вставил код в А1 (например 7201101100), в B1 появился размер пошлины.


Сообщение отредактировал mgt - Вторник, 15.08.2023, 12:01
 
Ответить
Сообщение
mgt, вообще выдает debug и закрывает файл...

Открыл ваше вложение, вставил код в А1 (например 7201101100), в B1 появился размер пошлины.

Автор - mgt
Дата добавления - 15.08.2023 в 12:00
MikeVol Дата: Вторник, 15.08.2023, 12:26 | Сообщение № 13
Группа: Проверенные
Ранг: Обитатель
Сообщений: 345
Репутация: 66 ±
Замечаний: 0% ±

Excel LTSC 2021 EN
Oh_Nick, Кстатите, если вставите в A1 7326909409 то в B1 появляется значение 10 это и есть сегодняшняя ставка по сайту. Код из поста #9 от mgt, рабочий.


Ученик.
 
Ответить
СообщениеOh_Nick, Кстатите, если вставите в A1 7326909409 то в B1 появляется значение 10 это и есть сегодняшняя ставка по сайту. Код из поста #9 от mgt, рабочий.

Автор - MikeVol
Дата добавления - 15.08.2023 в 12:26
Oh_Nick Дата: Вторник, 15.08.2023, 12:32 | Сообщение № 14
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
Pelena, работает, спасибо!
 
Ответить
СообщениеPelena, работает, спасибо!

Автор - Oh_Nick
Дата добавления - 15.08.2023 в 12:32
Oh_Nick Дата: Вторник, 15.08.2023, 13:48 | Сообщение № 15
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
Pelena, а если у меня в колонке несколько кодов, я могу писать так или это неверно? А то я написал и у меня везде высветилось *Отрезок не найден*

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("E2:E350")) Is Nothing Then
        Application.EnableEvents = False
        frm = Range("P2:P350").Text
        If frm <> "" Then
            If InStr(frm, "Базовая ставка таможенной пошлины:") > 0 Then
                frm = Mid(frm, InStr(frm, "Базовая ставка таможенной пошлины:") + Len("Базовая ставка таможенной пошлины:"))
            Else
                Range("F2:F350").Value = "Нет данных"
            End If

            Range("F2:F350").Value = Trim(Split(frm, ",")(0))    'извлечение числа после двоеточия до запятой

            If Range("F2:F350").Value = "" Then Range("F2:F350").Value = "Нет данных"
            
        Else
            Range("F2:F350").Value = "Отрезок не найден"
        End If
        Application.EnableEvents = True
    End If
End Sub
[/vba]
 
Ответить
СообщениеPelena, а если у меня в колонке несколько кодов, я могу писать так или это неверно? А то я написал и у меня везде высветилось *Отрезок не найден*

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("E2:E350")) Is Nothing Then
        Application.EnableEvents = False
        frm = Range("P2:P350").Text
        If frm <> "" Then
            If InStr(frm, "Базовая ставка таможенной пошлины:") > 0 Then
                frm = Mid(frm, InStr(frm, "Базовая ставка таможенной пошлины:") + Len("Базовая ставка таможенной пошлины:"))
            Else
                Range("F2:F350").Value = "Нет данных"
            End If

            Range("F2:F350").Value = Trim(Split(frm, ",")(0))    'извлечение числа после двоеточия до запятой

            If Range("F2:F350").Value = "" Then Range("F2:F350").Value = "Нет данных"
            
        Else
            Range("F2:F350").Value = "Отрезок не найден"
        End If
        Application.EnableEvents = True
    End If
End Sub
[/vba]

Автор - Oh_Nick
Дата добавления - 15.08.2023 в 13:48
Pelena Дата: Вторник, 15.08.2023, 14:03 | Сообщение № 16
Группа: Админы
Ранг: Местный житель
Сообщений: 19331
Репутация: 4482 ±
Замечаний: ±

Excel 365 & Mac Excel
Нет, вы же всё равно одну ячейку анализируете.
Тогда надо примерно так
[vba]
Код
        frm = Cells(Target.Row,"P").Text
        If frm <> "" Then
            If InStr(frm, "Базовая ставка таможенной пошлины:") > 0 Then
                frm = Mid(frm, InStr(frm, "Базовая ставка таможенной пошлины:") + Len("Базовая ставка таможенной пошлины:"))
            Else
                Cells(Target.Row,"F") = "Нет данных"
            End If

           Cells(Target.Row,"F").Value = Trim(Split(frm, ",")(0))    'извлечение числа после двоеточия до запятой

            If Cells(Target.Row,"F").Value = "" Then Cells(Target.Row,"F").Value = "Нет данных"
            
        Else
            Cells(Target.Row,"F").Value = "Отрезок не найден"
        End If
[/vba]
А если в Target сразу несколько ячеек, то нужен цикл типа For Each cell In Target


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеНет, вы же всё равно одну ячейку анализируете.
Тогда надо примерно так
[vba]
Код
        frm = Cells(Target.Row,"P").Text
        If frm <> "" Then
            If InStr(frm, "Базовая ставка таможенной пошлины:") > 0 Then
                frm = Mid(frm, InStr(frm, "Базовая ставка таможенной пошлины:") + Len("Базовая ставка таможенной пошлины:"))
            Else
                Cells(Target.Row,"F") = "Нет данных"
            End If

           Cells(Target.Row,"F").Value = Trim(Split(frm, ",")(0))    'извлечение числа после двоеточия до запятой

            If Cells(Target.Row,"F").Value = "" Then Cells(Target.Row,"F").Value = "Нет данных"
            
        Else
            Cells(Target.Row,"F").Value = "Отрезок не найден"
        End If
[/vba]
А если в Target сразу несколько ячеек, то нужен цикл типа For Each cell In Target

Автор - Pelena
Дата добавления - 15.08.2023 в 14:03
Oh_Nick Дата: Вторник, 15.08.2023, 14:17 | Сообщение № 17
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
Pelena, понял, спасибо! Но теперь я столкнулся с другой проблемой, проверял коды и вдруг высветилось вот так (скриншот приложил). С чем это может быть связано?
К сообщению приложен файл: 6334005.jpg (8.9 Kb)
 
Ответить
СообщениеPelena, понял, спасибо! Но теперь я столкнулся с другой проблемой, проверял коды и вдруг высветилось вот так (скриншот приложил). С чем это может быть связано?

Автор - Oh_Nick
Дата добавления - 15.08.2023 в 14:17
Pelena Дата: Вторник, 15.08.2023, 14:21 | Сообщение № 18
Группа: Админы
Ранг: Местный житель
Сообщений: 19331
Репутация: 4482 ±
Замечаний: ±

Excel 365 & Mac Excel
не вижу ничего на скриншоте.
Думаю, дело в исходном тексте


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщениене вижу ничего на скриншоте.
Думаю, дело в исходном тексте

Автор - Pelena
Дата добавления - 15.08.2023 в 14:21
Oh_Nick Дата: Вторник, 15.08.2023, 14:26 | Сообщение № 19
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
Pelena,

Вот, ввожу КОД ТН ВЭД и выдает вот так....
К сообщению приложен файл: 8115883.jpg (10.8 Kb)
 
Ответить
СообщениеPelena,

Вот, ввожу КОД ТН ВЭД и выдает вот так....

Автор - Oh_Nick
Дата добавления - 15.08.2023 в 14:26
Pelena Дата: Вторник, 15.08.2023, 14:54 | Сообщение № 20
Группа: Админы
Ранг: Местный житель
Сообщений: 19331
Репутация: 4482 ±
Замечаний: ±

Excel 365 & Mac Excel
Какой текст вы ищете? Есть ли в данных разделители, к которым привязан код? В предыдущем макросе это запятая.
Всё зависит от исходных данных


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеКакой текст вы ищете? Есть ли в данных разделители, к которым привязан код? В предыдущем макросе это запятая.
Всё зависит от исходных данных

Автор - Pelena
Дата добавления - 15.08.2023 в 14:54
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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