Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
[ Закрыто] Форматирование в word, форматирование таблиц в word с помощью VBA
 
Добрый день, Коллеги! Вопрос не по excel, но по vba. Из программы данные выгружаюдтся в word. Но совершенно не оптимизировано. В таблицах куча пустых строк, которые хорошо бы удалить. Начал макросить, столкнулся с проблемой скрытых символов в ячейках таблицы.

Прикладываю тестовый файл. Желтым выделены строки, которые после выполнения макроса redact должны удаляться, но пока что получается удалять лишь те строки, которые не содержат никаких значений. А строки с "-", "0" или "0,0" не удаляются.
Проверить значение ячейки i,j в таблице (t.Cell(i, j).Range.Text) совпадает с 0, - или 0,0 не получается никак. Помогите советом, в чем косяк.
Изменено: NikitaV - 13.05.2020 14:57:11
Способ обойти ошибку type mismatch
 
Цитата
Sanja написал:
If IsNumeric(table1.Cells(I)

Спасибо! Sanja!
Способ обойти ошибку type mismatch
 
Добрый день. Прошу помочь в решении следующей проблемы: Есть таблица с данными. Хочу получить 2-ю таблицу, с данными первой, деленными на 1000. Обнаружил, что в случае, если в 1-й таблице есть ячейки с некорректными данными (текст, деление на 0, н/д и т.п), то простой макрос делящий ячейку на 1000 выдает type mismatch. В оригинальном файле исходные таблицы получают данные через формулы, и как раз часто бывает что деление на 0 случается. Можно конечно, написать кучу формул если(еош..), но это много. Уверен, есть способ в макросе предусмотреть ошибку и 1 строчкой прописать, что в случае ошибки значение таблицы 2 = 0. Подскажите, как это можно сделат. Для наглядности прикрепил файл с таблицей, где 1 значение не числовое(выделил желтым).
Почему при использовании метода Find ошибка: Run-time error '91'
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
А что означает консолидированная ячейка? Это как?
это значит объединенная ячейка. Объединение двух ячеек в моем конкретном случае. Значение вставлялось в ячейку во 2 ряду, затем она объединялась с ячейкой из 3 ряда. И вот в таком случае Find не находит.

Цитата
Дмитрий(The_Prist) Щербаков написал:
и отдаться на милость последним задействованным параметрам? Лучше наоборот принудительно указывать все параметры(особенно в части поиска по части или по целой и поиска формата и регистра)
не уверен что этот подход сработает. Там ведь нет никаких параметров поиска для тех ячеек, которые являются объединенными..
Почему при использовании метода Find ошибка: Run-time error '91'
 
да...без консолидированной все находит. Печально.
Почему при использовании метода Find ошибка: Run-time error '91'
 
Спасибо! Правильно ли я понимаю, что если бы он нашел, то ошибка бы не возникла? Просто я в строке 2, в к столбцах L,m сделал консолидированную ячейку со значением "П", специцально в целях тестирования, чтобы понять, нашел он или нет. Значит не нашел...Тогда если не возражаете, еще 1 вопрос - почему он не нашел? Может консолидированная ячейка помешала?
Почему при использовании метода Find ошибка: Run-time error '91'
 
добрый день. столкнулся с
Цитата
Run-time error '91':
Object varialble or With block variable not set.
код совершенно простой, ищем в строке 2 активного листа значение "П". определение переменной не помогает. Кто может подсказать в чем беда?
Код
Sub find_1()
Dim width As Long
With ActiveSheet
width = Rows(2).Find(What:="П", LookIn:=xlValues, SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column
End With
End Sub
Вставка массива непустого массива в диапазон: вставляется пустота
 
На листах книги С именем начинающимся на "база_" (или "цех_"для второй кнопки) содержатся таблицы. На листе " свод " та же таблица, только собранная из данных листов "база_". У каких то строк есть код, эти строки могут обладать подстроками. Мне необходимо перенести данные с листов "база" таким образом, чтобы подстроки собрались только уникальные. Т.е как сводной таблицой группируются подстроки строк с кодом.
Алгоритм: идем по 1 столбцу листа " свод", если значение ячейки = "люди", то в переменную "код" записываем код строки из ячейки 2  столбца.  Затем по циклу пробегаем 2-е столбцы листов "база", если код строки совпал с "код", то пока у строки есть непустые подстроки(непустые значения в нижних строках в 1 столбце), то записываем их значения в массив arr (Это делается процедурой  toinsert-  получаем массив для вставки значений). Затем применяем функцию arr_intersect которая объединяет массивы arr  , полученные с каждого листа, в массив inter. Важно, что при этом остаются лишь уникальные строки. Т.е если Иванов был на листе База_1, и на листе База_2, в массиве inter будет лишь одно значение Иванов. Также осуществляется проверка на пустоту массива. Если объединяются пустой и не пустой массив, получаем в точности не пустой, если 2 пустых , то применяем erase. Таким образом , если у строки "люди " нет подстрок, ничего вставляться в лист свод не должно.  А если есть, то вставляются строки, и записываются имена .
Изменено: NikitaV - 01.02.2019 10:52:11
Вставка массива непустого массива в диапазон: вставляется пустота
 
Цитата
Дорожный написал:
Как я понимаю, чтобы сработал метод insert нужно сначала загнать что-то в буфер обмена (например Copy). Вообще-то в диапазон на листе двумерный и одномерный массив можно вывести просто оператором "=".
так там это и сделано
вот же
Код
Range(Cells(i + 1, 1), Cells(i + UBound(inter, 1), 1)).Value = inter
если массив inter содержит 1 и более элементов, диапазон в левой части равенства представляет собой ячейу/ячейки в которые и заливаются данные из массива, простым присваиванием. Только вот не всегда срабатывает.
Вставка массива непустого массива в диапазон: вставляется пустота
 
выкладываю файл. на листах База_i , Цех_i разное представление данных. На листе свод-подключены кнопки с одним и тем же макросом, настроенным на разные листы. Как видно из примера, если данные все есть, т.е подстроки строчки "люди" заполнены, макрос работает. Если же, как На листах База_ что то отсутствует, он вставляет пустоты. похоже все же не корректно работает функция arr_intersect..но проверить у меня не получается. уже мозг кипит.
Вставка массива непустого массива в диапазон: вставляется пустота
 
добрый день.
помогите разобраться в чем может быть косяк.

Когда я присваиваю диапазону  значения массива, вставляется пустота, хотя массив состоит из текстовых элементов, что подтверждается msbox перед началом записи.
В нижеприведенном куске кода я присваиваю диапазону массив. Верхняя граница intersect = 1, т.е диапазон состоит из 1 ячейки.
Код
  Range(Cells(i + 1, 1), Cells(i + UBound(intersect, 1), width)).Select
            Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            Range(Cells(i + 1, 1), Cells(i + UBound(intersect, 1), 1)).Value = intersect

intersect был получен ранее в ходе выполнения процедуры arr_intersect , которая объединяет массивы, оставляя уникальные значения. Проверка msbox показывает, что в intersect записаны текстовые значения , и записаны правильно.
Код
intersect = arr_intersect(intersect, sp)
For m = 1 To UBound(intersect, 1)
                    MsgBox (intersect(m, 1))
Next m

Arr_intersect приведена ниже:
Код
Function arr_intersect(arr1() As String, arr2() As String)
 Dim arr3() As String
 Dim n As Integer, t As Integer, p As Integer
 On Error Resume Next
 If IsArrayEmpty(arr1) = False Then
    If IsArrayEmpty(arr2) = False Then
 n = 0
         For t = 1 To UBound(arr1, 1)
            For j = 1 To UBound(arr2, 1)
                If arr1(t, 1) = arr2(j, 1) Then
                n = n + 1
                End If
            Next
         Next
         ReDim arr3(1 To UBound(arr1, 1) + UBound(arr2, 1) - n, 1 To 1)
           For t = 1 To UBound(arr1, 1)
            arr3(t, 1) = arr1(t, 1)
      Next
       p = 0
        For j = 1 To UBound(arr2, 1)
        n = 0
            For t = 1 To UBound(arr1, 1)
              If arr2(j, 1) <> arr3(t, 1) Then
                n = n + 1
              End If
              Next
              If n = UBound(arr1) Then
                p = p + 1
                arr3(UBound(arr1, 1) + p, 1) = arr2(j, 1) 'записываем в конец новый элемент
              End If
        Next
arr_intersect = arr3
Else
arr_intersect = arr1
End If
Else
    If IsArrayEmpty(arr2) = False Then
    arr_intersect = arr2
   End If
End If
End Function

Проверка If IsArrayEmpty массива на пустоту , вроде была заимствована у ZVI.
Код
Function IsArrayEmpty(x) As Boolean
  Dim i&
  On Error Resume Next
  i = LBound(x, 1)
  IsArrayEmpty = Err <> 0
End Function

массив sp получался в результате обработки листа и получения списка значений в виде двумерного массива. В конкретном случае, он содержит 1 значение - слово.
Код
sp = ToInsert(kod, mas(1, k), mas(2, k))

Код
Function ToInsert(ByVal kod As String, ByVal name As String, ByVal bl_r As Integer) ', list1 As Worksheet)
Dim intersect() As String, sp() As String
Worksheets(name).Activate
   With ActiveSheet
   
        i = bl_r
       For i = bl_r To 6 Step -1
            j = 0
            If Cells(i, 2) = kod Then
               Do While Cells(i + 1 + j, 2) = ""
                   j = j + 1
               Loop
                If j > 0 Then
                ReDim sp(1 To j, 1)
                For k = 1 To UBound(sp, 1)
                    sp(k, 1) = Cells(i + k, 1).Value
                Next
                End If
            End If
        Next
    If IsArrayEmpty(sp) = True Then

    Erase sp
    ToInsert = sp
    Else
        ToInsert = sp
    End If
    End With
   End Function

Суть этой части программы в том, что по циклу пробегаем нужные листы, далее если в указанном столбце находим код, то берем в список sp значения из нижележащих ячеек соседнего столбца, у которых кода нет. Затем объединяем sp  и intersect (изначально пустой), переходим на следующий лист, опять заполняем sp, опять пересекаем и т.д. Затем в рабочем листе вставляем где нужно число строк соответствующее ubound(intersect,1) и значения intersect вставляется в ячейки. У меня строки добавляются, число строк правильное, но почему то диапазон заливается пустотой. Help.
почему значения массива не переносятся в диапазон, присваивания диапазону значений массива.
 
Цитата
Казанский написал:
NikitaV , Option Base 1 и все получится.
Насчет 1 to 1 - супер, как то я пропустил этот момент.Все заработало. А что такое Option base 1 - я честно говоря не вкурсе, почитаю на досуге. Благодарю.
почему значения массива не переносятся в диапазон, присваивания диапазону значений массива.
 
Столкнулся с проблемой переноса данных из массива в диапазон. Не хочу переносить по цику, ведь можно с помощью присваивания перенести, что значительно быстрее. Но как всегда что-то пошло не так. Не понимаю, почему когда выбираем диапазон range состоящий из 3 ячеек, двумерный массив не переносится на этот диапазон?
ниже небольшой макрос демонстрирующий эту проблему. Массив а - вертикальный, пытаемся записать его в вертикальный диапазон,  b - горизонтальный - пытаемся записать в горизонтальный диапазон. А с одномерными массивами, присваивание нормально работает только для горизонтальными диапазонами. В вертикальный переносится только 1-й элемент массива.

Код
Sub consolidation_balance()
'a-оранжевый, b - зеленый , с - желтый
Dim a(1 To 3, 1) As String, b(1, 1 To 3) As String, c(1 To 3) As String

For i = 1 To 3
    a(i, 1) = i
    b(1, i) = i
    c(i) = i
Next

Range(Cells(1, 1), Cells(3, 1)).Value = a

Range(Cells(1, 2), Cells(1, 4)).Value = b

Range(Cells(4, 1), Cells(6, 1)).Value = c
Range(Cells(1, 5), Cells(1, 7)).Value = c


End Sub
End Sub


Как мне добиться корректного переноса данны
Изменено: NikitaV - 29.01.2019 15:32:35
группировка пустых строк и столбцов. vba, как определить границы не сгруппированной зоны?
 
С работы посмотреть не могу, вечерком гляну,  спасибо
группировка пустых строк и столбцов. vba, как определить границы не сгруппированной зоны?
 
Определить границы оставшейся после группировки столбцов области необходимо, чтобы проверять проверять пустоту ячеек лишь не сгруппированеой части строки.
группировка пустых строк и столбцов. vba, как определить границы не сгруппированной зоны?
 
добрый день. написал нехитрый макрос, группирующий строки и столбцы. Теперь хочется его немного усовершенствовать. Сейчас он работает так: проверяет пустые/нулевые итоговые строки, и группирует столбцы. потом группирует строки у которых нулевой код. Я хочу добавить группировку еще и если строка вся нулевая(начиная с 3 толбца). Не могу понять, как можно определить границы оставшейся непустой области после того, как были сгруппированы столбцы, чтобы затем сгруппировать строки, сначала полностью пустые, а затем уже с нулевым кодом строки, чтобы получилось как на баланс2.
в приложенном файле - лист Баланс- то, что форматируем. После макроса-результат после выполнения макроса. ну и собственно-лист с тем, что Хотелось бы видеть, и лист с кнопкой макроса)
перенос данных из таблицы в таблицу. что-то не так с форматами?
 
Добрый день. Написал макрос, переносящий данные из одной таблицы в другую. Но как водится, что-то пошло не так. Дело в том, что второй файл, с которого я беру вторую таблицу, выгружается в формате xls из некой программы, и данные в нем видимо имеют какой то специфический формат. Подскажите, что можно добавить в макрос, чтобы он учитывал эту особенность. К сожалению данные залить не могу. Макрос рабочий, сравнивает значения 1-го столбца 1 и 2 таблицы, затем 1-й строки. В случае совпадения данные из 2 таблицы согласно координатам переносятся в 1 таблицу. Если шапки у таблиц тупо идентичные ( взяты из одного места или копированы друг с друга), то все работает. Если же вторая таблица выгружена и не отформатирована, то результата нет, данные не переносятся. Шапка таблицы 2 представляет собой дату типа I квартал 2017. И даже визуально , одинаковые казалось бы даты, отличаются. Как это устранить я не понимаю.

макрос
Код
Sub test3()
Dim table1 As Range, table2 As Range

Set n = Application.InputBox("выберите диапазон 1 таблицы", , , , , , , 8)
Set m = Application.InputBox("выберите диапазон 2 таблицы", , , , , , , 8)

n.Select
Set table1 = Selection
m.Select
Set table2 = Selection



For i = 2 To table1.Rows.Count

    For j = 2 To table2.Rows.Count
        If table1.Cells(i, 1).Value = table2.Cells(j, 1).Value Then
            For c = 2 To table1.Columns.Count
                For g = 2 To table2.Columns.Count
                    If table1.Cells(1, c).Value = table2.Cells(1, g).Value Then
                        table1.Cells(i, c).Value = table2.Cells(j, g).Value
                    End If
                Next
            Next
        End If
    Next
Next
 End Sub

=> должен из таблицы 2 перенести данные в соответствующие ячейки таблицы 1 (если совпали коды строк, и названия столбцов).

Также буду благодарен, если кто-то предложит как можно оптимизировать копирование данных из одного диапазона в другой. Последовательность вложенных циклов на мой взгляд довольно заморочна, но ничего лучше я придумать не смог.
Изменено: NikitaV - 23.01.2019 15:05:07
обработка диапазонов с использованием массивов: добавляет лишнюю строку с #Н/Д
 
спасибо, чего-то к вечеру мозги уже не работают. Вы конкретно сформулировали и я сразу понял где корень проблемы.

все, супер, работает)
обработка диапазонов с использованием массивов: добавляет лишнюю строку с #Н/Д
 
Доброго дня! Всех с прошедшими праздниками! Делаю небольшой макрос по обработке файлов: по нажатию кнопки(кнопка1) отсматривает в текущей папке все файлы эксель, затем о очередно их открывает, и переносит данные на лист в рабочем файле. Все вроде работает, да вот при переносе добавляется строчка  #Н/Д. Уже перепробовал по всякому, не могу понять, почему он ее добавляет. Я использовал массивы для ускоренной вставки данных, может там чего-то, сам не допер. Посмотрите, если не сложно, где косяк в макросе у меня.
Изменено: NikitaV - 08.01.2019 00:14:13
Объединение таблиц Excel посредством PowerQuery, Параметризация запросов, объединение таблиц их файлов Excel из одной папки
 
Спасибо!)

Код
let
    sPath = Excel.CurrentWorkbook(){[Name="Параметры"]}[Content]{[Параметр="Где"]}[Значение],
    sWho = Text.Lower(Excel.CurrentWorkbook(){[Name="Параметры"]}[Content]{[Параметр="Кого"]}[Значение]),
    source = Folder.Files(sPath),
    xlFiles = Table.SelectRows(source,each Text.Lower([Extension])=".xlsx")[[Name],[Content]],
    toTables = Table.TransformColumns(xlFiles, { {"Content",each Excel.Workbook(_,true){[Kind="Sheet"]}[Data], type table} }),
    neededOnly = Table.TransformColumns(toTables, { {"Content", each Table.SelectRows(_, each Text.Lower([Должность])=sWho),type table} }),
    return = Table.ExpandTableColumn(neededOnly, "Content", {"Должность", "Оклад", "Сотрудник"})
in
    return

До шага toTables все ясно. Очень понравилось как Вы Диапазон задали, и пользуетесь им. Я ранее не использовал никогда функцию Ячейка, не знал что так можно определить путь к файлу. Эт новая функция или давно уже существует?

А вот шаги toTables и neededOnly с операцией Table.TransformColumns  и кучей прибамбасов - для меня начинаются танцы с бубном) ну ладно, эт лирика. Спасибо огромное, благодаря Вашему Коду я продвинулся в изучении так, как сам бы не продвинулся и за месяц )))
Изменено: NikitaV - 09.05.2016 22:23:34
Объединение таблиц Excel посредством PowerQuery, Параметризация запросов, объединение таблиц их файлов Excel из одной папки
 
Андрей VG, я заново добавил файлы - исходники, и там же файл - результат - то как должно быть. Т.е мы сначала фильтруем инфу по должности - нач, а потом объединяем.
Объединение таблиц Excel посредством PowerQuery, Параметризация запросов, объединение таблиц их файлов Excel из одной папки
 
Вас также с праздником! И спасибо за ответ и за полезные ссылки :) Обязательно их проштудирую. Кстати, касательного Вашего решения и его применения к моему примеру - Если сначала объединить файлы, то мы теряем возможность идентифицировать информацию, ведь вставить столбец с названием файла источника уже не получится, это нужно делать до объединения файлов..Изначально я хотел это сделать с помощью двух запросов. 1-й - фильтрует файлы по начальнику и добавляет имя файла в пользовательский столбец. А второй уже объединяет запросы.. Если будет свободная минутка, можете показать как бы вы сделали это?

Теперь по коду..
Цитата
Андрей VG написал:
Всего лишь получение списка элементов столбца [Content] таблицы source
Супер. Теперь я понял как и этот шаг повторить с помощью редактора запросов. Нужно лишь добавить после автокода [Content]

Цитата
Андрей VG написал:
Всего лишь итерация по индексам списка folderData выполняется преобразование элементов Content (получение таблицы описания содержимого очередного файла) и объединение через Table.Combine в единую таблицу данных файлов. Дальше вы, как понял, понимаете, что происходит.
слабо понимаю объяснение, придется читать литературу. Дальше вроде понял. Сейчас еще лучше. Но вот что интересно, если в книгах больше 1 листа, то, поскольку на предпоследнем шаге проверяем у каких данных тип Sheet,
Код
neededTables = Table.SelectRows(baseTables, each [Kind]="Sheet")[Data]
будут добавляться таблицы и с других листов ..проверил - не ошибся, урря)  Вот решение проблемы
Код
 neededTables = Table.SelectRows(baseTables, each ([Kind]="Sheet" and [Name]="Лист1"))[Data]

Ладно, еще раз с праздником. Пойду попробую реализовать объединение запросов. Если получится скину сюда.
Изменено: NikitaV - 09.05.2016 16:08:41
Объединение таблиц Excel посредством PowerQuery, Параметризация запросов, объединение таблиц их файлов Excel из одной папки
 
макросы_тренинг.rar (35.98 КБ) Андрей VG, ваш код помог мне сделать что я хотел. Вы осуществили объединение в 1-м запросе. Но разобраться полностью в коде я не смог. Можете прояснить некоторые моменты? Исходники в архиве.

В файл с запросом на PQ  - тот же самый - "помесячный расчет", поменял лишь адрес, и удалил что не нужно. Код:
Код
let
    fileFolder = Excel.CurrentWorkbook(){[Name="Путь"]}[Content]{0}[Column1],
    source = Folder.Files(fileFolder),
    folderData = Table.SelectRows(source,each Text.Lower([Extension])=".xlsx")[Content],
    baseTables = Table.Combine(List.Transform(List.Positions(folderData),each Excel.Workbook(folderData{_},true))),
    neededTables = Table.SelectRows(baseTables, each [Kind]="Sheet")[Data],
    combined = Table.Combine(neededTables)
in
    combined
Прокомментирую код как я его понял:
1) при задании адреса используется ячейка текущей рабочей книги. Это определяется в 1-й строке кода.Вы обозвали диапазон с ячейкой A2 как "Путь" и PQ понял. Супер) Что означает дальнейший кусок кода: [Content]{0}[Column1] ?
2)Далее, источником становится папка по указанному нами адресу
3) folderData определяется Вами как фильтр по расширению xlsx (Text.Lower ??? похоже с синтаксисом придется долго разбираться) , а что осталось определяется как (как бы это сказать).. сущность. Как я понял, чтобы сделать сущность , и нужно магическое [Content] в конце строки
4) шаг baseTables - вот тут магия какая то. Ничего не понимаю.
5) Шаги neededTables и combined воспроизводятся редактором, но код длиннее получается.


И еще 1 момент: Как Вы считаете, есть ли разница во времени если сначала обработать файлы с помощью запросов (фильтр сделать, удалить ненужное и т.п) и потом объединять уже запросы, или же сначала объединить файлы, а затем обрабатывать. С помощью Вашего кода я сначала объединяю, потом уже обрабатываю. Может можно как то и 1-й способ реализовать?
Изменено: NikitaV - 09.05.2016 15:30:03
Объединение таблиц Excel посредством PowerQuery, Параметризация запросов, объединение таблиц их файлов Excel из одной папки
 
ЮрийМ, позвольте уточнить, в каких случаях Вы рекомендуете использовать цитирование, а в каких нет. Я применяю цитирование, если хочу дать ответ на конкретное высказывание конкретного человека. Людей здесь много разных, поэтому, очевидно, нужно указывать кому адресован ответ, поэтому я использую цитирование. Возможно есть другие способы, буду рад если научите.

Андрей VG, я видел Вас в какой то теме связанной с PQ :) Еще раз повторюсь, банальное сливание 3 одинаковых табличек требовалось, поэтому как то даже не подумал что могут какие то вопросы возникнуть :) В общем, был не прав, исправлюсь))

JeyCi, Ваша ссылка просто супер кладезь полезной инфы. Еще раз благодарю.
Объединение таблиц Excel посредством PowerQuery, Параметризация запросов, объединение таблиц их файлов Excel из одной папки
 
Спасибо за ответ, как то проглядел эту тему. А на Ваше замечание касательно примера таблиц - какая разница какие они? 3 у них столбца, или 10 - это не важно. В запросе ведь убиваются лишние, а сами таблицы одинаковы по своей структуре изначально - это я просто опускаю за очевидностью факта.

Способов уверен не 1 и не 2  - но это если знаешь язык М, ну и шаришь в его логике. Я, увы, пока только пытаюсь постичь и то, и то, поэтому мне хотя бы какой то вариантик) Скачал вариант 5, предложенный Вами) Спасибо, пойду разбираться)
Объединение таблиц Excel посредством PowerQuery, Параметризация запросов, объединение таблиц их файлов Excel из одной папки
 
Добрый день! Подскажите, пожалуйста, каким образом можно с помощью Power Query объединить таблицы из файлов Excel находящихся в одной папке. Я знаю - это должна быть комбинация из двух запросов - 1-й получение файлов из папки, второй - выгрузка из файла Excel. Целый день бьюсь, ничего не выходит. Посмотреть решение тоже негде, везде как то опускают эти тонкости , пишут - можно и все.

Стуктура запроса FromFolder для получения файлов из папки:
Код
let
    Источник = Folder.Files("F:\Обучение\макросы_тренинг\Power Query"),
    #"Другие удаленные столбцы" = Table.SelectColumns(Источник,{"Name"}),
    #"Добавлен пользовательский объект" = Table.AddColumn(#"Другие удаленные столбцы", "Nam", each FromExcel),
    #"Развернутый элемент Nam" = Table.ExpandTableColumn(#"Добавлен пользовательский объект", "Nam", {"Сотрудник", "Оклад", "Дожность"}, {"Nam.Сотрудник", "Nam.Оклад", "Nam.Дожность"})
in
    #"Развернутый элемент Nam"
Скрытый текст


Структура запроса FromExcel для получения данных из Файла:
Код
let
    Источник = Excel.Workbook(File.Contents("F:\Обучение\макросы_тренинг\Power Query\ОМ.xlsx"), null, true),
    Лист1_Sheet = Источник{[Item="Лист1",Kind="Sheet"]}[Data],
    #"Повышенные заголовки" = Table.PromoteHeaders(Лист1_Sheet),
    #"Измененный тип" = Table.TransformColumnTypes(#"Повышенные заголовки",{{"Сотрудник", type text}, {"Оклад", Int64.Type}, {"Дожность", type text}}),
    #"Строки с применным фильтром" = Table.SelectRows(#"Измененный тип", each ([Дожность] = "нач"))
in
    #"Строки с применным фильтром"
Скрытый текст

Собственно, нужно каким то образом заменить имя "ОМ" на параметр. Я так думаю, параметр будет определяться в 1-м запросе - там ведь у нас имя файла есть..но как это осуществить..? Язык М не знаю, кто может для тупого объяснить?

PS Николай, было бы здорово, если бы вы начали добавлять на сайт ролики с применением PQ :)
Изменено: NikitaV - 08.05.2016 21:49:49
Заливка массива на лист через vba, макрос заливает лишь 1 элемент массива
 
Hugo, спасибо! Транспонирование через Application помогло.
Заливка массива на лист через vba, макрос заливает лишь 1 элемент массива
 
у меня родилась идея, быть может он строку пытается записать в столбец..и соответственно проставляет лишь 1 элемент. Т.о необходимо массив транспонировать...ща проверю.

Не прокатило.
Изменено: NikitaV - 06.04.2015 18:13:03
Заливка массива на лист через vba, макрос заливает лишь 1 элемент массива
 
почему 2-мерный? у меня массив одномерный..
Заливка массива на лист через vba, макрос заливает лишь 1 элемент массива
 
Всем добрый день! Вопрос по VBA. Записал массив, теперь хочу его обратно вылить на др. лист. Пользуюсь следующим:
ActiveSheet.Range(Cells(2, 1), Cells(n + 1, 1)) = Array_Contragent_Name

В результате получаю столбец состоящий лишь из 1-го элемента массива! Массив записано корректно, проверял через msgbox, имена записались верно, а вот назад чет не выходит извлечь. Подскажите где накосячил, пожалуйста.
Страницы: 1 2 След.
Наверх