Страницы: 1
RSS
Найти в файле А пользовательское значение и перенести в файл Б всю строчку, содержащее данное значение
 
Доброго времени суток, имеется следующая задача: найти в файле А пользовательское значение и перенести в файл Б всю строчку, содержащее данное значение, причем предварительно вставив туда пустую строчку.
Скорее всего, я тут наваял кучу лишнего, просто с вба еще в процессе знакомства(если будут советы, с чем можно ознакомиться на данную тематику - было бы круто)
На данный момент работает все, кроме непосредственной вставки значений, но что с ними делать - понятия не имею.

Код
Sub smth()
    
    Dim ItemName$
    Dim n%
    Dim i&
    Dim m&
    Dim ins&
    Dim A As Workbook
    Dim z As Range
    Dim k As Range
    Dim x As Variant
    Dim y As Variant
    Dim q As Variant
    Dim w As Variant
    
    Set k = Range("D:D")
              
    ItemName = InputBox("Введите название статьи")
    x = InputBox("Введите начало диапазона для вставки", , "A")
    y = InputBox("Введите начало диапазона для вставки", , "15")
    q = InputBox("Введите конец диапазона для вставки", , "H")
    w = InputBox("Введите конец диапазона для вставки", , "15")
        For Each z In k
            If z.Value = ItemName Then
            m = 0

            Workbooks("2.").Activate
            Sheets(1).Cells(ActiveCell.Row + 1, 1).Resize(1).EntireRow.Insert
            Workbooks("A2019").Activate
             Range(Cells(m, 4), Cells(m, 12)).Copy _
             Destination:=Workbooks("2.").Sheets(1).Range(Workbooks("2.").Sheets(1).Cells(x, y + m), Workbooks("2.").Sheets(1).Cells(q, w + m))
            Workbooks("A2019").Activate
                m = m + 1
            End If
        Next
        countvalues = m
        i = Cells(Rows.Count, 1).End(xlUp).Row
        MsgBox ("Всего" & " " & i & " " & "Количество по заданной статье" & " " & m)
   
End Sub     
 
1. поиск в файле А будет быстрее, если понимать на каком листе искать данные
пользовательское значение случайно найденное на другом листе приведет к неожиданным результатам
2. программисту, который решиться написать код, нужно будет понимать в какой лист файла Б вставить найденную строку, а уже когда это известно, точно также нужно понимать в какую строку вставить найденную и как именно это сделать.

я понимаю, что у вас в голове есть абсолютно четкий план, как это сделать, но пока этот план находиться только в вашей голове - вам самому решать эту задачу
или... навалятся гадальщики, и кто-то из них непременно угадает как нужно было сделать (напишет код полностью соответствующий плану в вашей голове, готовы оценить вероятность того, что именно так и случится?)
Изменено: Ігор Гончаренко - 13.01.2020 15:32:49
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
DLUA написал:
причем предварительно вставив туда пустую строчку.
А зачем вставлять пустую строку ? И да, решение было бы предложено гораздо быстрее. если вы выложите файлы для примера "как есть" и "как надо"
 
Ігор Гончаренко, сейчас постараюсь сделать файлы-примеры, просто скинуть имеющиеся файлы - не могу, несколько конфиденциальная информация.
Цитата
Андрей_26 написал:
А зачем вставлять пустую строку ? И да, решение было бы предложено гораздо быстрее. если вы выложите файлы для примера "как есть" и "как надо"
В данном случае файл Б - таблица, которую нужно дополнить файлом А, новые строчки нужны для того, чтобы не нарушать ее структуру.
 
Надеюсь, так будет понятнее
 
Ну честно говоря легче ни стало. Можете взять реальный кусок таблицы (измените в нем данные, если есть какая то ценная информация). Сделайте "как есть" и покажите пример "как надо" что бы получилось. С пояснением какую информацию ищем в каком столбце (диапазоне)
 
Переделал.
Собственно, суть - в книге А мы ищем все строки с нужной Статьей Затрат(в примере - Подрядные работы), копируем все и вставляем в книгу Б в соответствующее место(в примере A10:G10), повторяется многократно, так как статей - куча.
Забыл упомянуть один момент: в примере - строчка со статьями в столбца А, в коде, который я оставлял выше - D.
Изменено: DLUA - 13.01.2020 18:03:13
 
Вопросы:
1) Вам обязательно копировать эту всю информацию ? Если вам нужна только сумма для подсчета - то копировать ничего не нужно, можно и так посчитать.
2) "в примере - Подрядные работы" - будет только один признак поиска (одна статья) ? Или их будет много - тогда нужен весь перечень и где это взять ?
3) По какому признаку я должен определить, что вставлять статью затрат (подрядные работы) нужно именно под пункт 1.2 (Расходы на оплату работ и т.д.) ? Ну и соответственно, если статей для поиска будет много - то как определить куда это все вставлять ?
 
1. Нужна вся информация
2. Только название статьи
3. Тут только "ручками" статьи постоянно меняются, поэтому и думал так проставлять
Изменено: DLUA - 13.01.2020 21:56:34
 
Немного переделал копирование и теперь получаю type mismatch
Код
Sub smth()
    
    Dim ItemName$
    Dim n%
    Dim i&
    Dim m As Variant
    Dim ins&
    Dim A As Workbook
    Dim z As Range
    Dim k As Range
    Dim x As Variant
    Dim y As Variant
    Dim q As Variant
    Dim w As Variant
    
    Set k = Range("D:D")
              
    ItemName = InputBox("Введите название статьи")
    x = InputBox("Введите начало диапазона для вставки", , "A")    
    y = InputBox("Введите начало диапазона для вставки", , "15")
    q = InputBox("Введите конец диапазона для вставки", , "H")
    w = InputBox("Введите конец диапазона для вставки", , "15")

        For Each z In k
            If z.Value = ItemName Then
            m = 0

            Workbooks("2.").Activate
            Sheets(1).Cells(ActiveCell.Row + 1, 1).Resize(1).EntireRow.Insert
            Workbooks("A2019").Worksheets(1).Range(Cells(m, 4), Cells(m, 12)).Value = _
            Workbooks("2.").Worksheets(1).Range(Cells(x + m, y), Cells(q + m, w)).Value
            Workbooks("A2019").Activate
                m = m + 1
            End If
        Next
        countvalues = m
        i = Cells(Rows.Count, 1).End(xlUp).Row
        MsgBox ("Всего" & " " & i & " " & "Количество по заданной статье" & " " & m)
        
            If m = 0 Then Exit Sub
        
          
        
End Sub

Изменено: DLUA - 14.01.2020 08:42:48
 
Может так.
"Все гениальное просто, а все простое гениально!!!"
 
Почти то, что нужно, не подскажете, косяк был в том, что я объявлял переменными диапазон, а не назначил массив?
 
Если почти, то что не так?
Цитата
DLUA написал:
косяк был в том, что я объявлял переменными диапазон,
Не в курсе, мне ваш код непонятен, писал свой по вопросу, ваш разбирать не стал.
"Все гениальное просто, а все простое гениально!!!"
 
Ясно, в любом случае большое спасибо.
 
Почему
Цитата
DLUA написал:
Почти то, что нужно
, что в итоге не так?
"Все гениальное просто, а все простое гениально!!!"
 
Вставка осуществляется, на сколько я понял в первую пустую строчку, без добавления пустых строче, но тут, я, надеюсь, смогу сам доделать, а то так и не разберусь во всем.
Еще раз спасибо
Изменено: DLUA - 14.01.2020 13:12:25
 
Цитата
DLUA написал:
Вставка осуществляется, на сколько я понял в первую пустую строчку, без добавления пустых строче
Совершенно верно, нет смысла вставлять строки, если снизу весь лист пустой
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Nordheim написал:
Совершенно верно, нет смысла вставлять строки, если снизу весь лист пустой
Собственно, дело в том, что нужно вставить определенные статьи под определенные строчки и там не пустого листа под каждую, в примере рассматривается только 1 из многих статей затрат.
Но эти части в любом случае несущественны в виду того, что большая часть проблем у меня была с копированием нужного диапазона.
Страницы: 1
Наверх