powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / текст из одной ячейки разделить на три столбца
13 сообщений из 13, страница 1 из 1
текст из одной ячейки разделить на три столбца
    #38084812
Rascen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
подскажите, как с помощью VBA можно из одной ячейки выдернуть текст разделенный знаком "/" (он может состоять из одного, двух или трех значений)) и записать в отдельные ячейки.
а потом текст преобразовать в значения. Пример прилагаю, заранее спасибо.
...
Рейтинг: 0 / 0
текст из одной ячейки разделить на три столбца
    #38085169
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Public Function ExtractPart(str As String, num As Integer, Optional delim As String = " ") As String
' Разделить строку str на части по разделителю delim и вернуть часть номер N
' Если N отрицательно - отсчитывать от конца.
' Несколько последовательных разделителей считать одним.
Dim temp As String
Dim tmp() As String
Dim n As Integer

Do
    temp = str
    str = Replace(str, delim & delim, delim, , , vbTextCompare)
Loop Until str = temp
tmp = Split(str, delim, , vbTextCompare)
n = UBound(tmp)
If n < Abs(num) - 1 Then
    ExtractPart = ""
ElseIf num < 0 Then
    ExtractPart = tmp(n + num + 1)
Else
    ExtractPart = tmp(num - 1)
End If
End Function
...
Рейтинг: 0 / 0
текст из одной ячейки разделить на три столбца
    #38085233
Rascen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

да, похоже, спасибо.
только если в ячейке два значения или одно, то необходимо приравнять к нулю
...
Рейтинг: 0 / 0
текст из одной ячейки разделить на три столбца
    #38085272
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допиливай. Или делай обёртку.
...
Рейтинг: 0 / 0
текст из одной ячейки разделить на три столбца
    #38085293
Rascen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

ExtractPart = ""
заменяю на
ExtractPart = 0
тогда получается вот такая картина.
...
Рейтинг: 0 / 0
текст из одной ячейки разделить на три столбца
    #38085323
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rascen, вам дали пример, как можно действовать. Так что "допиливать" - это написать собственную функцию для парсинга по образцу.

Просто приведите образец с примерами исходных данных и результата, а то описание задачи не полное (например, непонятно, всегда ли у вас два слэша, что за данные в строке и т.п.)
...
Рейтинг: 0 / 0
текст из одной ячейки разделить на три столбца
    #38085326
Rascen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,

я в первом сообщении пример приложил с исходными данными и результатом вручную
...
Рейтинг: 0 / 0
текст из одной ячейки разделить на три столбца
    #38085341
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не у всех же под руками офис2010
Ну и пример сам - какой-то мутноватый, зачем нам ваши вычисления ? "Ты пальцем покажи (с)"
...
Рейтинг: 0 / 0
текст из одной ячейки разделить на три столбца
    #38085349
Rascen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,

вот так
...
Рейтинг: 0 / 0
текст из одной ячейки разделить на три столбца
    #38085390
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rascen, Решение в лоб. Идея понятна.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Sub Test()
    Dim I As Long, J As Long
    Dim arrZones() As String
    Dim arrValues() As String
    
    arrZones = Split("4/-3.4641 1.11022e-015 12/1.73205 3/-1.44/-1.44338 2.22045e-016", "/")
    
    For I = 0 To UBound(arrZones)
        arrValues = Split(arrZones(I), " ")
        
        Select Case UBound(arrValues)
            Case 0
                ActiveSheet.Cells(I + 1, 1) = arrValues(0)
                ActiveSheet.Cells(I + 1, 2) = 0
                ActiveSheet.Cells(I + 1, 3) = 0
            Case 1
                ActiveSheet.Cells(I + 1, 1) = arrValues(0)
                ActiveSheet.Cells(I + 1, 2) = arrValues(1)
                ActiveSheet.Cells(I + 1, 3) = 0
            Case 2
                ActiveSheet.Cells(I + 1, 1) = arrValues(0)
                ActiveSheet.Cells(I + 1, 2) = arrValues(1)
                ActiveSheet.Cells(I + 1, 3) = arrValues(2)
        End Select
    Next
End Sub



ABC400-3,46411,11E-15121,7320530-1,4400-1,443382,22E-160
...
Рейтинг: 0 / 0
текст из одной ячейки разделить на три столбца
    #38085536
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
=ЕСЛИ(ExtractPart(...)="";"0);ExtractPart(...))

Надо меньше 2пить...
...
Рейтинг: 0 / 0
текст из одной ячейки разделить на три столбца
    #38085538
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
=ЕСЛИ(ExtractPart(...)="";"0";ExtractPart(...))
...
Рейтинг: 0 / 0
текст из одной ячейки разделить на три столбца
    #38085601
Rascen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Спасибо!
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Public Function ExtractPart(str As String, num As Integer, Optional delim As String = " ") As String
' Разделить строку str на части по разделителю delim и вернуть часть номер N
' Если N отрицательно - отсчитывать от конца.
' Несколько последовательных разделителей считать одним.
Dim temp As String
Dim tmp() As String
Dim n As Integer

Do
    temp = str
    str = Replace(str, delim & delim, delim, , , vbTextCompare)
Loop Until str = temp
tmp = Split(str, delim, , vbTextCompare)
n = UBound(tmp)
If n < Abs(num) - 1 Then
    ExtractPart = ""
ElseIf num < 0 Then
    ExtractPart = n
    ExtractPart = Replace(tmp(n + num + 1), ".", ",", 1, 1)
    
Else
    ExtractPart = n
    ExtractPart = Replace(tmp(num - 1), ".", ",", 1, 1)
End If
End Function


спасибо за доброту душевную
дописал замену точки на запятую. и все стало как надо... конечно же с использованием ЕСЛИ ))
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / текст из одной ячейки разделить на три столбца
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]