Здравствуйте! Помогите, пожалуйста, решить вопрос транспонирования. Есть данные, расположенные в ОДИН столбец. Их нужно распределить по соответственным столбцам. С помощью вставки транспонированием получается громоздко, так как массив очень большой. Заранее благодарен.
Здравствуйте! Помогите, пожалуйста, решить вопрос транспонирования. Есть данные, расположенные в ОДИН столбец. Их нужно распределить по соответственным столбцам. С помощью вставки транспонированием получается громоздко, так как массив очень большой. Заранее благодарен.mcduck
при проходе по столбцу как идентифицировать поле "Название" (единственно, что кинулось - прописные буквы), иначе не понятно: "ЗОЛОТІ ВОРОТА, ПРАТ" - это название новой строки или телефон предыдущей...
при проходе по столбцу как идентифицировать поле "Название" (единственно, что кинулось - прописные буквы), иначе не понятно: "ЗОЛОТІ ВОРОТА, ПРАТ" - это название новой строки или телефон предыдущей...Саня
не уверен, но не исключено, что есть этот же массив данных, в котором "будущие названия столбцов" фигурируют и в исходном массиве, т.е. примерно так: НАЗВАНИЕ ЗОЛОТІ ВОРОТА, ПРАТ АДРЕС 01103, м. Київ, вул. Кіквідзе, 7/11 ТЕЛЕФОН (044) 4920751 - Самусєв Сергій Володимирович - президент;(044) 2850020 - Саковська Валентина Анатолівна - бух.;(044) 4920752 - факс; E-MAIL kej@zv.com.ua ; sales@zv.com.ua ; WEB www.zv.com.ua и так по каждому "клиенту". Возможно, так можно проиндексировать?
не уверен, но не исключено, что есть этот же массив данных, в котором "будущие названия столбцов" фигурируют и в исходном массиве, т.е. примерно так: НАЗВАНИЕ ЗОЛОТІ ВОРОТА, ПРАТ АДРЕС 01103, м. Київ, вул. Кіквідзе, 7/11 ТЕЛЕФОН (044) 4920751 - Самусєв Сергій Володимирович - президент;(044) 2850020 - Саковська Валентина Анатолівна - бух.;(044) 4920752 - факс; E-MAIL kej@zv.com.ua ; sales@zv.com.ua ; WEB www.zv.com.ua и так по каждому "клиенту". Возможно, так можно проиндексировать?mcduck
всё-таки произошло какое-то смещение... посмотрите скриншот. Адрес "03110, м. Київ, вул. Златопільська, 4, к. 105, кв. 2" в исходнике соответствует компании "КОМЕТА, ПП"...
всё-таки произошло какое-то смещение... посмотрите скриншот. Адрес "03110, м. Київ, вул. Златопільська, 4, к. 105, кв. 2" в исходнике соответствует компании "КОМЕТА, ПП"... mcduck
не исключено, что в каком-то из блоков в исходнике просто не был указан "индекс" . В любом случае спасибо!!! Я ещё покопаюсь, сравню, если Вы не против - отпишусь, если проблемка будет.
не исключено, что в каком-то из блоков в исходнике просто не был указан "индекс" . В любом случае спасибо!!! Я ещё покопаюсь, сравню, если Вы не против - отпишусь, если проблемка будет.mcduck
Что-то у меня формулы до конца не отрабатывают... Делали такую задачу уже - если всё правильно разложено по строкам, то нет проблем макрос написать. С пользовательским типом легко сделать. Но у Вас есть сбои, например:
www.kovostroj.com.uaНазва:
В общем, запустите код, подправьте ошибки в данных, запустите ещё раз и т.д. Кое-где там нет HTTP - вставьте 2 НЕПУСТЫХ строки - забейте туда хоть "-" [vba]
Code
Option Explicit
Private Type MyType Firm As String Adr As String Pho As String Mail As String Http As String End Type
Sub tt() Dim a(), c() As MyType, i&, j& On Error Resume Next a = Sheets("Лист1").[a1].CurrentRegion.Value For i = 1 To UBound(a) If InStr(a(i, 1), "Назва:") Then j = j + 1 ReDim Preserve c(1 To j) With c(j) .Firm = a(i + 1, 1) .Adr = a(i + 3, 1) .Pho = a(i + 5, 1) .Mail = a(i + 7, 1) .Http = a(i + 9, 1) End With End If Next
ReDim arrOut(1 To j, 1 To 5) ' итоговый массив For i = 1 To j 'перекладываем из одного в другое... With c(i) arrOut(i, 1) = .Firm arrOut(i, 2) = .Adr arrOut(i, 3) = .Pho arrOut(i, 4) = .Mail arrOut(i, 5) = .Http End With Next i
With ThisWorkbook.Sheets("Лист2") 'выгрузка .Cells.Clear .[a1].Resize(, 5).Value = Split("Название Адрес Телефон Mail Http") .[a2].Resize(j, 5).Value = arrOut .Activate End With
End Sub
[/vba]
Что-то у меня формулы до конца не отрабатывают... Делали такую задачу уже - если всё правильно разложено по строкам, то нет проблем макрос написать. С пользовательским типом легко сделать. Но у Вас есть сбои, например:
www.kovostroj.com.uaНазва:
В общем, запустите код, подправьте ошибки в данных, запустите ещё раз и т.д. Кое-где там нет HTTP - вставьте 2 НЕПУСТЫХ строки - забейте туда хоть "-" [vba]
Code
Option Explicit
Private Type MyType Firm As String Adr As String Pho As String Mail As String Http As String End Type
Sub tt() Dim a(), c() As MyType, i&, j& On Error Resume Next a = Sheets("Лист1").[a1].CurrentRegion.Value For i = 1 To UBound(a) If InStr(a(i, 1), "Назва:") Then j = j + 1 ReDim Preserve c(1 To j) With c(j) .Firm = a(i + 1, 1) .Adr = a(i + 3, 1) .Pho = a(i + 5, 1) .Mail = a(i + 7, 1) .Http = a(i + 9, 1) End With End If Next
ReDim arrOut(1 To j, 1 To 5) ' итоговый массив For i = 1 To j 'перекладываем из одного в другое... With c(i) arrOut(i, 1) = .Firm arrOut(i, 2) = .Adr arrOut(i, 3) = .Pho arrOut(i, 4) = .Mail arrOut(i, 5) = .Http End With Next i
With ThisWorkbook.Sheets("Лист2") 'выгрузка .Cells.Clear .[a1].Resize(, 5).Value = Split("Название Адрес Телефон Mail Http") .[a2].Resize(j, 5).Value = arrOut .Activate End With