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

Вход

Регистрация

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

 

= Мир MS Excel/Сложности с копированием/извлечением части ячейки - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сложности с копированием/извлечением части ячейки (Макросы/Sub)
Сложности с копированием/извлечением части ячейки
Nozomi_yoshi Дата: Пятница, 30.10.2015, 15:51 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Добрый день, уважаемые форумчане!
Хочу обратиться к вам за помощью.
Не знаю, в том ли разделе размещаю вопрос, но тем не менее.

Итак, есть диапазон ячеек, содержащих развернутые текстовые описания продукции. Это выгрузка из таможенной базы, поэтому текст каждой ячейки уникален. Но встречаются одинаковые части. В частности, в каждой имеется указание на количество поставленной продукции. Это выглядит так: 1 шт либо кол-во - 1шт, колво 1шт. Т.е. написание может быть различным.
Мне необходимо извлечь как раз данные о количестве из каждой из ячеек. Можно ли как-то привязаться к слову "колво" или "шт"?
Заранее благодарна за советы!
К сообщению приложен файл: 1153267.xls (55.5 Kb)


Сообщение отредактировал Nozomi_yoshi - Пятница, 30.10.2015, 15:56
 
Ответить
СообщениеДобрый день, уважаемые форумчане!
Хочу обратиться к вам за помощью.
Не знаю, в том ли разделе размещаю вопрос, но тем не менее.

Итак, есть диапазон ячеек, содержащих развернутые текстовые описания продукции. Это выгрузка из таможенной базы, поэтому текст каждой ячейки уникален. Но встречаются одинаковые части. В частности, в каждой имеется указание на количество поставленной продукции. Это выглядит так: 1 шт либо кол-во - 1шт, колво 1шт. Т.е. написание может быть различным.
Мне необходимо извлечь как раз данные о количестве из каждой из ячеек. Можно ли как-то привязаться к слову "колво" или "шт"?
Заранее благодарна за советы!

Автор - Nozomi_yoshi
Дата добавления - 30.10.2015 в 15:51
МВТ Дата: Пятница, 30.10.2015, 16:28 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 476
Репутация: 137 ±
Замечаний: 0% ±

Excel 2007
Вот эта UDF вытягивает количество по номеру вхождения, но без привязки к названию товара[vba]
Код
Option Explicit
Function Cnt(Text As String, Number As Long)
Dim Obj As Object
With CreateObject("VBScript.RegExp")
    .Global = True
    .Ignorecase = True
    .Pattern = "(\d+)(?= *?шт)"
    If .test(Text) Then
        Set Obj = .Execute(Text)
        If Number <= Obj.Count Then Cnt = Obj(Number - 1).Submatches(0)
    End If
End With
End Function
[/vba]
 
Ответить
СообщениеВот эта UDF вытягивает количество по номеру вхождения, но без привязки к названию товара[vba]
Код
Option Explicit
Function Cnt(Text As String, Number As Long)
Dim Obj As Object
With CreateObject("VBScript.RegExp")
    .Global = True
    .Ignorecase = True
    .Pattern = "(\d+)(?= *?шт)"
    If .test(Text) Then
        Set Obj = .Execute(Text)
        If Number <= Obj.Count Then Cnt = Obj(Number - 1).Submatches(0)
    End If
End With
End Function
[/vba]

Автор - МВТ
Дата добавления - 30.10.2015 в 16:28
Nozomi_yoshi Дата: Суббота, 31.10.2015, 17:33 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
МВТ, спасибо!
Вставила, начала крутить, но пока не получается
При выводе этой функции в поле text ставим номер соответствующей ячейки, а что в поле Number?
Если номер вхождения, то ведь сложность в том, что в каждой ячейке искомое значение стоит в разном месте.
В любом случае пока, что бы не подставляла в поле Number, формула не срабатывает. Может я что-то не так сделала при вставке UDF? Я впервые это делала.
Не покажете на примере ячеек в файле из моего первого сообщения?


Сообщение отредактировал Nozomi_yoshi - Суббота, 31.10.2015, 17:46
 
Ответить
СообщениеМВТ, спасибо!
Вставила, начала крутить, но пока не получается
При выводе этой функции в поле text ставим номер соответствующей ячейки, а что в поле Number?
Если номер вхождения, то ведь сложность в том, что в каждой ячейке искомое значение стоит в разном месте.
В любом случае пока, что бы не подставляла в поле Number, формула не срабатывает. Может я что-то не так сделала при вставке UDF? Я впервые это делала.
Не покажете на примере ячеек в файле из моего первого сообщения?

Автор - Nozomi_yoshi
Дата добавления - 31.10.2015 в 17:33
sv2014 Дата: Суббота, 31.10.2015, 19:05 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 226
Репутация: 61 ±
Замечаний: 0% ±

Excel 2013
Nozomi_yoshi, добрый день, протестируйте макрос , в файл-примере кнопки,test и очистить

[vba]
Код
Sub test()
   Dim objMatch As Object, j%, i%, i1%
   i1 = Range("B" & Cells.Rows.Count).End(xlUp).Row
With CreateObject("VBScript.RegExp"): .Global = True: .ignoreCase = True
    .Pattern = "(\d+)(?= *?шт)"
For i = 2 To i1
    j = 0
   If .test(Range("B" & i)) Then
    For Each objMatch In .Execute(Range("B" & i))
    j = j + 1
         Range("B" & i).Offset(, j) = objMatch.SubMatches(0)
        Next
   End If
  Next
End With
End Sub
[/vba]
К сообщению приложен файл: example_1_11_20.xls (55.5 Kb)


Сообщение отредактировал sv2014 - Суббота, 31.10.2015, 19:07
 
Ответить
СообщениеNozomi_yoshi, добрый день, протестируйте макрос , в файл-примере кнопки,test и очистить

[vba]
Код
Sub test()
   Dim objMatch As Object, j%, i%, i1%
   i1 = Range("B" & Cells.Rows.Count).End(xlUp).Row
With CreateObject("VBScript.RegExp"): .Global = True: .ignoreCase = True
    .Pattern = "(\d+)(?= *?шт)"
For i = 2 To i1
    j = 0
   If .test(Range("B" & i)) Then
    For Each objMatch In .Execute(Range("B" & i))
    j = j + 1
         Range("B" & i).Offset(, j) = objMatch.SubMatches(0)
        Next
   End If
  Next
End With
End Sub
[/vba]

Автор - sv2014
Дата добавления - 31.10.2015 в 19:05
МВТ Дата: Суббота, 31.10.2015, 19:55 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 476
Репутация: 137 ±
Замечаний: 0% ±

Excel 2007
Nozomi_yoshi, в поле Text подставляется текст или ссылка на ячейку, в которой он содержится, а номер вхождения - это как раз Number. Что касается того, что искомые данные стоят на разных местах, то ответ дан согласно того, как Вы сформулировали задачу. Есть какой-то способ привязки, например, по наименованию товара?
UPD держите другую. Text - это текст или ссылка на ячейку, где Вы проводите поиск, FindText - наименование оборудования, количество которого Вы ищите, но с учетом того хаоса, что творится у Вас в ячейках, возможны неточности, если Вы будете неточно обозначать оборудование. Пробуйте [vba]
Код
Option Explicit
Function Cnt(Text As String, FindText As String)
With CreateObject("VBScript.RegExp")
    .Global = True
    .Ignorecase = True
    .Pattern = "(?:" & FindText & ".*?)(\d+)(?= *?шт)"
    If .test(Text) Then Cnt = .Execute(Text)(0).Submatches(0)
End With
End Function
[/vba]


Сообщение отредактировал МВТ - Суббота, 31.10.2015, 20:14
 
Ответить
СообщениеNozomi_yoshi, в поле Text подставляется текст или ссылка на ячейку, в которой он содержится, а номер вхождения - это как раз Number. Что касается того, что искомые данные стоят на разных местах, то ответ дан согласно того, как Вы сформулировали задачу. Есть какой-то способ привязки, например, по наименованию товара?
UPD держите другую. Text - это текст или ссылка на ячейку, где Вы проводите поиск, FindText - наименование оборудования, количество которого Вы ищите, но с учетом того хаоса, что творится у Вас в ячейках, возможны неточности, если Вы будете неточно обозначать оборудование. Пробуйте [vba]
Код
Option Explicit
Function Cnt(Text As String, FindText As String)
With CreateObject("VBScript.RegExp")
    .Global = True
    .Ignorecase = True
    .Pattern = "(?:" & FindText & ".*?)(\d+)(?= *?шт)"
    If .test(Text) Then Cnt = .Execute(Text)(0).Submatches(0)
End With
End Function
[/vba]

Автор - МВТ
Дата добавления - 31.10.2015 в 19:55
Nozomi_yoshi Дата: Суббота, 31.10.2015, 20:42 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
sv2014, заработало!!!!! hands hands hands Ураааа! Спасибо!
 
Ответить
Сообщениеsv2014, заработало!!!!! hands hands hands Ураааа! Спасибо!

Автор - Nozomi_yoshi
Дата добавления - 31.10.2015 в 20:42
Nozomi_yoshi Дата: Суббота, 31.10.2015, 22:33 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
МВТ, прошу прощения, да, я,видимо, действительно некорректно сформулировала вопрос. Замечательно, что вышеприведенный макрос сработал.
Спасибо Вам за совет и потраченное время.
 
Ответить
Сообщение МВТ, прошу прощения, да, я,видимо, действительно некорректно сформулировала вопрос. Замечательно, что вышеприведенный макрос сработал.
Спасибо Вам за совет и потраченное время.

Автор - Nozomi_yoshi
Дата добавления - 31.10.2015 в 22:33
sv2014 Дата: Суббота, 31.10.2015, 23:00 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 226
Репутация: 61 ±
Замечаний: 0% ±

Excel 2013
Nozomi_yoshi, добрый вечер,в файл-примере сделал две кнопки для моего макроса и кнопку ,которая заносит
функцию от MBT в диапазон переменного размера,используя вспомогательную функцию Number
переименовал функцию MBT,добавив к названию 1,иначе макрос не работает.

[vba]
Код
Sub example2()
Dim j%, i%, i1%
i1 = Range("B" & Cells.Rows.Count).End(xlUp).Row
For i = 2 To i1
For j = 1 To Number(Range("B" & i))
    Range("B" & i).Offset(, j).Formula = "=Cint1(B" & i & "," & j & ")"
Next
Next
End Sub
[/vba]

[vba]
Код
Function Number%(Text As String)
Dim obj As Object
With CreateObject("VBScript.RegExp")
    .Global = True
    .Ignorecase = True
    .Pattern = "(\d+)(?= *?øò)"
    If .test(Text) Then
        Set obj = .Execute(Text)
      Number = obj.Count
    End If
End With
End Function
[/vba]

[vba]
Код
Function Cint1(Text As String, Number As Long)
Dim obj As Object
With CreateObject("VBScript.RegExp")
    .Global = True
    .Ignorecase = True
    .Pattern = "(\d+)(?= *?øò)"
    If .test(Text) Then
        Set obj = .Execute(Text)
        If Number <= obj.Count Then Cint1 = obj(Number - 1).Submatches(0)
    End If
End Function
[/vba]
К сообщению приложен файл: example_2_11_20.xls (61.5 Kb)
 
Ответить
СообщениеNozomi_yoshi, добрый вечер,в файл-примере сделал две кнопки для моего макроса и кнопку ,которая заносит
функцию от MBT в диапазон переменного размера,используя вспомогательную функцию Number
переименовал функцию MBT,добавив к названию 1,иначе макрос не работает.

[vba]
Код
Sub example2()
Dim j%, i%, i1%
i1 = Range("B" & Cells.Rows.Count).End(xlUp).Row
For i = 2 To i1
For j = 1 To Number(Range("B" & i))
    Range("B" & i).Offset(, j).Formula = "=Cint1(B" & i & "," & j & ")"
Next
Next
End Sub
[/vba]

[vba]
Код
Function Number%(Text As String)
Dim obj As Object
With CreateObject("VBScript.RegExp")
    .Global = True
    .Ignorecase = True
    .Pattern = "(\d+)(?= *?øò)"
    If .test(Text) Then
        Set obj = .Execute(Text)
      Number = obj.Count
    End If
End With
End Function
[/vba]

[vba]
Код
Function Cint1(Text As String, Number As Long)
Dim obj As Object
With CreateObject("VBScript.RegExp")
    .Global = True
    .Ignorecase = True
    .Pattern = "(\d+)(?= *?øò)"
    If .test(Text) Then
        Set obj = .Execute(Text)
        If Number <= obj.Count Then Cint1 = obj(Number - 1).Submatches(0)
    End If
End Function
[/vba]

Автор - sv2014
Дата добавления - 31.10.2015 в 23:00
Nozomi_yoshi Дата: Воскресенье, 01.11.2015, 21:29 | Сообщение № 9
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
sv2014, спасибо еще раз.
Теперь, насколько я вижу, и формула и макрос работают идентично?
 
Ответить
Сообщение sv2014, спасибо еще раз.
Теперь, насколько я вижу, и формула и макрос работают идентично?

Автор - Nozomi_yoshi
Дата добавления - 01.11.2015 в 21:29
sv2014 Дата: Воскресенье, 01.11.2015, 22:40 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 226
Репутация: 61 ±
Замечаний: 0% ±

Excel 2013
Nozomi_yoshi, добрый вечер,здесь ,на форуме ,практически в каждой теме имеется дилемма:пользоваться макросом или
функцией,-кому,что больше подходит,-по-моему очень удобно заносить кнопкой функцию во все ячейки,можно и вручную все делать,попробуйте как удобней.
Удачи Вам.
 
Ответить
СообщениеNozomi_yoshi, добрый вечер,здесь ,на форуме ,практически в каждой теме имеется дилемма:пользоваться макросом или
функцией,-кому,что больше подходит,-по-моему очень удобно заносить кнопкой функцию во все ячейки,можно и вручную все делать,попробуйте как удобней.
Удачи Вам.

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

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