Excel разбил один массив на несколько ячеек

#arrays #excel #split #rows

#массивы #excel #разделить #строки

Вопрос:

Приложение, которое я использую, экспортирует строки данных в массив в одной ячейке, вот так:

 "data1"= value1; "data2"= value2; "data3"= value3; "data4"= value4; "data5"= value5;
  

Я хотел бы уравнение или макрос или что-то, что могло бы разделить его следующим образом:

 ----------------------------------------------------------------
|   |  data0  |  data1  |  data2 |  data3  |  data4  |  data5  |
----------------------------------------------------------------
| 1 |  ARRAY  |  value1 | value2 |  value3 |  value4 |  value5 |
----------------------------------------------------------------
| 2 |  ARRAY  |  value1 | value2 |  value3 |  value4 |  value5 |
----------------------------------------------------------------
| 3 |  ARRAY  |  value1 | value2 |  value3 |  value4 |  value5 |
----------------------------------------------------------------
. . . . and so on.
  

Возможно ли это?

Вот строка из документа:

 "search-terms1" = Chinese jade; "search-terms2" = Chinese archers; "search-terms3" = Antique jade; "search-terms4" = Asian jade; "search-terms5" = China history;
  

Это всегда будут поисковые термины1 — поисковые термины5, но «значения» будут разными для каждой строки.

Excel 2003 в Windows XP

Комментарии:

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

Ответ №1:

Это начнется с A2 и продолжится для того, сколько строк содержат данные. Значения распределяются по столбцам справа.

 Sub SplitSearch()

    Dim vaTerms As Variant
    Dim vaSearch As Variant
    Dim rCell As Range
    Dim vaOutput As Variant
    Dim i As Long

    For Each rCell In Sheet1.Range("A2", Sheet1.Cells(Sheet1.Rows.Count, 1).End(xlUp)).Cells
        vaSearch = Split(rCell.Value, ";")
        ReDim vaOutput(1 To 1, 1 To UBound(vaSearch))
        For i = LBound(vaSearch) To UBound(vaSearch)
            vaTerms = Split(vaSearch(i), "=")
            If UBound(vaTerms) > -1 Then
                vaOutput(1, i   1) = Trim(vaTerms(UBound(vaTerms)))
            End If
        Next i
        rCell.Offset(0, 1).Resize(1, UBound(vaOutput, 2)).Value = vaOutput
    Next rCell
End Sub
  

Комментарии:

1. Это здорово, но у меня есть две небольшие проблемы. Я пытаюсь использовать это в документе, где столбец ‘AZ’. Я попытался изменить ‘A2’ на ‘AZ2’, но я получаю ошибку времени выполнения ‘9’: нижний индекс вне диапазона. Кроме того, не уверен, что это так, но игнорирует ли скрипт строку, если она пуста? На всякий случай, это то, что портит скрипт.

Ответ №2:

Вам, вероятно, следует выполнить поиск и замену во всей строке массива, заменив точки с запятой переводом строки, n или vbCrLf ПЕРЕД переносом строки массива в Excel, поскольку ограничения на размер строки ячейки могут привести к усечению вашего содержимого, если вы извлекаете много данных из строки. (Материал может быть отрезан, и вы не узнаете)

Что-либо меньшее может неправильно импортировать все результаты, с которыми вы имеете дело.

После замены точек с запятой переводами строк импортируйте текст или откройте файл с ‘=’ в качестве разделителя

Комментарии:

1. Я ничего не могу сделать до того, как это будет перенесено в Excel. Он экспортируется из онлайн-приложения. Что бы он ни экспортировал, я получаю. Возможно, я неправильно понимаю, что вы говорите.

2. онлайн-приложение создает таблицу Excel для вас? если он вставляет все в одну ячейку, вы рискуете потерять данные. Если экспорт выполняется в формат, который вы случайно открыли в Excel, возможно, вы сможете сначала с ним поработать. Если это копия / вставка онлайн-дисплея, вы можете сначала вставить его в текстовый редактор

3. ограничение на количество символов в ячейках Excel 2003 составляет около 32767, 2010, похоже, такой же.

4. Кроме того, ячейки никогда не должны превышать более 300 символов, если это возможно.

5. затем вы можете открыть CSV-файл в блокноте и выполнить поиск / замену, и это действительно упрощает задачу. Я бы рекомендовал notepad , поскольку вы можете заменить ‘;’ на ‘ n’, а затем открыть файл в Excel, разделенный символом ‘=’, и это будет именно то, что вы хотите. Даже исключите или включите первый столбец, если хотите

Ответ №3:

Сначала разделите строку на «;», а затем на «=». Приведенный ниже код поможет вам начать:

 Dim s As String
Dim parts As Variant
s = """data1""= value1; ""data2""= value2;"
parts = Split(s, ";")

For i = 0 To UBound(parts)
    Debug.Print parts(i)
    ' TODO: Split part along "=" and insert into cell
Next i
  

Комментарии:

1. данные [x] и значение [x] не такие, как показано, это разные строки данных. Это реальная строка из экспортированного файла. «поисковые термины1» = китайский нефрит; «поисковые термины2» = китайские лучники; «поисковые термины3» = Античный нефрит; «поисковые термины4» = Азиатский нефрит; «поисковые термины5» = История Китая; Это всегда будут поисковые термины1 — 5, просто для справки. «значения» будут разными для каждой строки.

2. если вы хотите использовать это, вы просто просматриваете весь лист и для каждой ячейки в диапазоне s = cell