Excel VBA MACBOOK - значения строк с разделителями для двух столбцов - PullRequest
0 голосов
/ 14 февраля 2020

Я давно искал ответ на этот вопрос и нашел несколько решений, которые не работают для моей версии Excel для Ma c (v16.33 2020)


1 Используя Power Query, который не совместим

2. Я перешел по этой ссылке здесь: LINK , которая использует Scripting.Dictionary
, но при ее использовании я получаю сообщение об ошибке:

"Runtime Error '429'
Active X can't create object

3. Я скачал обновленные Dictionary.cls и KeyValuePair.cls с http://www.sysmod.com/Dictionary.zip

4. После обновления кода до:
Set dAttributes = New Dictionary
Set dValues = New Dictionary
Я получаю сообщение об ошибке, так как k пусто для: For Each k In dic


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

Например:
Column A | Column B
Item 1 | a.jpg, b.jpg, c.jpg
Item 2 | a.jpg, b.jpg, c.jpg

Должно быть:
Column A | Column B
Item 1 | a.jpg
Item 1 | b.jpg
Item 2 | a.jpg
Item 2 | b.jpg

Значения для элементов и изображений различны. Существуют сотни строк и значений, поэтому копирование и вставка для переноса вручную не являются приемлемым вариантом.

В настоящее время код, который у меня есть, здесь: я застрял. Пожалуйста, прокомментируйте шаги, чтобы это исправить. Я попробовал предложенные ссылки, и ничего не работает.

Sub ttt()
 Dim dic As Object:
 Set dAttributes = New Dictionary
    Set dValues = New Dictionary
    Dim x&, cl As Range, rng As Range, k, s
    Set rng = Range([C1], Cells(Rows.Count, "C").End(xlUp))
    x = 1 'used as a key for dictionary and as row number for output
    For Each cl In rng
        For Each s In Split(cl.Value2, ",")
            dic.Add x, Cells(cl.Row, "A").Value2 & "|" & _
                        Cells(cl.Row, "B").Value2 & "|" & LTrim(s)
            x = x + 1
    Next s, cl
    For Each k In dic
        Range(Cells(k, "A"), Cells(k, "C")).Value2 = Split(dic(k), "|")
    Next k
End Sub

1 Ответ

1 голос
/ 14 февраля 2020

Для этого вам не нужен словарь - разбейте значение из ColB и l oop на массив: для каждого элемента выведите значение из ColA и значение элемента в новую строку.

Dim rw As Range
Dim ws As Worksheet, arr, e, c As Range
Set ws = ActiveSheet
Set c = ws.Range("H1") '<< start of output

'loop over input rows
For Each rw In ws.Range("A1").CurrentRegion.Rows
    arr = Split(rw.Cells(2).Value, ",")
    For Each e In arr
        c.Resize(1, 2).Value = Array(rw.Cells(1).Value, Trim(e))
        Set c = c.Offset(1, 0) 'next output row
    Next e
Next rw
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...