Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Скопировать все непустые ячейки из одного файла в другой - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Скопировать все непустые ячейки из одного файла в другой
Sputnik Дата: Суббота, 14.07.2018, 05:41 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Приветствую.
Будет создан файл-шаблон. Из этого файла нужно скопировать все непустые ячейки в другой файл.
Более примитивно. В первом документе-шаблоне заполнены ячейки A1 = "Привет" и С8="Пока". При выполнении макроса в другой xls файл в лист 1 в ячейку A1 вносится "Привет" а в C8 "Пока".Остальные ячейки второго файла должны остаться без изменений.

Предполагаемые пути решения:
Запускать цикл по документу-шаблону и находить в нём непустые ячейки
Пока только ограничил диапозон поиска:
Цитата
lLastRow = Cells.SpecialCells(xlLastCell).Row
lLastCol = Cells.SpecialCells(xlLastCell).Column

Хочу в этом диапазоне произвести поиск и создать массив с номерами всех заполненных ячеек. Нужен синтаксис. Не знаю какой создать массив для номеров, не знаю каким условием проверять. Пока придумал только:
Цитата
For i = 1 To lLastCol
For j = 1 To lLastRow
If Len(......

Также интересует вопрос по заполнению листа. Если при открытии второго документа активным становится он, то как обратиться к документу-шаблону из которого запущен макрос?
Может объявить его вначале как глобальную переменную, а потом копировать из него значения по сформированному массиву?
Нужны примеры синтаксиса, как это реализовывается на VBA?


Сообщение отредактировал Sputnik - Суббота, 14.07.2018, 05:42
 
Ответить
СообщениеПриветствую.
Будет создан файл-шаблон. Из этого файла нужно скопировать все непустые ячейки в другой файл.
Более примитивно. В первом документе-шаблоне заполнены ячейки A1 = "Привет" и С8="Пока". При выполнении макроса в другой xls файл в лист 1 в ячейку A1 вносится "Привет" а в C8 "Пока".Остальные ячейки второго файла должны остаться без изменений.

Предполагаемые пути решения:
Запускать цикл по документу-шаблону и находить в нём непустые ячейки
Пока только ограничил диапозон поиска:
Цитата
lLastRow = Cells.SpecialCells(xlLastCell).Row
lLastCol = Cells.SpecialCells(xlLastCell).Column

Хочу в этом диапазоне произвести поиск и создать массив с номерами всех заполненных ячеек. Нужен синтаксис. Не знаю какой создать массив для номеров, не знаю каким условием проверять. Пока придумал только:
Цитата
For i = 1 To lLastCol
For j = 1 To lLastRow
If Len(......

Также интересует вопрос по заполнению листа. Если при открытии второго документа активным становится он, то как обратиться к документу-шаблону из которого запущен макрос?
Может объявить его вначале как глобальную переменную, а потом копировать из него значения по сформированному массиву?
Нужны примеры синтаксиса, как это реализовывается на VBA?

Автор - Sputnik
Дата добавления - 14.07.2018 в 05:41
Pelena Дата: Суббота, 14.07.2018, 07:33 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19373
Репутация: 4531 ±
Замечаний: ±

Excel 365 & Mac Excel
Здравствуйте.
Файл с примером помог бы в понимании проблемы


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЗдравствуйте.
Файл с примером помог бы в понимании проблемы

Автор - Pelena
Дата добавления - 14.07.2018 в 07:33
Exo Дата: Суббота, 14.07.2018, 14:42 | Сообщение № 3
Группа: Заблокированные
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
добрый день.
так-то можно через копи-пасте сделать.
Специальная вставка, Поставить галочку "Пропускать пустые ячейки"


А что такое вестибюль?
А что такое широкополосный интернет?
 
Ответить
Сообщениедобрый день.
так-то можно через копи-пасте сделать.
Специальная вставка, Поставить галочку "Пропускать пустые ячейки"

Автор - Exo
Дата добавления - 14.07.2018 в 14:42
Sputnik Дата: Суббота, 14.07.2018, 16:32 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте.
Файл с примером помог бы в понимании проблемы

Здравствуйте, прикрепил файл.
Сейчас загвоздка в нестабильной работе. При записи
Цитата
Public thisBook As Workbook
thisBook = ThisWorkbook

происходит ощибка,
Цитата
thisBook = nothing

Хотя при первых запусках программа выполнялась.
так-то можно через копи-пасте сделать.

Добрый день.Да, делал через Select, SpecialCells, и Pastle. Мне не понравилось, почему-то вставляется весь диапазон а не только заполненные ячейки.Да время выполнения долгое.
К сообщению приложен файл: Explicit_and_Ed.xlsm (21.0 Kb)


Сообщение отредактировал Sputnik - Суббота, 14.07.2018, 16:36
 
Ответить
Сообщение
Здравствуйте.
Файл с примером помог бы в понимании проблемы

Здравствуйте, прикрепил файл.
Сейчас загвоздка в нестабильной работе. При записи
Цитата
Public thisBook As Workbook
thisBook = ThisWorkbook

происходит ощибка,
Цитата
thisBook = nothing

Хотя при первых запусках программа выполнялась.
так-то можно через копи-пасте сделать.

Добрый день.Да, делал через Select, SpecialCells, и Pastle. Мне не понравилось, почему-то вставляется весь диапазон а не только заполненные ячейки.Да время выполнения долгое.

Автор - Sputnik
Дата добавления - 14.07.2018 в 16:32
Exo Дата: Суббота, 14.07.2018, 17:22 | Сообщение № 5
Группа: Заблокированные
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Встроенный макрос в Ваш пример позволяет перебирать все файлы в каталоге что ли?
Попробуйте просто удалить раздел "Option Explicit" из тела макроса, дальше разбираться лениво.


А что такое вестибюль?
А что такое широкополосный интернет?


Сообщение отредактировал Exo - Суббота, 14.07.2018, 17:30
 
Ответить
СообщениеВстроенный макрос в Ваш пример позволяет перебирать все файлы в каталоге что ли?
Попробуйте просто удалить раздел "Option Explicit" из тела макроса, дальше разбираться лениво.

Автор - Exo
Дата добавления - 14.07.2018 в 17:22
Exo Дата: Суббота, 14.07.2018, 17:59 | Сообщение № 6
Группа: Заблокированные
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Также интересует вопрос по заполнению листа. Если при открытии второго документа активным становится он, то как обратиться к документу-шаблону из которого запущен макрос?
Может объявить его вначале как глобальную переменную, а потом копировать из него значения по сформированному массиву?
Нужны примеры синтаксиса, как это реализовывается на VBA?


Если всё же следовать Вашему запросу, Синтаксис не сложный. Самое главное - должен быть уже создан и открыт "Новый файл.xlsm"
НО! НЕ ОН должен быть активным, а та книга. откуда пытаетесь перенести:

[vba]
Код
Sub Макрос1()

LastRow = Cells.SpecialCells(xlLastCell).Row
LastCol = Cells.SpecialCells(xlLastCell).Column
WB = ActiveWorkbook.Name 'присваиваем имя текущей книге
WB1 = "Новый файл.xlsm" 'присваиваем имя другой открытой книге, в которую надо перенести. "Новый файл@ - это имя уже открытой книги"
For i = 1 To LastRow
For j = 1 To LastCol
If Workbooks(WB).Sheets("Лист1").Cells(i, j).Value <> Empty Then
Workbooks(WB1).Sheets("Лист1").Cells(i, j).Value = Workbooks(WB).Sheets("Лист1").Cells(i, j).Value
End If
Next j
Next i

End Sub
[/vba]


А что такое вестибюль?
А что такое широкополосный интернет?
 
Ответить
Сообщение
Также интересует вопрос по заполнению листа. Если при открытии второго документа активным становится он, то как обратиться к документу-шаблону из которого запущен макрос?
Может объявить его вначале как глобальную переменную, а потом копировать из него значения по сформированному массиву?
Нужны примеры синтаксиса, как это реализовывается на VBA?


Если всё же следовать Вашему запросу, Синтаксис не сложный. Самое главное - должен быть уже создан и открыт "Новый файл.xlsm"
НО! НЕ ОН должен быть активным, а та книга. откуда пытаетесь перенести:

[vba]
Код
Sub Макрос1()

LastRow = Cells.SpecialCells(xlLastCell).Row
LastCol = Cells.SpecialCells(xlLastCell).Column
WB = ActiveWorkbook.Name 'присваиваем имя текущей книге
WB1 = "Новый файл.xlsm" 'присваиваем имя другой открытой книге, в которую надо перенести. "Новый файл@ - это имя уже открытой книги"
For i = 1 To LastRow
For j = 1 To LastCol
If Workbooks(WB).Sheets("Лист1").Cells(i, j).Value <> Empty Then
Workbooks(WB1).Sheets("Лист1").Cells(i, j).Value = Workbooks(WB).Sheets("Лист1").Cells(i, j).Value
End If
Next j
Next i

End Sub
[/vba]

Автор - Exo
Дата добавления - 14.07.2018 в 17:59
KuklP Дата: Суббота, 14.07.2018, 20:24 | Сообщение № 7
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Глубоко не вникал, но на поверхности надо так:
[vba]
Код
Sub Get_All_File_from_SubFolders()
    Dim r As Range
    Dim FSO As Object, Folder As Object, File As Object
    Dim ws As Worksheet
    Dim sFolder As String
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = False Then Exit Sub
        sFolder = .SelectedItems(1)
    End With
    sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)

    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Folder = FSO.GetFolder(sFolder)    'тут путь к своей папке
    For Each File In Folder.Files
        If InStr(File.Name, ".xls") > 0 Then
            Set ws = Workbooks.Open(File.Path).Sheets(1)
            Get_Current_Range ws
            ws.Parent.Close -1
        End If
    Next
    Set Folder = Nothing
    Set FSO = Nothing
    MsgBox "Готово!"
    Exit Sub
End Sub

Sub Get_Current_Range(f As Worksheet)
    Dim c As Range
    Dim i As Integer
    Dim j As Integer

    k = 0
    lLastRow = f.Cells.SpecialCells(xlLastCell).Row
    lLastCol = f.Cells.SpecialCells(xlLastCell).Column
    MsgBox "lLastRow=" & lLastRow & " lLastCol=" & lLastCol

    ReDim arrOfNumber(1, 0)
    For i = 1 To lLastRow
        For j = 1 To lLastCol
            If Len(f.Cells(i, j).Value) Then
                ReDim Preserve arrOfNumber(1, k)
                arrOfNumber(0, k) = i  'row
                arrOfNumber(1, k) = j  'colum
                k = k + 1
            End If
        Next j
    Next i
    k = k - 1
    MsgBox "Всего " & k
End Sub
[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеГлубоко не вникал, но на поверхности надо так:
[vba]
Код
Sub Get_All_File_from_SubFolders()
    Dim r As Range
    Dim FSO As Object, Folder As Object, File As Object
    Dim ws As Worksheet
    Dim sFolder As String
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = False Then Exit Sub
        sFolder = .SelectedItems(1)
    End With
    sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)

    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Folder = FSO.GetFolder(sFolder)    'тут путь к своей папке
    For Each File In Folder.Files
        If InStr(File.Name, ".xls") > 0 Then
            Set ws = Workbooks.Open(File.Path).Sheets(1)
            Get_Current_Range ws
            ws.Parent.Close -1
        End If
    Next
    Set Folder = Nothing
    Set FSO = Nothing
    MsgBox "Готово!"
    Exit Sub
End Sub

Sub Get_Current_Range(f As Worksheet)
    Dim c As Range
    Dim i As Integer
    Dim j As Integer

    k = 0
    lLastRow = f.Cells.SpecialCells(xlLastCell).Row
    lLastCol = f.Cells.SpecialCells(xlLastCell).Column
    MsgBox "lLastRow=" & lLastRow & " lLastCol=" & lLastCol

    ReDim arrOfNumber(1, 0)
    For i = 1 To lLastRow
        For j = 1 To lLastCol
            If Len(f.Cells(i, j).Value) Then
                ReDim Preserve arrOfNumber(1, k)
                arrOfNumber(0, k) = i  'row
                arrOfNumber(1, k) = j  'colum
                k = k + 1
            End If
        Next j
    Next i
    k = k - 1
    MsgBox "Всего " & k
End Sub
[/vba]

Автор - KuklP
Дата добавления - 14.07.2018 в 20:24
KuklP Дата: Суббота, 14.07.2018, 20:35 | Сообщение № 8
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Ну и конечно искать последнюю методом .Cells.SpecialCells(xlLastCell) не айс. Все форматы туда влезут.
Лучше типа этого:
[vba]
Код
Sub LastCell()
    Dim x As Range
    Set x = Cells.Find("*", [a1], xlFormulas, 1, 1, 2)
End Sub
[/vba]
А вот SpecialCells(12) выделит непустые независимо от форматов, это "хорошие сапоги, надо брать"))


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеНу и конечно искать последнюю методом .Cells.SpecialCells(xlLastCell) не айс. Все форматы туда влезут.
Лучше типа этого:
[vba]
Код
Sub LastCell()
    Dim x As Range
    Set x = Cells.Find("*", [a1], xlFormulas, 1, 1, 2)
End Sub
[/vba]
А вот SpecialCells(12) выделит непустые независимо от форматов, это "хорошие сапоги, надо брать"))

Автор - KuklP
Дата добавления - 14.07.2018 в 20:35
Exo Дата: Суббота, 14.07.2018, 20:57 | Сообщение № 9
Группа: Заблокированные
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
KuklP,
Сергей, а что Вы сможете найти с помощью SpecialCells(12)?.
Я не дебил, я просто учусь.
Скрытые тоже?


А что такое вестибюль?
А что такое широкополосный интернет?


Сообщение отредактировал Exo - Суббота, 14.07.2018, 21:00
 
Ответить
СообщениеKuklP,
Сергей, а что Вы сможете найти с помощью SpecialCells(12)?.
Я не дебил, я просто учусь.
Скрытые тоже?

Автор - Exo
Дата добавления - 14.07.2018 в 20:57
Exo Дата: Суббота, 14.07.2018, 20:59 | Сообщение № 10
Группа: Заблокированные
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
del


А что такое вестибюль?
А что такое широкополосный интернет?


Сообщение отредактировал Exo - Суббота, 14.07.2018, 21:01
 
Ответить
Сообщениеdel

Автор - Exo
Дата добавления - 14.07.2018 в 20:59
KuklP Дата: Суббота, 14.07.2018, 21:11 | Сообщение № 11
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Я перепутал. Давно за Экс не садился) 12 это видимые. Надо 2 + потом еще формулы -4123 можно через Union. Но это если данные расположены непредсказуемо. Обычно же решение попроще.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеЯ перепутал. Давно за Экс не садился) 12 это видимые. Надо 2 + потом еще формулы -4123 можно через Union. Но это если данные расположены непредсказуемо. Обычно же решение попроще.

Автор - KuklP
Дата добавления - 14.07.2018 в 21:11
InExSu Дата: Понедельник, 16.07.2018, 00:05 | Сообщение № 12
Группа: Друзья
Ранг: Ветеран
Сообщений: 648
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
Привет!
Задача интересная и полезная.

Набросок во вложении.
К сообщению приложен файл: ______.xlsb (20.3 Kb)


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac

Сообщение отредактировал InExSu - Понедельник, 16.07.2018, 00:13
 
Ответить
СообщениеПривет!
Задача интересная и полезная.

Набросок во вложении.

Автор - InExSu
Дата добавления - 16.07.2018 в 00:05
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!