Всем привет. Есть текст в ячейке - его часть есть необходимость получить в переменную, чтобы можно было дальше использовать. Нужно получить в одну переменную первое слово, в другую - третье. Текст в первой строке разделен одним пробелом, во второй запятой и пробелом. В третьей строке - разные комбинации пробелов и запятой. Можно для образца код написать для этих трех вариантов, чтобы слова первые и третье в соседние столбцы перемещались?
Всем привет. Есть текст в ячейке - его часть есть необходимость получить в переменную, чтобы можно было дальше использовать. Нужно получить в одну переменную первое слово, в другую - третье. Текст в первой строке разделен одним пробелом, во второй запятой и пробелом. В третьей строке - разные комбинации пробелов и запятой. Можно для образца код написать для этих трех вариантов, чтобы слова первые и третье в соседние столбцы перемещались?ovechkin1973
Sub Получить_слова() Dim arrSrc(), arrRes(), var, lr As Long, i As Long
lr = Cells(Rows.Count, "B").End(xlUp).Row arrSrc() = Range("B2:B" & lr).Value ReDim arrRes(1 To UBound(arrSrc), 1 To 2) For i = 1 To UBound(arrSrc) var = arrSrc(i, 1) var = Replace(var, ",", " ") var = WorksheetFunction.Trim(var) var = Split(var, " ") arrRes(i, 1) = var(0) arrRes(i, 2) = var(2) Next i Range("K2:L" & lr).Value = arrRes() End Sub
[/vba]
[vba]
Код
Sub Получить_слова() Dim arrSrc(), arrRes(), var, lr As Long, i As Long
lr = Cells(Rows.Count, "B").End(xlUp).Row arrSrc() = Range("B2:B" & lr).Value ReDim arrRes(1 To UBound(arrSrc), 1 To 2) For i = 1 To UBound(arrSrc) var = arrSrc(i, 1) var = Replace(var, ",", " ") var = WorksheetFunction.Trim(var) var = Split(var, " ") arrRes(i, 1) = var(0) arrRes(i, 2) = var(2) Next i Range("K2:L" & lr).Value = arrRes() End Sub
уважаемый Karataev, круто! Работает, но моих знаний не хватает понять, как код работает. В режиме отладчика запускал и пытался разбираться - как понял код описал (весь не смог), но чувствую, что не верно.
[vba]
Код
Sub Получить_слова() Dim arrSrc(), arrRes(), var, lr As Long, i As Long 'объявляем переменные. Понял только про последние две переменные (целые длинные Long)
lr = Cells(Rows.Count, "B").End(xlUp).Row 'определяем последнюю строку заполенную в столбце B arrSrc() = Range("B2:B" & lr).Value ReDim arrRes(1 To UBound(arrSrc), 1 To 2) For i = 1 To UBound(arrSrc) var = arrSrc(i, 1) 'получаем в переменную arrSrc текст из определенной циклом ячейки столбца B var = Replace(var, ",", " ") 'переменная var = тексту определенной циклом ячейки столбца B var = WorksheetFunction.Trim(var) 'не понял, что делает эта строка кода. Вроде должны убиратьс пробелы var = Split(var, " ") 'разбивает строку на массис с разделителем пробел (прочитал в инете, но слабо понимаю это.Массивы для меня пока ни как. arrRes(i, 1) = var(0) 'получаем первое слово arrRes(i, 2) = var(2) 'получаем третье слово Next i Range("K2:L" & lr).Value = arrRes() 'мы записываем данные массива сразу одновременно в диапазон "K2:L"?
End Sub
[/vba]
Можно для одной ячейки B2 получить эти значения способом (кодом) проще (для понимания)- Ваш код правильный и способен обрабатывать большое количество значений очень быстро, но я в своих файлах пока не в состоянии его применять. Рановато с моими знаниями
уважаемый Karataev, круто! Работает, но моих знаний не хватает понять, как код работает. В режиме отладчика запускал и пытался разбираться - как понял код описал (весь не смог), но чувствую, что не верно.
[vba]
Код
Sub Получить_слова() Dim arrSrc(), arrRes(), var, lr As Long, i As Long 'объявляем переменные. Понял только про последние две переменные (целые длинные Long)
lr = Cells(Rows.Count, "B").End(xlUp).Row 'определяем последнюю строку заполенную в столбце B arrSrc() = Range("B2:B" & lr).Value ReDim arrRes(1 To UBound(arrSrc), 1 To 2) For i = 1 To UBound(arrSrc) var = arrSrc(i, 1) 'получаем в переменную arrSrc текст из определенной циклом ячейки столбца B var = Replace(var, ",", " ") 'переменная var = тексту определенной циклом ячейки столбца B var = WorksheetFunction.Trim(var) 'не понял, что делает эта строка кода. Вроде должны убиратьс пробелы var = Split(var, " ") 'разбивает строку на массис с разделителем пробел (прочитал в инете, но слабо понимаю это.Массивы для меня пока ни как. arrRes(i, 1) = var(0) 'получаем первое слово arrRes(i, 2) = var(2) 'получаем третье слово Next i Range("K2:L" & lr).Value = arrRes() 'мы записываем данные массива сразу одновременно в диапазон "K2:L"?
End Sub
[/vba]
Можно для одной ячейки B2 получить эти значения способом (кодом) проще (для понимания)- Ваш код правильный и способен обрабатывать большое количество значений очень быстро, но я в своих файлах пока не в состоянии его применять. Рановато с моими знаниямиovechkin1973
Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.
Сообщение отредактировал ovechkin1973 - Воскресенье, 18.02.2018, 10:14
var = Range("B2").Value 'замена запятых на пробелы var = Replace(var, ",", " ") 'удаление двойных пробелов var = WorksheetFunction.Trim(var) 'разбивка на части по пробелам var = Split(var, " ") Range("K2").Value = var(0) Range("L2").Value = var(2) End Sub
[/vba]
Вот код для второй строки:
[vba]
Код
Sub Получить_слова() Dim var
var = Range("B2").Value 'замена запятых на пробелы var = Replace(var, ",", " ") 'удаление двойных пробелов var = WorksheetFunction.Trim(var) 'разбивка на части по пробелам var = Split(var, " ") Range("K2").Value = var(0) Range("L2").Value = var(2) End Sub
Добавил комментарии в макрос (пост 4). Смысл такой. Меняем запятые на пробелы, чтобы не стало запятых, чтобы запятые не мешали (по сути удаляем запятые, но не просто удаляем, а заменяем на пробелы, вдруг между первым и вторым словом будет только запятая без пробела). Затем удаление лишних пробелов, чтобы можно было разбить на части по пробелам. В итоге имеем текст, разбитый на части в переменной "var". Нумерация элементов в массиве "var" начинается с нуля, а не с единицы, как в повседневной жизни, это такая особенность у программистов - им почему-то удобнее считать с нуля (я сам не программист, поэтому не понимаю такого удобства).
Добавил комментарии в макрос (пост 4). Смысл такой. Меняем запятые на пробелы, чтобы не стало запятых, чтобы запятые не мешали (по сути удаляем запятые, но не просто удаляем, а заменяем на пробелы, вдруг между первым и вторым словом будет только запятая без пробела). Затем удаление лишних пробелов, чтобы можно было разбить на части по пробелам. В итоге имеем текст, разбитый на части в переменной "var". Нумерация элементов в массиве "var" начинается с нуля, а не с единицы, как в повседневной жизни, это такая особенность у программистов - им почему-то удобнее считать с нуля (я сам не программист, поэтому не понимаю такого удобства).Karataev