Страницы: 1
RSS
Выбрать столбцы по их наименованию на один лист
 
Добрый день!
Подскажите как решить задачу. Нужно выбрать определенные столбцы с листов, таблицы на листах имеют разную конфигурацию по столбцам и строкам.
Как можно выбрать столбцы по их наименованию на один лист, лучше без макросов?
Столбы из примера нужны: № п/п, Наименование, Ед. изм., Объем, Итого, Всего.
 
Цитата
NooBAsTiK написал: лучше без макросов
ну ну)
https://www.planetaexcel.ru/techniques/2/138/
Не бойтесь совершенства. Вам его не достичь.
 
Не совсем то, мне не нужно складывать одинаковые данные. Нужно понимать с какого листа какие данные приехали.
Больше подойдёт вот такое думаю
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=121499&MID=1005554#message1005554
 
noobastik, возможно)
макросом мог бы предложить, но...
Не бойтесь совершенства. Вам его не достичь.
 
pq
Код
let    
    w = {"№#(lf)п/п", "Наименование", "Ед.изм.", "Объем", "Итого", "Всего"},
    a = Excel.Workbook(File.Contents(Excel.CurrentWorkbook(){[Name="ww"]}[Content]{0}[Column1])),
    a2 = Table.SelectRows(a, each try Number.From([Name]) > 0 otherwise null and [Kind]="Sheet"),
    b = Table.TransformColumns(a2, {"Data", each Table.PromoteHeaders(_)})[[Name], [Data]],
    c = Table.ExpandTableColumn(b, "Data", w)
in
    c
 
Спасибо, завтра попробую, думаю подойдёт такой код. Имя ww (путь к файлу) как я понял делать обязательно.  

Цитата
Mershik написал:  noobastik , возможно)макросом мог бы предложить, но...
У нас на работе почти всё отрублено у excel в части макросов...
 
Пусть будет макрос - вдруг кому-то пригодится
Код
Sub mrshkei()
Dim sh As Worksheet, lr As Long, cell As Range, arr, cel As Range
arr = Array(("№ п/п"), "Наименование", "Ед.изм.", "Итого", "Всего")
For Each sh In Worksheets
    If sh.Name <> "Свод" Then
        For i = LBound(arr) To UBound(arr)
            Set cell = sh.Rows(1).Find(arr(i), LookAt:=xlWhole)
            If Not cell Is Nothing Then
            lr = sh.Cells(Rows.Count, 1).End(xlUp).Row
            If cel Is Nothing Then
                Set cel = sh.Range(sh.Cells(cell.Row + 1, cell.Column), sh.Cells(lr, cell.Column))
            Else
                Set cel = Union(cel, sh.Range(sh.Cells(cell.Row + 1, cell.Column), sh.Cells(lr, cell.Column)))
            End If
            End If
        Next i
    End If
    If Not cell Is Nothing Then cel.Copy Destination:=Worksheets("Свод").Cells(Worksheets("Свод").Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)
    Set cel = Nothing
Next sh
End Sub
Не бойтесь совершенства. Вам его не достичь.
Страницы: 1
Наверх