Новости:

Из правил форума: Тема должна отражать суть вопроса, топики типа "help please" будут удаляться!

Главное меню

Вывести значение до и после знака

Автор Yura, 03.02.2015, 12:21

« назад - далее »

Yura

Добрый день. Долго искал формулу, но так и не нашел. Есть csv файл, в нем все данные идут в одном столбце, но разделение идет не через ";", а через "/". Вот пример: РТ-00000137/CAFA FRANCE ОЧКИ ПОЛЯР МУЖСК/КОРИЧН ЛИНЗА/С12931/1 096.6. Мне нужно разделить на три столбца: ариткул, наименование, цена. Так как в наименовании встречаются тоже "/" стандартными функциями у меня не получилось что-что путное сделать. Подскажите как разделить на три столбца?!
Модератор
Вы на всех форумах правилам не будете следовать?
Забанить вас, что ли?

gling

Возможно наименование можно выбрать по количеству знаков. Был бы пример, можно было бы попробовать найти вариант. А коли нет примера, удачи Вам.
mail: vovik100661@gmail.com;
ЯД-41001506838083.

nemo3001

#2
Решение:
1. загрузить в столбец A все строки из csv файла: артикул/наименование/цена
2. для каждой строки определить позиции в строке для первого слева знака "/" (в столбец B) и первого справа знака "/" (в столбец C).
     Для этого например в ячейку B1 нужно записать формулу =ПОИСК("/";A1)
     А в ячейку C1 я бы записал формулу с моей пользовательской функцией ПоискСправа (см. ее текст ниже в решении): =ПоискСправа("/";A1) Функция ПоискСправа возвращает номер позиции символа справа в строке. Пользуюсь всегда ею, так как пока не нашел ее аналога во встроенных функциях Excel, кто знает способ проще - подскажите. Пользовательскую функцию ПоискСправа нужно будет вставить в текущую книгу Excel на лист макросов (Alt+F11, на своей книге нажать правой кнопкой мыши, Insert - Module)
3. для каждой строки в столбцы D, E, F выделить подстроки артикул, наименование, цена из столбца A, используя стандартные функции Excel и числа из столбцов B и C:
     Например для 1 строки: в D1 =ЛЕВСИМВ(A1;B1-1) в E1 =ПСТР(A1;B1+1;C1-B1-1) в F1 =ПРАВСИМВ(A1;ДЛСТР(A1)-C1)
     Конечно, формулы из столбцов B и C можно сразу вставить в формулы столбцов D, E, F. Я здесь записал их отдельно в столбцы B и C  просто для наглядности.
     Пример - во вложенном файле.
Public Function ПоискСправа(Poisk As String, BigStr As String) As Long
  'возвращает номер позиции символа справа в строке
  Dim pos As Long, i As Long, lP As Long, lB As Long
  pos = 0
  lP = Len(Poisk)
  lB = Len(BigStr)
  If lP <= lB Then
    For i = lB - lP + 1 To 1 Step -1
      If Mid(BigStr, i, lP) = Poisk Then
        pos = i
        Exit For
      End If
    Next
  End If
  ПоискСправа = pos
End Function

для оформления кода есть соответствующая кнопка [МОДЕРАТОР]

IKor

Можно воспользоваться стандартным инструментом экселя "Текст-по-Столбцам" (меню Данные)

zs

=ЗАМЕНИТЬ(A1;ПОИСК("/";A1);100;"") это B2
=ЗАМЕНИТЬ(A1;1;ПОИСК("/";A1;ПОИСК("/";A1)+1);"")
=ЗАМЕНИТЬ(ЗАМЕНИТЬ(A1;1;ДЛСТР(B2)+1;"");ПОИСК("/";ЗАМЕНИТЬ(A1;1;ДЛСТР(B2)+1;""));100;"")

nemo3001

Цитата: IKor от 13.02.2015, 15:40
Можно воспользоваться стандартным инструментом экселя "Текст-по-Столбцам" (меню Данные)
В том-то здесь и проблема, что для строк вида "РТ-00000137/CAFA FRANCE ОЧКИ ПОЛЯР МУЖСК/КОРИЧН ЛИНЗА/С12931/1 096.6", которые нужно разделить на три столбца: ариткул, наименование и цена, инструмент "Текст-по-Столбцам" создаст в общем случае больше трех столбцов: в приведенном примере строки будет создано 5 столбцов, поле "Наименование" разделится на 3 столбца, хотя его делить по столбцам конечно не надо. В общем случае в строках файла могут оказаться наименования, содержащие 1 или несколько символов "/", или вообще не содержащие этого символа. Именно поэтому приходится аккуратно отделять от исходной строки артикул слева, цену справа, а среднюю часть, наименование, не обрабатывать и не делить по столбцам.

Цитата: zs от 13.02.2015, 21:56
=ЗАМЕНИТЬ(A1;ПОИСК("/";A1);100;"") это B2
=ЗАМЕНИТЬ(A1;1;ПОИСК("/";A1;ПОИСК("/";A1)+1);"")
=ЗАМЕНИТЬ(ЗАМЕНИТЬ(A1;1;ДЛСТР(B2)+1;"");ПОИСК("/";ЗАМЕНИТЬ(A1;1;ДЛСТР(B2)+1;""));100;"")
Если в исходных строках поле "наименование" будет всегда обязательно иметь 2 символа "/", как в исходном примере, то конечно можно использовать приведенные формулы. Однако, обычно в наименованиях товаров символ "/" может встречаться 1 или несколько раз, или вообще не встречаться, а значит такие формулы будут в общем случае делить исходную строку на части неверно.