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

Страницы: 1
Фильтр таблиц с разных листов на третий по условию
 
Всем привет
Подскажите пожалуйста как можно из одного массива сделать другой по условию т.е. есть таблица которая находится в массиве (лист2) и таблица которая тоже находится в массиве (лист1) с условием в столбце 2 (статус) - нужно сформировать новый массив из листа2 при этом чтобы статус равен 1 т.е. итоговый результат находится в таблице (лист результат) который тоже в массиве.
Изменено: vikttur - 25.11.2021 13:56:42
Добавление уникальных данных в словарь с ключом VBA
 
Доброго времени. Подскажите пожалуйста только начинающему постигать тонкости VBA можно ли добавить в словарь уникальные значения (ключ) из разных источников.
Есть  "рабочая книга"  в ней лист "рабочий" и нужно из столбца С "код" добавить словарь и столбец D "имя" это элементы при этом если в столбец С содержит не код а ГР_ тогда открываем файл группы и добавляем код и имя как ключ и элемент соответственно

Во вложении пример и на листе "Что должно получиться" итоговая таблица которая должна быть записана в самом макросе
Добавление строк в конце таблицы с комментарием VBA
 
Доброго времени, подскажите пожалуйста можно ли как то автоматически добавлять строки из одной таблицы (лист Старая) на лист (новая) по условию что их не было в листе новая - как должно быть привел на листе 1(новая)

Заранее благодарю
Добавление строки по условию в таблицу c помощью VBA
 
Доброго времени. Подскажите пожалуйста можно ли доработать макрос чтобы если при сравнении нет в одной таблицы переносил всю строку с ее данными в новую в той же последовательности(очередности) что и была с комментарием в соседнем столбце "позиция удалена"

Исходные данные - есть в книги (листа) старые данные и новые данные - макрос по сцепке проверяет данные и при нахождении расхождении записывает комментарий, но что ли как обратно его скорректировать (запустить) на проверку не пойму
Код
Sub mrshkei()


Dim sh As Worksheet, sh2 As Worksheet, arr, arr2, arr3
Dim i As Long, n As Long, k As Long, lr As Long, lr2 As Long
   
    Set sh = Worksheets("Íîâàÿ_ïàðòèÿ"):
    Set sh2 = Worksheets("Ñòàðàÿ_ïàðòèÿ")
   
    lr = sh.Cells(Rows.Count, 1).End(xlUp).Row
    lr2 = sh2.Cells(Rows.Count, 1).End(xlUp).Row
   
    arr = sh.Range("A1:J" & lr)
    arr2 = sh2.Range("A1:I" & lr2)
        ReDim arr3(1 To UBound(arr), 1 To 2)
 
        For i = LBound(arr) + 1 To UBound(arr)
        k = 0
        For n = LBound(arr2) + 1 To UBound(arr2)
        If arr(i, 1) = arr2(n, 1) Then
        k = k + 1
        If arr(i, 7) - arr2(n, 7) <> 0 Then
            arr3(i - 1, 1) = "èçìåíåíèå îáúåìà"
            arr3(i - 1, 2) = arr2(i - 1, 7)
            Exit For
        Else
            arr3(i - 1, 1) = Empty
            arr3(i - 1, 2) = Empty
        End If
        End If
        If k = 0 Then
            arr3(i - 1, 1) = "äà"
            arr3(i - 1, 2) = "íîâàÿ ïîçèöèÿ"
        End If
    Next n
Next i
 
sh.Range("I2").Resize(UBound(arr3), 2) = arr3


End Sub
Динамические массивы и словари для новичка
 
Доброго времени суток!

Подскажите пожалуйста можно ли сформулировать шаблонный алгоритм (код) для задачи:

Есть книга1(источник данных) и книга 2(куда будем переносить данные).
Цель - перенести некоторое количество N столбцов и M строк из книги1 в книгу2 по разным условиям

к примеру - только столбцы 1,4,10,6,78,210 при условии что в столбце 110 содержится фильтр не равно "ПП"
или - по сцепке (столбец1,2,5,7) за 40 и 42 неделю

Как я понял нужно загрузить данные в динамический массив с условием, потом создать словарь с ключом и по нему выгрузить в книгу 2, но VBA только начинаю постепенно осваивать, поэтому не совсем пойму как это записать.

Или есть более экономичный способ так как в книге1 от 500 тыс строк
Скопировать данные конкретных столбцов из одной таблицы в другую
 
Доброго времени планетяни!

Подскажите пожалуйста можно ли доработать макрос чтобы он копировал не все столбцы а конкретные. которые заданы  на листе Result
В источнике более 200 тыс. строк
Код
Sub Макрос3()
    Dim arrData(), arrResult(), fRegion
    Dim CriteriaColumn As Integer
    Dim CurrentRow As Long, i As Long, j As Long
    
    fRegion = "Калининград"
    CriteriaColumn = 5
    
    arrData = Sheets("Data").Cells(2, 1).CurrentRegion.Value
    ReDim arrResult(1 To UBound(arrData, 1), 1 To UBound(arrData, 2))
    
    i = 1
    CurrentRow = 1
    For j = 1 To UBound(arrData, 2)
        arrResult(CurrentRow, j) = arrData(i, j)
    Next j
    CurrentRow = CurrentRow + 1
    
    For i = 2 To UBound(arrData, 1)
        If arrData(i, CriteriaColumn) = fRegion Then
            For j = 1 To UBound(arrData, 2)
                arrResult(CurrentRow, j) = arrData(i, j)
            Next j
            CurrentRow = CurrentRow + 1
        End If
    Next i
    
    With Sheets("result")
        .Cells.Clear
        .Range(.Cells(1, 1), .Cells(CurrentRow, UBound(arrData, 2))).Value = arrResult
    End With
  
End Sub

И как можно его же запускать если это разные книги, а не листы?

Указание активной книги/листа через команду  Workbook("Имя книги").Activate не работает
Изменено: vikttur - 16.09.2021 21:04:22
Сравнение стоимости товаров в рамках одного периода и категории
 
Доброго времени суток.

Подскажите пожалуйста как можно решить вопрос сравнения 2 значений и разных таблиц через vba или где можно посмотреть/почитать. Макросы только начинаю изучать и буду рад любому пинку/подсказке.

Смысл такой - есть 2 таблицы за разные периоды. необходимо их сравнить по Колонке - Количество и рядом указать причину изменения если такая есть

Файл во вложении где процедуру идею сформулировал формулами.

Заранее благодарю
Изменено: vikttur - 15.09.2021 10:23:32
Перенос данных из одной таблицы в другую по названию столбцов
 
Доброго времени суток. Подскажите пожалуйста как можно оптимизировать макрос? Изучаю vba недавно и не знаю всех тонкостей.
Сейчас макрос работает корректно и все обновляет, но если добавить листы то происходит ошибка. Как я понял нужно убрать цикличность и как то указать лист источник и лист куда вставляем (с чем сравниваем)
Код
Sub CopyData()
              
                
        Dim wbkX As Workbook                        'книга
        Dim shtSv As Worksheet, shtX As Worksheet   'листы
        Dim rngSv As Range, rngX As Range           'диапазоны
  
        Dim NrowSv As Long, NrowX As Long           'число строк
        Dim NcolSv As Integer, NcolX As Integer     'число столбцов

        Dim TitleSv, TitleX         '"будущие" массивы заголовков
        Dim i As Long, j As Long    'счетчики циклов

        Dim rngCopy As Range, rngPaste As Range     'что копировать и куда вставить


            Set wbkX = ThisWorkbook
  
  '= 1 == для листа "лист1" ======================
  Set shtSv = wbkX.Worksheets("Лист1")
  Set rngSv = shtSv.Range("A1").CurrentRegion
  NrowSv = rngSv.Rows.Count
  NcolSv = rngSv.Columns.Count
  TitleSv = rngSv.Rows(1)
  
  '= 2 == Цикл по всем листам, кроме "Лист1" ======================
  For Each shtX In wbkX.Worksheets
    Select Case shtX.Name
      Case "Лист1"   'для листа "реестр" - ничего не делаем!
      Case Else       '-- 3 -- для прочих листов ---------
        Set rngX = shtX.Range("A1").CurrentRegion
        NrowX = rngX.Rows.Count
        NcolX = rngX.Columns.Count
        TitleX = rngX.Rows(1)
        '-- 4 -- поиск совпадающих заголовков ---------
        For i = 1 To NcolSv
          For j = 1 To NcolX
            '-- 5 -- если заголовки совпали, то ...
            If TitleSv(1, i) = TitleX(1, j) Then
  '- 6 - что копировать ----
  Set rngCopy = Range(rngX.Cells(2, j), rngX.Cells(NrowX, j))
  '- 7 - куда вставить  ----
  Set rngPaste = rngSv.Cells(1 + 1, i).Resize(NrowX - 1, 1)
  '- 8 - копирование через буфер обмена -----
     rngCopy.Copy
     rngPaste.PasteSpecial
             End If
          Next j
        Next i
        '-- 9 -- определить новые размеры диапазона на листе "Лист1"  ---
        Set rngSv = shtSv.Range("A1").CurrentRegion
        NrowSv = rngSv.Rows.Count
    End Select
  Next shtX   '== конец цикла по листам ========================================
                
End Sub
Изменено: vikttur - 14.09.2021 13:05:01
Перенос данных из одной книги в другую с помощью VBA, Перенос определенных данных по совпадению имени заголовка с условими
 
Здравствуйте, помогите пожалуйста подкорректировать макрос для переноса данных из одной книги в другую.

Есть файл Источник  "Исходные данные.xlsx" из которого необходимо регулярно обновлять данные в файл "Сохраненые файлы.xlsm"
При этом есть условия выбора:
1. Выбирать только те строки где есть значения, если пусто то пропускаем всю строку во всех столбцах
2.  Чтобы обновление работало если в файле Исходные данные.xlsx заголовок начинается не с первой строки а в файле Сохранённые файлы.xlsm есть другие листы
3. При запуске файл "Сохраненые файлы.xlsm"  должен обновляться заново
4. Необходимо добавить 2 столба в файл "Сохраненые файлы.xlsm" с разницей чисел столбца "Шапка 13"-  - которые вновь обновились от такого же столбца но в другой книге

Подскажите пожалуйста как можно это скорректировать или направьте пожалуйста на источник где можно почитать/посмотреть похожие алгоритмы

Сейчас работает только если в книгах по одному листу и начала данных с ячейки А1:
Код
Sub CopyData()
        Dim wrkSv As Workbook
        
        'Открываем книгу источник откуда будем копировать данные
        Set wrkSv = Workbooks.Open("C:\Users\sega4\OneDrive\Рабочий стол\Первый проект\Исходные данные.xlsx")
                   
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    Workbooks("Исходные данные.xlsx").Activate
    Sheets("Лист1").Select
    Sheets("Лист1").Copy After:=Workbooks("Сохраненые файлы.xlsm").Sheets(1)
           
    'Закрываем книгу откуда мы скопировали данные
    Workbooks("Исходные данные.xlsx").Close
        
                
        Dim wbkX As Workbook                        'книга
        Dim shtSv As Worksheet, shtX As Worksheet   'листы
        Dim rngSv As Range, rngX As Range           'диапазоны
  
        Dim NrowSv As Long, NrowX As Long           'число строк
        Dim NcolSv As Integer, NcolX As Integer     'число столбцов

        Dim TitleSv, TitleX         '"будущие" массивы заголовков
        Dim i As Long, j As Long    'счетчики циклов

        Dim rngCopy As Range, rngPaste As Range     'что копировать и куда вставить


            Set wbkX = ThisWorkbook
  
  '= 1 == для листа "реестр" ======================
  Set shtSv = wbkX.Worksheets("реестр")
  Set rngSv = shtSv.Range("A1").CurrentRegion
  NrowSv = rngSv.Rows.Count
  NcolSv = rngSv.Columns.Count
  TitleSv = rngSv.Rows(1)
  
  '= 2 == Цикл по всем листам, кроме "Лист1" ======================
  For Each shtX In wbkX.Worksheets
    Select Case shtX.Name
      Case "реестр"   'для листа "реестр" - ничего не делаем!
      Case Else       '-- 3 -- для прочих листов ---------
        Set rngX = shtX.Range("A1").CurrentRegion
        NrowX = rngX.Rows.Count
        NcolX = rngX.Columns.Count
        TitleX = rngX.Rows(1)
        '-- 4 -- поиск совпадающих заголовков ---------
        For i = 1 To NcolSv
          For j = 1 To NcolX
            '-- 5 -- если заголовки совпали, то ...
            If TitleSv(1, i) = TitleX(1, j) Then
  '- 6 - что копировать ----
  Set rngCopy = Range(rngX.Cells(2, j), rngX.Cells(NrowX, j))
  '- 7 - куда вставить  ----
  Set rngPaste = rngSv.Cells(1 + 1, i).Resize(NrowX - 1, 1)
  '- 8 - копирование через буфер обмена -----
     rngCopy.Copy
     rngPaste.PasteSpecial
             End If
          Next j
        Next i
        '-- 9 -- определить новые размеры диапазона на листе "Лист1"  ---
        Set rngSv = shtSv.Range("A1").CurrentRegion
        NrowSv = rngSv.Rows.Count
    End Select
  Next shtX   '== конец цикла по листам ========================================
              
    'Удаление листа
    Worksheets("Лист1").Delete
         
   Application.ScreenUpdating = True
   Application.DisplayAlerts = True
   
End Sub

Заранее благодарю
Соединение множества значений через запятую
 
Подскажите пожалуйста существует ли альтернатива формуле сцепить и символу &?
Задача - есть столбец1 в котором много заполненных строк и их необходимо переформировать с строку через запятую.
Во вложении пример где данная задача решается с помощью формулы СЦЕПИТЬ, но это долго и можно ли как то оптимизировать или альтернативно сделать?

Спасибо
Условное форматирование ячеек по двум значениям в ячейках с разным типом данных
 
Здравствуйте, может кто сталкивался (в интернете и на форуме не нашел) как можно подсветить ячейки в зависимости от типа деятельности и времени т.е. если эти два параметра совпадают один цвет, если есть другие параметры то уже другой цвет. В файле то что смог сделать, форматирование только по времени. Спасибо
Вычисление уровня подготовки по нормативам
 
Здравствуйте, подскажите пожалуйста как получить формулу в столбце I чтобы автоматически проставлял исходя из данных листа Нормативы.
Если тема где то встречалась можете пожалуйста дать ссылку
Распределение товара по магазинам согласно наличию на складе
 
Здравствуйте, подскажите, пожалуйста, может кто сталкивался с ситуацией когда есть количество товара на складе и его надо оптимально переместить по магазинам. В файле образец где первые 2 листа данные а третий то что долг получится в итоге. Спасибо за помощь  
Изменено: PMO87 - 19.06.2019 15:39:59
К каждому значению списка 2 приставить значение списка 1
 
Здравствуйте, помогите решить задачу с помощью формулы либо инструментов Excel. Суть вопроса - есть список 1 (1,2,3,4,5 ...) и список 2 (A, B, C, D, E....) как автоматически к каждому значению списка 2 приставить значение списка 1 чтобы было 1A 1B 1C 1E 1D 2A 2B ...
Вроде логика простая, но не могу до думать. На практике списки по 100 и более строк.  
Перемещение товара с одного магазина на другой
 
Необходимо придумать автоматический расчет перемещения товара по такой логике - если в Городе 1 в Магазинах 1, 2, 3 есть товар 1 и он не продается т.е. продажи=0 то он должен переместиться в этом городе в зависимости от количества проданного в других магазинах. Чем больше продал тем больше везем. При этом помимо количества шт нужно чтобы показывало код магазина и товара что и откуда перемещается. Можно ли такое зашить?
Если в магазинах 1,2,3,4,5 остатки 0,2,0,5,3 а продажи 5,2,0,1,0 соотвественно, то распределение будет 4,3,0,2,0, но еще надо указать с какого магазина (код) было перемещено. На практике более 100 городов и 1000 магазинов с 10000 товаров
Страницы: 1
Наверх