2

У меня есть столбец ячеек в Excel, который содержит письма, некоторые содержат только одно письмо, как они должны, но другие, имеют более одного письма на ячейку в этом формате:

one@example.com, two@example.com, three@example.com

Чего я хочу добиться, так это получить их так:

one@example.com
two@example.com
three@example.com

Я предполагаю (не верьте мне на слово), вы могли бы сделать что-то вроде if в соответствии с

if (cell contains ", ")
get string from ", " to ", " and paste somehow
else "b1"

Возможно, вы кричите прямо сейчас на своем экране :) (или смеетесь), но это просто, как бы вы подошли к нему, не имея представления о функциях, которые будут использоваться, или если это вообще возможно.

Так что если у вас есть идеи, я ценю это!

На всякий случай, я хочу сделать CSV-файл из этого файла, поэтому любой обходной путь, который бы это сделал, ...

Заранее спасибо!

Trufa

Кстати, я надеюсь, что объяснил проблему достаточно ясно, если нет, пожалуйста, попросите разъяснений!

РЕДАКТИРОВАТЬ: Проблема на самом деле решена, я сдался и сделал это один за другим, один метод, который никогда не подведет вас :) Я буду признателен за любые идеи в любом случае на будущее и ради знаний!

5 ответов5

2

В Excel попробуйте Data -> Text to Columns.

Затем выберите «,» в качестве разделителя. Это поместит разрывы столбцов там, где запятые сейчас.

0

Я не уверен, подходит ли мой ответ здесь, так как это скорее ответ Stackoverflow, но вы могли бы написать макрос, чтобы сделать это довольно легко. Например, следующий макрос предположит, что текущие адреса электронной почты находятся в первом столбце, и скопирует их во второй столбец:

Cells(1, 1).Select
Dim curr As String
Dim cnt As Integer
cnt = 0
For i = 1 To ActiveCell.SpecialCells(xlLastCell).Row
    curr = Cells(i, 1).Value
    If InStr(curr, "@") Then
        If InStr(curr, ",") Then
            Dim tmp() As String
            tmp = Split(curr, ",")
            For j = LBound(tmp) To UBound(tmp)
                cnt = cnt + 1
                Cells(cnt, 2).Value = tmp(j)
            Next
        Else
            cnt = cnt + 1
            Cells(cnt, 2).Value = curr
        End If
    End If
Next i

Я не знаю VBA, хотя, так что, возможно, есть лучшие способы сделать это.

0

Таким образом, вы хотите разрывать строки вместо запятых, тогда вам нужно найти и заменить их на char(10). Попробуйте эту формулу.

= ПОДСТАВИТЬ (А2, "", СИМ (10))

Формула заменит запятые из текста в A2 и заменит их на разрыв строки.

Например: если A2 содержит:

кто-то @ gmail.com, кто-то @ yahoo.com

тогда он вернется как:

someone@gmail.com
somebody@yahoo.com

0

Разве вы не можете просто сохранить как CSV и выполнить поиск и замену , \n?

0

Экспортируйте ваш файл Excel в CSV.

Скопируйте его на компьютер с Linux и отредактируйте в редакторе Vim.

Затем введите:

%s/,/\\n/g

Это разбивка этой команды:

  • : - запустить команду
  • % s - заменить
  • / - разделитель
  • - строка для поиска
  • / - разделитель
  • **** - управляющий символ для игнорирования следующего символа, но в этом случае мы хотим, чтобы следующая часть \n была строкой, в которой она заменяет запятую на
  • \n - строка для замены запятой
  • / - разделитель
  • г - глобально

Это найдет и заменит запятые с разрывом строки глобально и поместит каждую ячейку на новую строку. Затем вы можете импортировать этот файл в Excel.

Извините, если вы не используете Linux - это моя специальность, и инструменты для редактирования и манипулирования строками намного лучше, чем в Windows.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .