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

Вход

Регистрация

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

 

= Мир MS Excel/Разделение текста на массивы в нескольких ячейках столбца - Мир MS Excel

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

Excel 2013
Доброе утро!
Тема очень похожа на эту "Разделение текста на массивы с их последующим переносом".
Но исходная ячейка не одна, а неизвестное множество.
Благо мы знаем первую исходную ячейку "B17", из этой первой ячейки:
[E17] = Trim$(st(0)) т.е. 2-28-35 Ф ЯМ в ячейку E17
[C17] = Trim$(st(1)) т.е. л.с.2-9-1(1) в ячейку C17
[D17] = Trim$(st(3)), но не весь, а надо взять только последнюю числовую часть (иногда со знаком минус) т.е. -8 060 705 в ячейку D17
А в B17 оставить Trim$(st(3)), но уже без последней числовой части.
И самое сложное, то что исходных ячеек "B" столбца неизвестное множество. Но все они начинаются с 17 строки (B17 ячейки).
И заканчиваются всегда какой-то пустой "B" ячейкой (B25 в нашем примере)
К сообщению приложен файл: 2699143.xls (50.0 Kb)
 
Ответить
СообщениеДоброе утро!
Тема очень похожа на эту "Разделение текста на массивы с их последующим переносом".
Но исходная ячейка не одна, а неизвестное множество.
Благо мы знаем первую исходную ячейку "B17", из этой первой ячейки:
[E17] = Trim$(st(0)) т.е. 2-28-35 Ф ЯМ в ячейку E17
[C17] = Trim$(st(1)) т.е. л.с.2-9-1(1) в ячейку C17
[D17] = Trim$(st(3)), но не весь, а надо взять только последнюю числовую часть (иногда со знаком минус) т.е. -8 060 705 в ячейку D17
А в B17 оставить Trim$(st(3)), но уже без последней числовой части.
И самое сложное, то что исходных ячеек "B" столбца неизвестное множество. Но все они начинаются с 17 строки (B17 ячейки).
И заканчиваются всегда какой-то пустой "B" ячейкой (B25 в нашем примере)

Автор - Yar4i4
Дата добавления - 11.03.2016 в 07:32
Апострофф Дата: Пятница, 11.03.2016, 09:45 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 448
Репутация: 124 ±
Замечаний: 0% ±

Excel 1997
Так? -
[vba]
Код
Sub mac()
For r = 17 To Rows.Count
  If Cells(r, 2) = "" Then Exit For
  a = Split(Cells(r, 2), "*")
  Cells(r, 3) = Trim$(a(1))
  Cells(r, 5) = Trim$(a(0))
  For p = Len(a(3)) To 1 Step -1
    Debug.Print Mid$(a(3), p, 1)
    If Mid$(a(3), p, 1) Like "[!- 0-9]" Then Exit For
  Next
  Cells(r, 4) = Val(Mid$(a(3), p + 1))
  Cells(r, 2) = Mid$(a(3), 1, p)
Next r
End Sub
[/vba]
 
Ответить
СообщениеТак? -
[vba]
Код
Sub mac()
For r = 17 To Rows.Count
  If Cells(r, 2) = "" Then Exit For
  a = Split(Cells(r, 2), "*")
  Cells(r, 3) = Trim$(a(1))
  Cells(r, 5) = Trim$(a(0))
  For p = Len(a(3)) To 1 Step -1
    Debug.Print Mid$(a(3), p, 1)
    If Mid$(a(3), p, 1) Like "[!- 0-9]" Then Exit For
  Next
  Cells(r, 4) = Val(Mid$(a(3), p + 1))
  Cells(r, 2) = Mid$(a(3), 1, p)
Next r
End Sub
[/vba]

Автор - Апострофф
Дата добавления - 11.03.2016 в 09:45
Yar4i4 Дата: Пятница, 11.03.2016, 12:05 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Цитата Апострофф, 11.03.2016 в 09:45, в сообщении № 2
Так

Да. Всё работает. Я думал у вас проблемы возникнут с ячейкой B22, ведь в ней идет последняя числовая часть для переноса через точку "V=3х25м3. 2 125 434*"
СПАСИБО+
 
Ответить
Сообщение
Цитата Апострофф, 11.03.2016 в 09:45, в сообщении № 2
Так

Да. Всё работает. Я думал у вас проблемы возникнут с ячейкой B22, ведь в ней идет последняя числовая часть для переноса через точку "V=3х25м3. 2 125 434*"
СПАСИБО+

Автор - Yar4i4
Дата добавления - 11.03.2016 в 12:05
Yar4i4 Дата: Суббота, 09.04.2016, 13:03 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Цитата Апострофф, 11.03.2016 в 09:45, в сообщении № 2
If Mid$(a(3), p, 1) Like "[!- 0-9]" Then Exit For

столкнулся с числом типа "1,11" и макрос думает, что запятая в нецелом числе - это "p" и переносит все после запятой.
Изменял регулярное выражение
[vba]
Код
If Mid$(a(3), p, 1) Like "[!- ,0-9]" Then Exit For
[/vba]
этот вид работает в определённых условиях (при именовании файла в другом макросе) - а в данном примере упёрся и переносит либо целую часть числа, либо десятые, сотые...


Сообщение отредактировал Yar4i4 - Суббота, 09.04.2016, 13:04
 
Ответить
Сообщение
Цитата Апострофф, 11.03.2016 в 09:45, в сообщении № 2
If Mid$(a(3), p, 1) Like "[!- 0-9]" Then Exit For

столкнулся с числом типа "1,11" и макрос думает, что запятая в нецелом числе - это "p" и переносит все после запятой.
Изменял регулярное выражение
[vba]
Код
If Mid$(a(3), p, 1) Like "[!- ,0-9]" Then Exit For
[/vba]
этот вид работает в определённых условиях (при именовании файла в другом макросе) - а в данном примере упёрся и переносит либо целую часть числа, либо десятые, сотые...

Автор - Yar4i4
Дата добавления - 09.04.2016 в 13:03
Karataev Дата: Суббота, 09.04.2016, 19:14 | Сообщение № 5
Группа: Проверенные
Ранг: Старожил
Сообщений: 1334
Репутация: 533 ±
Замечаний: 0% ±

Excel
В этой строке вместо Val используйте CDbl. Val не распознает запятую частью числа, а распознает только точку
[vba]
Код
Cells(r, 4) = CDbl(Mid$(a(3), p + 1))
[/vba]
В столбце D измените формат ячеек, сейчас в книге формат числовой без цифр после запятой, поэтому дробные числа будут обрезаться.
И удалите эту строку (она использовалась для тестирования и сейчас не делает ничего)
[vba]
Код
Debug.Print Mid$(a(3), p, 1)
[/vba]
 
Ответить
СообщениеВ этой строке вместо Val используйте CDbl. Val не распознает запятую частью числа, а распознает только точку
[vba]
Код
Cells(r, 4) = CDbl(Mid$(a(3), p + 1))
[/vba]
В столбце D измените формат ячеек, сейчас в книге формат числовой без цифр после запятой, поэтому дробные числа будут обрезаться.
И удалите эту строку (она использовалась для тестирования и сейчас не делает ничего)
[vba]
Код
Debug.Print Mid$(a(3), p, 1)
[/vba]

Автор - Karataev
Дата добавления - 09.04.2016 в 19:14
Yar4i4 Дата: Понедельник, 11.04.2016, 07:05 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
не распознает запятую частью числа

только что проиграл макрос и CDbl тоже не распознаёт, возможно из-за того что число с пробелами вида 1 111 111,11.
когда формат ячеек выставляю заранее общий и текстовый, то переносятся только копейки и вставляются они как целые числа, т.е. 11
а если ячейки представить в числовом формате, то переносятся опять копейки, но в должном виде, т.е. 0,11
целая же часть остаётся вместе с текстом
 
Ответить
Сообщение
не распознает запятую частью числа

только что проиграл макрос и CDbl тоже не распознаёт, возможно из-за того что число с пробелами вида 1 111 111,11.
когда формат ячеек выставляю заранее общий и текстовый, то переносятся только копейки и вставляются они как целые числа, т.е. 11
а если ячейки представить в числовом формате, то переносятся опять копейки, но в должном виде, т.е. 0,11
целая же часть остаётся вместе с текстом

Автор - Yar4i4
Дата добавления - 11.04.2016 в 07:05
Апострофф Дата: Понедельник, 11.04.2016, 07:50 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 448
Репутация: 124 ±
Замечаний: 0% ±

Excel 1997
[vba]
Код
Sub mac()
Columns(4).NumberFormat = "#,##0.00"
For r = 17 To Rows.Count
  If Cells(r, 2) = "" Then Exit For
  a = Split(Cells(r, 2), "*")
  Cells(r, 3) = Trim$(a(1))
  Cells(r, 5) = Trim$(a(0))
  For p = Len(a(3)) To 1 Step -1
    'Debug.Print Mid$(a(3), p, 1)
    If Mid$(a(3), p, 1) = "," Then Mid$(a(3), p, 1) = "."
    If Mid$(a(3), p, 1) Like "[!-. 0-9]" Then Exit For
  Next
  Cells(r, 4) = Val(Mid$(a(3), p + 1))
  Cells(r, 2) = Mid$(a(3), 1, p)
Next r
End Sub
[/vba]

Отступы размеров в два пробела (я себе такие настраиваю обычно) съедаются движком, что несколько удручает, отображение плохо читаемое и нубское...


Сообщение отредактировал Апострофф - Понедельник, 11.04.2016, 08:17
 
Ответить
Сообщение[vba]
Код
Sub mac()
Columns(4).NumberFormat = "#,##0.00"
For r = 17 To Rows.Count
  If Cells(r, 2) = "" Then Exit For
  a = Split(Cells(r, 2), "*")
  Cells(r, 3) = Trim$(a(1))
  Cells(r, 5) = Trim$(a(0))
  For p = Len(a(3)) To 1 Step -1
    'Debug.Print Mid$(a(3), p, 1)
    If Mid$(a(3), p, 1) = "," Then Mid$(a(3), p, 1) = "."
    If Mid$(a(3), p, 1) Like "[!-. 0-9]" Then Exit For
  Next
  Cells(r, 4) = Val(Mid$(a(3), p + 1))
  Cells(r, 2) = Mid$(a(3), 1, p)
Next r
End Sub
[/vba]

Отступы размеров в два пробела (я себе такие настраиваю обычно) съедаются движком, что несколько удручает, отображение плохо читаемое и нубское...

Автор - Апострофф
Дата добавления - 11.04.2016 в 07:50
Karataev Дата: Понедельник, 11.04.2016, 08:13 | Сообщение № 8
Группа: Проверенные
Ранг: Старожил
Сообщений: 1334
Репутация: 533 ±
Замечаний: 0% ±

Excel
Yar4i4, запятую Вы здесь добавили?
[vba]
Код
If Mid$(a(3), p, 1) Like "[!- ,0-9]" Then Exit For
[/vba]
 
Ответить
СообщениеYar4i4, запятую Вы здесь добавили?
[vba]
Код
If Mid$(a(3), p, 1) Like "[!- ,0-9]" Then Exit For
[/vba]

Автор - Karataev
Дата добавления - 11.04.2016 в 08:13
Апострофф Дата: Понедельник, 11.04.2016, 08:21 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 448
Репутация: 124 ±
Замечаний: 0% ±

Excel 1997
Karataev, пробелы надо ещё удалять будет при использовании CDBL
 
Ответить
СообщениеKarataev, пробелы надо ещё удалять будет при использовании CDBL

Автор - Апострофф
Дата добавления - 11.04.2016 в 08:21
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Разделение текста на массивы в нескольких ячейках столбца (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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