Excel разбивает один массив на несколько ячеек - PullRequest
2 голосов
/ 08 июня 2011

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

"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

Ответы [ 3 ]

3 голосов
/ 09 июня 2011

Это начнется в 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 голос
/ 09 июня 2011

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

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

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

0 голосов
/ 08 июня 2011

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...