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

Вход

Регистрация

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

 

= Мир MS Excel/Помогите разбить диапазоны на отдельные ячейки. - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Помогите разбить диапазоны на отдельные ячейки.
m-lzp Дата: Вторник, 18.03.2014, 13:19 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
Нужно текстовую ячейку в эксель, содержащую диапазоны чисел (40, 41-45, 49-52) перевести в отдельные числа в каждой ячейке.
 
Ответить
СообщениеДобрый день.
Нужно текстовую ячейку в эксель, содержащую диапазоны чисел (40, 41-45, 49-52) перевести в отдельные числа в каждой ячейке.

Автор - m-lzp
Дата добавления - 18.03.2014 в 13:19
m-lzp Дата: Вторник, 18.03.2014, 13:19 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Вот пример.
К сообщению приложен файл: ___.xlsx (9.0 Kb)
 
Ответить
СообщениеВот пример.

Автор - m-lzp
Дата добавления - 18.03.2014 в 13:19
Hugo Дата: Вторник, 18.03.2014, 13:56 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3858
Репутация: 815 ±
Замечаний: 0% ±

365
Код
=Substring(ExpandListA(SubstringRev($B4,"№",1),",","-",,,,","),",",COLUMN()-4,COLUMN()-4)

[vba]
Код

Function Substring(Текст As String, Символ_разделитель As String, _
                     Начальный_Номер_фрагмента As Long, Конечный_Номер_фрагмента As Long) As String
'---------------------------------------------------------------------------------------
' URL : http://www.planetaexcel.ru/tip.php?aid=54
' Purpose : Выделяет из текста субстринг/и, ориентируясь по символам-разделителям
' Notes : Substring(текст; символ_разделитель; Начальный_Номер_фрагмента, Конечный_Номер_фрагмента), где
' текст - текст, который делим
' символ_разделитель - символ, который надо считать разделителем фрагментов
' Начальный_Номер_фрагмента - порядковый номер фрагмента, с которого нужна выборка
' Конечный_Номер_фрагмента - порядковый номер фрагмента, по который нужна выборка
'---------------------------------------------------------------------------------------
      On Error Resume Next
      Dim sArr() As String, li As Long
      sArr = Split(Application.Trim(Текст), Символ_разделитель)
      If Конечный_Номер_фрагмента > 0 Then
          Начальный_Номер_фрагмента = Начальный_Номер_фрагмента - 1
          Конечный_Номер_фрагмента = Конечный_Номер_фрагмента - 1
          For li = Начальный_Номер_фрагмента To Конечный_Номер_фрагмента
              Substring = IIf(li = Начальный_Номер_фрагмента, sArr(li), Substring & _
                     Символ_разделитель & sArr(li))
          Next li
      Else
          Substring = Split(Application.Trim(Текст), _
                            Символ_разделитель)(Начальный_Номер_фрагмента - 1)
      End If
End Function

Function ExpandListA(ByVal Src As String, _
                       Optional GrSep$ = ",", _
                       Optional InGrSep$ = "-", _
                       Optional DelChar1$ = " ", _
                       Optional DelChar2$ = " ", _
                       Optional DelChar3$ = " ", _
                       Optional outSep$ = "; ") As String
'http://www.planetaexcel.ru/forum.php?thread_id=19537
      Dim elem, aNums, j As Long, n1 As Long, n2 As Long

      Src = Replace(Src, DelChar1$, "")
      Src = Replace(Src, DelChar2$, "")
      Src = Replace(Src, DelChar3$, "")
      If Src = "" Then Exit Function
      For Each elem In Split(Src, GrSep)
          aNums = Split(elem, InGrSep)
          n1 = aNums(0)
          n2 = aNums(UBound(aNums))
          For j = n1 To n2 Step IIf(n1 < n2, 1, -1)
              ExpandListA = ExpandListA & outSep & j
          Next
      Next
      ExpandListA = Mid(ExpandListA, Len(outSep) + 1)
End Function

Function SubstringRev(Txt, Delimiter, N) As String
      Dim x As Variant
      x = Split(Txt, Delimiter)
      If N > 0 And N - 1 <= UBound(x) Then
          SubstringRev = x(UBound(x) - (N - 1))
      Else
          SubstringRev = ""
      End If
End Function
[/vba]
Формулу в ячейку E4 и тянуть вправо и вниз, а коды UDF в модуль этого файла или надстройки (у меня в надстройке).
Файл сейчас показать не могу.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
Сообщение
Код
=Substring(ExpandListA(SubstringRev($B4,"№",1),",","-",,,,","),",",COLUMN()-4,COLUMN()-4)

[vba]
Код

Function Substring(Текст As String, Символ_разделитель As String, _
                     Начальный_Номер_фрагмента As Long, Конечный_Номер_фрагмента As Long) As String
'---------------------------------------------------------------------------------------
' URL : http://www.planetaexcel.ru/tip.php?aid=54
' Purpose : Выделяет из текста субстринг/и, ориентируясь по символам-разделителям
' Notes : Substring(текст; символ_разделитель; Начальный_Номер_фрагмента, Конечный_Номер_фрагмента), где
' текст - текст, который делим
' символ_разделитель - символ, который надо считать разделителем фрагментов
' Начальный_Номер_фрагмента - порядковый номер фрагмента, с которого нужна выборка
' Конечный_Номер_фрагмента - порядковый номер фрагмента, по который нужна выборка
'---------------------------------------------------------------------------------------
      On Error Resume Next
      Dim sArr() As String, li As Long
      sArr = Split(Application.Trim(Текст), Символ_разделитель)
      If Конечный_Номер_фрагмента > 0 Then
          Начальный_Номер_фрагмента = Начальный_Номер_фрагмента - 1
          Конечный_Номер_фрагмента = Конечный_Номер_фрагмента - 1
          For li = Начальный_Номер_фрагмента To Конечный_Номер_фрагмента
              Substring = IIf(li = Начальный_Номер_фрагмента, sArr(li), Substring & _
                     Символ_разделитель & sArr(li))
          Next li
      Else
          Substring = Split(Application.Trim(Текст), _
                            Символ_разделитель)(Начальный_Номер_фрагмента - 1)
      End If
End Function

Function ExpandListA(ByVal Src As String, _
                       Optional GrSep$ = ",", _
                       Optional InGrSep$ = "-", _
                       Optional DelChar1$ = " ", _
                       Optional DelChar2$ = " ", _
                       Optional DelChar3$ = " ", _
                       Optional outSep$ = "; ") As String
'http://www.planetaexcel.ru/forum.php?thread_id=19537
      Dim elem, aNums, j As Long, n1 As Long, n2 As Long

      Src = Replace(Src, DelChar1$, "")
      Src = Replace(Src, DelChar2$, "")
      Src = Replace(Src, DelChar3$, "")
      If Src = "" Then Exit Function
      For Each elem In Split(Src, GrSep)
          aNums = Split(elem, InGrSep)
          n1 = aNums(0)
          n2 = aNums(UBound(aNums))
          For j = n1 To n2 Step IIf(n1 < n2, 1, -1)
              ExpandListA = ExpandListA & outSep & j
          Next
      Next
      ExpandListA = Mid(ExpandListA, Len(outSep) + 1)
End Function

Function SubstringRev(Txt, Delimiter, N) As String
      Dim x As Variant
      x = Split(Txt, Delimiter)
      If N > 0 And N - 1 <= UBound(x) Then
          SubstringRev = x(UBound(x) - (N - 1))
      Else
          SubstringRev = ""
      End If
End Function
[/vba]
Формулу в ячейку E4 и тянуть вправо и вниз, а коды UDF в модуль этого файла или надстройки (у меня в надстройке).
Файл сейчас показать не могу.

Автор - Hugo
Дата добавления - 18.03.2014 в 13:56
m-lzp Дата: Вторник, 18.03.2014, 15:36 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Уважаемый Hugo. Спасибо за ответ. Но не могу разобраться с макросом, почему-то не работает. Пришлите пример, пожалуйста.
 
Ответить
СообщениеУважаемый Hugo. Спасибо за ответ. Но не могу разобраться с макросом, почему-то не работает. Пришлите пример, пожалуйста.

Автор - m-lzp
Дата добавления - 18.03.2014 в 15:36
shurikus Дата: Вторник, 18.03.2014, 15:48 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 198
Репутация: 44 ±
Замечаний: 0% ±

Excel 2007
Нажимаете Alt+F11, открывается VB, вставляете модуль, данный уважаемым Hugo, закрываете редактор, в нужную ячейку вбиваете формулу и растягиваете ее на необходимый диапазон.
К сообщению приложен файл: m-lzp.xlsm (18.1 Kb)
 
Ответить
СообщениеНажимаете Alt+F11, открывается VB, вставляете модуль, данный уважаемым Hugo, закрываете редактор, в нужную ячейку вбиваете формулу и растягиваете ее на необходимый диапазон.

Автор - shurikus
Дата добавления - 18.03.2014 в 15:48
m-lzp Дата: Вторник, 18.03.2014, 16:00 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо большое Hugo и Shurikus! hands
 
Ответить
СообщениеСпасибо большое Hugo и Shurikus! hands

Автор - m-lzp
Дата добавления - 18.03.2014 в 16:00
  • Страница 1 из 1
  • 1
Поиск:

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