Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / текст из одной ячейки разделить на три столбца / 13 сообщений из 13, страница 1 из 1
19.12.2012, 12:26
    #38084812
Rascen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
текст из одной ячейки разделить на три столбца
подскажите, как с помощью VBA можно из одной ячейки выдернуть текст разделенный знаком "/" (он может состоять из одного, двух или трех значений)) и записать в отдельные ячейки.
а потом текст преобразовать в значения. Пример прилагаю, заранее спасибо.
...
Рейтинг: 0 / 0
19.12.2012, 14:34
    #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
19.12.2012, 15:05
    #38085233
Rascen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
текст из одной ячейки разделить на три столбца
Akina,

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

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

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

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

вот так
...
Рейтинг: 0 / 0
19.12.2012, 16:25
    #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
19.12.2012, 17:32
    #38085536
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
текст из одной ячейки разделить на три столбца
Код: vbnet
1.
=ЕСЛИ(ExtractPart(...)="";"0);ExtractPart(...))

Надо меньше 2пить...
...
Рейтинг: 0 / 0
19.12.2012, 17:33
    #38085538
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
текст из одной ячейки разделить на три столбца
Код: vbnet
1.
=ЕСЛИ(ExtractPart(...)="";"0";ExtractPart(...))
...
Рейтинг: 0 / 0
19.12.2012, 18:03
    #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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / текст из одной ячейки разделить на три столбца / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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