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

Страницы: 1
Перенос данных из ячеек значениями из одной книги в другую - VBA
 
Начинает получаться. Помогите разобраться почему цикл For после успешного поиска первого листа (совпадение в названии в двух книгах) и вставки значений куда нужно, не переходит к такой же задаче на следующем листе?
Код
Sub Перенос_данных_в_БРЗ()
'Заключаем данную книгу в переменную
Dim tWB As Workbook
Set tWB = ThisWorkbook

'Указываем путь в файлу БРЗ
Dim nWB As Variant
Set nWB = Workbooks.Open(Filename:="D:\VB\Перенос значений\БРЗ.xlsx")

'Организовываем цикл по листам со сверкой их названий (лист присутствует в обеих книгах)
Dim shA As Worksheet
Dim shB As Worksheet
Dim arr

For Each shA In tWB.Sheets 'лист в Сверке
   For Each shB In nWB.Sheets 'лист в БРЗ
    If shA.Name = shB.Name Then
        If Not IsArray(arr) Then
            ReDim arr(1 To 1): arr(1) = shA.Name
                shA.Range("B4").Copy
                shB.Activate
                shB.Range("C4").PasteSpecial xlPasteValues
                
                shA.Activate
                
                shA.Range("C4").Copy
                shB.Activate
                shB.Range("C5").PasteSpecial xlPasteValues
                
                shA.Activate
                
                shA.Range("D4").Copy
                shB.Activate
                shB.Range("C6").PasteSpecial xlPasteValues: Exit For
    Else
        ReDim Preserve arr(1 To UBound(arr) + 1)
            arr(UBound(arr)) = shA.Name
                MsgBox ("Такого листа нет в БРЗ")
        End If
    End If
  Next
Next

End Sub
И не могу понять, почему итерации второго и третьего листов появляется msgbox, ведь листы называются так же.

Даже, когда цикл видит, что Лист "Признак 2" из одной книги равен "Признак 2" из другой, все равно он исполняет "Иначе".

Если часть кода закомментрировать, то цикл работает, но вариант с "Иначе" работает неправильно:
Код
Sub Перенос_данных_в_БРЗ()
'Заключаем данную книгу в переменную
Dim tWB As Workbook
Set tWB = ThisWorkbook

'Указываем путь в файлу БРЗ
Dim nWB As Variant
Set nWB = Workbooks.Open(Filename:="D:\VB\Перенос значений\БРЗ.xlsx")

'Организовываем цикл по листам со сверкой их названий (лист присутствует в обеих книгах)
Dim shA As Worksheet
Dim shB As Worksheet
Dim arr

For Each shA In tWB.Sheets 'лист в Сверке
   For Each shB In nWB.Sheets 'лист в БРЗ
    If shA.Name = shB.Name Then
        'If Not IsArray(arr) Then
            'ReDim arr(1 To 1): arr(1) = shA.Name
                shA.Range("B4").Copy
                shB.Activate
                shB.Range("C4").PasteSpecial xlPasteValues
                
                shA.Activate
                
                shA.Range("C4").Copy
                shB.Activate
                shB.Range("C5").PasteSpecial xlPasteValues
                
                shA.Activate
                
                shA.Range("D4").Copy
                shB.Activate
                shB.Range("C6").PasteSpecial xlPasteValues ': Exit For
    Else
        'ReDim Preserve arr(1 To UBound(arr) + 1)
            'arr(UBound(arr)) = shA.Name
                MsgBox ("Такого листа нет в БРЗ") 'ПОЯВЛЯЕТСЯ КАЖДЫЙ РАЗ ПРИ СОПОСТОВЛЕНИИ РАЗНЫХ ЛИСТОВ. НАДО ЧТОБЫ ПОЯВЛЯЛСЯ, КОГДА ЛИСТА НЕТ В КНИГЕ
        End If
    'End If
  Next
Next

End Sub
Изменено: iromanvasilyev - 26.03.2018 19:44:35
Перенос данных из ячеек значениями из одной книги в другую - VBA
 
Hugo,в книге есть не только рабочие листы. Пока пытаюсь написать так, чтобы после того, как цикл найдет лист, копировались значения с этого листа на лист с таким же названием во второй книге в соответствующую ячейку.
Перенос данных из ячеек значениями из одной книги в другую - VBA
 
Anchoret, спасибо. ошибка не появляется. А что делает 18, 19, 21 и 22 строчки?
Перенос данных из ячеек значениями из одной книги в другую - VBA
 
Все равно, до цикла дошел и ошибка:
Код
Sub Перенос_данных_в_БРЗ()
'Заключаем данную книгу в переменную
Dim tWB As Workbook
Set tWB = ThisWorkbook

Dim nWB As Variant
'Указываем путь в файлу БРЗ
Set nWB = Workbooks.Open(Filename:="D:\VB\Перенос значений\БРЗ.xlsx")

'Организовываем цикл по листам со сверкой их названий (лист присутствует в обеих книгах)
Dim shA As Worksheet
Dim shB As Worksheet
Dim arr() As String

For Each shA In tWB
  For Each shB In nWB
    If shA.Name = shB.Name Then
      If Not IsArray(arr) Then
        ReDim arr(1 To 1): arr(1) = shA.Name: Exit For
      Else
        ReDim Preserve arr(1 To UBound(arr) + 1)
        arr(UBound(arr)) = shA.Name: Exit For
      End If
    End If
  Next
Next

End Sub
Перенос данных из ячеек значениями из одной книги в другую - VBA
 
Спасибо. Не могу понять почему появляется ошибка:
Код
Sub Перенос_данных_в_БРЗ()
'Заключаем данную книгу в переменную
Dim tWB As Workbook
Set tWB = ThisWorkbook

Dim nWB As Range
'Указываем путь в файлу БРЗ
Set nWB = Worksheets("ПЕРЕНОС в БРЗ").Range("C2")

'Открываем файл с БРЗ
Workbooks.Open Filename:=nWB

'Организовываем цикл по листам со сверкой их названий (лист присутствует в обеих книгах)
Dim shA As Worksheet
Dim shB As Worksheet
Dim arr() As String

For Each shA In tWB
  For Each shB In nWB
    If shA.Name = shB.Name Then
      If Not IsArray(arr) Then
        ReDim arr(1 To 1): arr(1) = shA.Name: Exit For
      Else
        ReDim Preserve arr(1 To UBound(arr) + 1)
        arr(UBound(arr)) = shA.Name: Exit For
      End If
    End If
  Next
Next

End Sub
Изменено: iromanvasilyev - 25.03.2018 11:21:29
Перенос данных из ячеек значениями из одной книги в другую - VBA
 
Добрый день.
На работе появился процесс, который хочется автоматизировать, но не знаю как.
Есть 2 книги Excel. Первая с исходной информацией (Сверка), второй - конечный файл (БРЗ). В данных книгах большое количество листов - около 200. Названия этих листов в первой книге такое же как и во второй. В книге "Сверка" есть лист "Перенос в БРЗ". На данной листе указываются технические параметры для работы будущего макроса, а именно:
1. Путь к файлу, в который необходимо перенести данные;
2. Список листов, которые нужно найти в книге "БРЗ". В книге "Сверка" листы называются точно так же. Их количество может увеличиваться или уменьшаться. Порядок так же может меняться;
3. Адреса данных, которые нужно перенести в книгу "БРЗ";
4. Месяц. От Выбора месяца (будет выпадающий список) будет зависеть столбец в файле "БРЗ", в который будут перенесены значения. Другие столбцы должны будут остаться без изменений;
5. Строки в файле "БРЗ", в которых находятся ячейки, в которые нужно вставить данные.

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

Использовать связи в данном случае нельзя.
Оба файла прикрепляю.

Пока смог написать только такое:
Код
Option Explicit

Sub Перенос_данных_в_БРЗ()

Dim oRange As Range
'Указывает путь в файлу БРЗ
Set oRange = Worksheets("ПЕРЕНОС в БРЗ").Range("C2")

'Открываем файл с БРЗ
Workbooks.Open Filename:=oRange

Dim sh As Worksheet

Dim lists As Range
Set lists = Workbooks("Сверка.xlsb").Worksheets("ПЕРЕНОС в БРЗ").Range("C5")

For Each sh In Worksheets
If sh.Name = lists Then Exit For
MsgBox ("Good!")

Next
If sh Is Nothing Then MsgBox "Лист " & lists & " не найден": Exit Sub
End Sub
Спасибо.
СЦЕПИТЬ пропуская пустые ячейки
 
Всем спасибо. Разобрался с вашей помощью.
СЦЕПИТЬ пропуская пустые ячейки
 
А сумма и "тыс руб" может разделяться пробелом?
Сумма значений из ячейки с цифрами + текст
 
Цитата
iromanvasilyev написал:
Если в ячейках больше двух-трех кмментариев, то лучше суммировать макросом.
Наверняка будет более трех комментариев.

Цитата
iromanvasilyev написал:
-10 тыс руб. - а может быть другая единица или записано по-другому? Например: 235 руб, 1562 руб, 2 тыс. 562 руб?
Да может. Например может быть так: -948 тыс руб. - Комментарий 1; +1 548 тыс руб. - Комментарий 2; -154 566 тыс руб. - Комментарий 3.
Сумма значений из ячейки с цифрами + текст
 
Цитата
vikttur написал:
Лень было файл исправить? Зачем по две задачи?
Не лень, я указал ячейки на которые надо обращать внимание - E9 и E12.
В будущем так делать не буду :)
Сумма значений из ячейки с цифрами + текст
 
Добрый день. Нужно из ячейки, в которой написаны суммы и их расшифровка, например -10 000 тыс руб. - Отклонение 1; -15 000 тыс руб. - Отклонение 2, вытащить суммы 10 тысяч и 15 тысяч. Суммы могут быть разными, поэтому ЛЕВСИМВ не работает.

Пример прикрепляю к письму.
Ячейки Е9 и Е12

Заранее спасибо
СЦЕПИТЬ пропуская пустые ячейки
 
Добрый день.
Прошу помощи в решении двух вопросов.
Имеется таблица excel с анализом затрат - было-стало-отклонение-комментарии. Необходимо в колонке "Комментарии" сделать так, чтобы в одну ячейку консолидировались комментарии из  заданных ячеек. Важно чтобы каждый комментарий в консолидирующей ячейке начинался с новой строки, а так же чтобы не создавался пустой абзац в случае, если ячейка, из которой берется комментарий пустая.

Второй вопрос удален (см. правила) [МОДЕРАТОР]

Пример прикрепляю к письму.
Заранее благодарю.
Из большого массива наименования договоров вытащить только его номер
 
Zao83,спасибо. Ваш вариант отлично подошёл.
Из большого массива наименования договоров вытащить только его номер
 
Нашел способ через ЛЕВСИМВ. Все номера договоров начинаются на цифру 7. Я через ПОИСК определил порядковый номер этой 7. А потом через ПСТР извлёк нужное количество знаков после 7
Из большого массива наименования договоров вытащить только его номер
 
Может я что то не понял, но по вашей формуле знаки считаются с начала строки, а этот вариант не подходит, т.к. в каждой строке разное количество знаков до начала номера договора. Нужно считать знаки от "/" влево.
Из большого массива наименования договоров вытащить только его номер
 
Добрый день. Стоит задача из большого массива наименования договоров вытащить только его номер и отсечь остальной текст. Номер договора всегда имеет такой вид: 1234567/8910. Но слева и справа всегда есть какой то текст и он всегда разный, поэтому ЛЕВСИМВ применить не получается. У меня получилось через функцию ПОИСК посчитать каким по счету в ячейке является знак "/" и потом уже через ПСТР взять нужные ме четыре знака после "/". Но нужно ещё взять 7 знаков до "/", а вот это уже не получается. Может кто подскажет. Файл приложить не могу, т.к. пишу с телефона. Спасибо.
Макрос для проверки результата задания, Создание курса по Excel с возможностью моментальной проверки.
 
Всем спасибо за ответы. Наверное обойдусь простыми тестами.
Макрос для проверки результата задания, Создание курса по Excel с возможностью моментальной проверки.
 
AndreTM,вот именно, юзер может применить и другие формулы или вообще их не применять, а в ручную ответ подогнать. Но хотелось бы чтобы проверка отлавливала это.
Макрос для проверки результата задания, Создание курса по Excel с возможностью моментальной проверки.
 
Добрый день.
Кто умеет, подскажите, как можно реализовать такую идею.
Хочу создать некий простой курс для новичков в Excel у сотрудников нашей компании. Появилась идея сделать книгу с заданиями и с кнопкой моментальной проверки решения и выводом результата в ячейки - успех или неудача. Сами задания придумать несложно, а вот реализовать механизм проверки сложнее. Прошу помощи. Книгу с одним примером прикрепляю.
Поискпоз по не точному содержимому ячейки
 
Большое спасибо. Все получилось.  
Поискпоз по не точному содержимому ячейки
 
Файл добавил
Поискпоз по не точному содержимому ячейки
 
Добрый день!
Мне нужно решить такую задачу:
В книге Excel есть 3 листа: Массив1, Массив2, Исходники.
На первый двух листах в столбце А куча значений наподобие - Выручка, затраты, НДПИ, ВГО и много-много других. Тоже самое и на втором листе, только статьи другие. На листе "Исходники" так же есть перечень иногда с совпадающими значениями со значениями на листах "Массив 1" и "Массив2", а иногда уникальные.
Задача такая, нужно на листе "Исходники" в отдельном столбце показать - какие из значений на листе "исходники" встречаются на листах "массив1" и "массив2". Эту проблему я решил формулой:
Код
=ЕСЛИ(ЕЧИСЛО(ПОИСКПОЗ(A1;Массив1!$A$1:$A$2;0));"Есть";ЕСЛИ(ЕЧИСЛО(ПОИСКПОЗ(A1;Массив2!$A$1:$A$2;0));"Есть";"Значения нет")) 


Проблема в том, что например, на листе "Массив1" есть значение "Выручка, тыс.руб", а на листе "Исходники" просто "Выручка". Мне нужно чтобы в таких случаях формула показывала что есть значение "Выручка" на листе "массив1", пусть даже совпадение не идеальное.
Я попытался решить эту задачу такой формулой, через определенное количество совпадающих знаков слева,но что то не так:
Код
=ЕСЛИ(ЕЧИСЛО(ПОИСКПОЗ(ЛЕВСИМВ(A1;3);(ЛЕВСИМВ(Массив1!$A$1:$A$10;3));0));"Есть";ЕСЛИ(ЕЧИСЛО(ПОИСКПОЗ(ЛЕВСИМВ(A1;3);(ЛЕВСИМВ(Массив1!$A$1:$A$10;3));0));"Есть";"Значения нет"))
Изменено: iromanvasilyev - 20.04.2016 17:25:45
Массовая рассылка писем по адресам с завершением сообщением
 
The_Prist, спасибо, так стало еще лучше.
Массовая рассылка писем по адресам с завершением сообщением
 
The_Prist, а не, все получилось. просто стоило подождать.
Большое спасибо за помощь.  
Массовая рассылка писем по адресам с завершением сообщением
 
Спасибо. Получилось с первой копией. А со второй не вышло.
Массовая рассылка писем по адресам с завершением сообщением
 
А если такая ситуация:
Допустим разом мы отправляем 10 писем на один адрес [.to], но в копию 1 [.Cc] и копию 2 [.Cc] нужно чтобы улетело только первое письмо. Как быть в такой ситуации?
Спасибо за ответ.
Код
Private Sub Send()
    Dim objOutlookApp As Object, objMail As Object
    Dim sTo As String, sSubject As String, sBody As String, sAttachment As String
    Dim lr As Long, lLastR As Long
 
    Application.ScreenUpdating = False
    On Error Resume Next
   
    Set objOutlookApp = GetObject(, "Outlook.Application")
    Err.Clear
    If objOutlookApp Is Nothing Then
        Set objOutlookApp = CreateObject("Outlook.Application")
    End If
    
    If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub
    objOutlookApp.Session.Logon
 
    lLastR = Cells(Rows.Count, 1).End(xlUp).Row
    
    For lr = 2 To lLastR
        Set objMail = objOutlookApp.CreateItem(0)
       
        With objMail
            .to = Cells(1, 8).Value
            .Cc = Cells(2, 8).Value
            .Cc = Cells(3, 8).Value
            .Subject = Cells(4, 8).Value
            .Body = Cells(5, 8).Value
            .Attachments.Add Cells(lr, 2).Value
            .Send
        End With
    Next lr
 
    Set objOutlookApp = Nothing: Set objMail = Nothing
    Application.ScreenUpdating = True
    
End Sub
Как сместить в ячейке с ссылкой на значение из другого файла заданное количество строк вниз/вверх?
 
1. Обычно создается третий файл в который в столбец А вставляются скопированный названия статей из старого файла, а рядом в столбец В вставляются названия статей из нового файла. а потом в столбец С пишется формула, например =А1=В1, и протягивается до конца вниз. Где значения "ЛОЖЬ", значит что то не так.
2. По разному. В основном в ячейке, на которую я завязываюсь формула сложения например.
Как сместить в ячейке с ссылкой на значение из другого файла заданное количество строк вниз/вверх?
 
Здравствуйте!
На работе для практически всех форм отчетности используются таблицы Excel. Есть форматы, которые приходят из Компании к нам в фирму.Это огромные таблицы -около 1000 строк, а то и больше. А также есть наши рабочие формы, созданные нашим отделом, в которые из первых мы берем связями только те значения, которые нам нужны, а потом уже работаем с этими значениями - ставим нужные нам формулы расчета и тп.
Время от времени в те таблицы, которых приходят из компании вносятся изменения - добавляются или удаляются строки. В свою очередь, это сказывается на наших таблицах - нам приходится перезавязываться, либо изменять ссылку на ячейку через "найти/заменить", что тоже не самый быстрый вариант, если строк много.

Задача упростить этот процесс. В теории я это вижу таким образом:
После того, как в очередной раз пришла измененная форма (добавлены/удалены некоторые строки), например добавлено 2 строки вначале таблицы. Получается, что все что ниже сместилось на 2 строки. Через функцию "найти/заменить" я смогу изменять ссылки на ячейки только построчно (например, была ссылка на 5 строчку, я ее заменяю на 7 строчку).Это долго.
Хотелось бы, чтобы я я выделил диапазон в своей таблице, где необходимо сместить ссылки на 2 строчки вниз, указал что именно на 2 (в случае если надо сместить на другое количество, это можно было сделать), и нажатием какой-нибудь кнопки, например, "Сместить" - произошло чудо.
Потом вдруг в исходной таблице на какой-нибудь строке 500 удалят 5 строк. Надо чтобы я смог указать смещение в выделенном диапазоне на 5 строк вверх.

Также надо чтобы относительные/абсолютные ссылки оставались после таких манипуляций.

Также прикрепляю образец:
Листы:
Файл 1 - это мой файл, в котором связи на лист 2 - старый, уже адаптированный под таблицу из листа 1, и файл 3 - новый, код который нужно придумать быстрый способ адаптации ссылок.

Таблички маленькие, созданные только чтобы показать суть и может если есть такие формулы, написать их в этом файле.
Надеюсь написал понятно.

Цель - реализовать то, что написано выше, сверх цель, чтобы это работало и со столбцами. Например, по свежеприсланной таблице интересующие меня значения не в столбце "С", как было раньше, а в столбце "D".

Спасибо.
Формирования себестоимости по условиям, относящиеся на разные МВЗ
 
МВТ, спасибо. Такой вариант полностью устраивает.

Цитата
gling написал: А сводная не устроит?
Надо без сводной
Цитата
Vik_tor написал: В доптабличке такого вида (содержания) нет логики, если собрались отбирать  затраты по направлениям, то так их и обозначьте, ВПР допстолбец направление затрат, а дальше как у вас. Или сводная.
Столбец В должен быть именно таким. Он для других форм нужен именно в таком виде.


Всем спасибо.
Формирования себестоимости по условиям, относящиеся на разные МВЗ
 
Добрый день!
Есть необходимость вытащить по определенным условиям затраты из себестоимости.
В прикрепленном файле на листе "Производственная программа" в столбце А проставлены МВЗ. Справа есть табличка - расшифровка этих МВЗ. На следующем листе "Свод бюджетов" нужно поставить такую формулу, вместо той, которая стоит сейчас, которая бы собирала значения с первого листа по условию МВЗ относящиеся только лишь на Нефть и на Газ и условию названия статьи. А в ячейку В8 на листе "Свод бюджетов" собиралось бы все остальное.

Кто знает, как это сделать?
Страницы: 1
Наверх