Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
2 / 2 / 0
Регистрация: 24.07.2013
Сообщений: 54

Сбор данных, каким образом сделать это быстро

14.08.2013, 11:02. Показов 1515. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток) Хочу спросить совета, Есть таблица размером допустим 200/60 000, нужно скопировать её всю в новую книгу. Как думаете, какой способ будет самым быстрым в данном случае?

Смысл сего действия, просто из всех выбранных пользователем книг,собираю всё в одну общую.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.08.2013, 11:02
Ответы с готовыми решениями:

Как задать усилителю коэффициент передачи не числом, а выражениям, каким образом это можно сделать
Необходимо задать усилителю коэффициент передачи не числом, а выражениям (фото), каким образом это можно сделать? Позиционность N известна,...

Каким образом быстро отфильтровать один txt файл другим?
всем привет, собственно вопрос, каким способом быстрее всего будет оставить в результирующем файле строки первого файла, которых нет во...

Добавить данные в таблицу базы данных Microsoft SQL Server Compact 3.5. Объясните пожалуйста, каким образом это делается =)
Здравствуйте. Решил научиться работать с базами данных. Cоздал проект, подключил базу данных Microsoft SQL Server Compact 3.5. Создал...

12
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
14.08.2013, 11:35
Копия всего листа.
А лучше перенос, исходный файл закрыть без сохранения.
0
2 / 2 / 0
Регистрация: 24.07.2013
Сообщений: 54
14.08.2013, 11:41  [ТС]
А как перенос сделать,не подскажете?

Добавлено через 3 минуты
И еще можно вопрос тогда уж, для копирования листов из книг,я их по очереди все открываю, и на это уходит времени чуть ли не больше чем на копирование,потому что некоторые книги весят и по 100 мбайт!
открываю так :

Workbooks.Open arrPlaFiles(lLoop), False

может есть еще какой вариант,этот процесс тоже ускорить?
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
14.08.2013, 11:45
Попробуйте через GetObject()

Добавлено через 1 минуту
А перенос просто - запишите рекордером именно перенос листа из книги в книгу.
При переносе не обрезаются длинные строки - вдруг это важно?
0
2 / 2 / 0
Регистрация: 24.07.2013
Сообщений: 54
14.08.2013, 11:51  [ТС]
То что не обрезаются, не важно.
Но тут тоже проблема, один лист я перенесу, а мне нужно чтоб данные из следующей книги, перенеслись на тот же лист в первую пустую строку и т.д. для всех последующих книг. Так же с переносом не получится насколько я понимаю.
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
14.08.2013, 11:59
Это не было явно сказано в первом посте. Тогда нужно переносить (или всё же копировать?) именно данные (или всё же ячейки?).
Быстрее копировать только данные.
Места-то хватит?
0
2 / 2 / 0
Регистрация: 24.07.2013
Сообщений: 54
14.08.2013, 12:02  [ТС]
Я просто похоже не правильно объяснила : Есть открытая общая книга, пользователь в диалоговом окне выбирает нужные ему для объединения книги, допусти их там 5. И из всех этих книг данные с их первых листов нужно перенести в Общую книгу на первый лист друг за другом. Получается один такой большой лист с кучей данных на нем)

ужас вообщем то)

Добавлено через 46 секунд
угу,уже поняла что неправильно объяснила. Место вроде пока что всё время хватало)
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
14.08.2013, 12:04
Кстати, соседняя тема "в тему":
Добавление данных из одной книги Excel в другую
Но там копируются диапазоны, что может быть чуть медленнее. Ну это нужно смотреть по задаче, что именно нужно.
1
2 / 2 / 0
Регистрация: 24.07.2013
Сообщений: 54
14.08.2013, 12:20  [ТС]
Спасибо)я и не успела еще заметить этой темы.

Хотя вот и в этой теме нужно всё ж переносить по листам,из первой на первый лист,из второй на второй. а мне всё на один скидывать

Добавлено через 7 минут
Покажу вам свой код,чтоб было понятней что я вообще делаю)

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
'так в диалоговом окне выбираю нужные мне файлы для объединения
Private Sub CommandButton1_Click()
 
 arrPlaFiles = Application.GetOpenFilename("* (*.*),*.*", , s, , True)
        If IsArray(arrPlaFiles) Then
                TextBox1.Text = ""
                For i = 1 To UBound(arrPlaFiles)
                    TextBox1.Text = TextBox1.Text & arrPlaFiles(i) & "; " & vbCrLf
                Next i
                Exit Sub
            Else
                If MsgBox("Прервать расчет ?", vbOKCancel) = vbOK Then Unload UserForm1
        End If
 
End Sub
 
 
 
Private Sub CommandButton2_Click()
 
    Dim preres, ws As Worksheet
    Dim staff() As Boolean
    Dim surname As String
 
'а тут уже в цикле просматриваю выбранные мной книги
 
    If (TextBox1.Text = "") Then
        MsgBox ("Вначале выберите файлы!")
        Exit Sub
    End If
 
 
    ReDim staff(UBound(arrPlaFiles))
    For lLoop = 1 To UBound(arrPlaFiles)
        staff(lLoop) = False
    Next lLoop
    
        For lLoop = 1 To UBound(arrPlaFiles)
         Workbooks.Open arrPlaFiles(lLoop), False
 
'а сюда как раз кусок который бы копировал из выбранных книг в общую все данные
 
Workbooks(arrPlaFiles(lLoop)).Close
  Next lLoop
0
 Аватар для KoGG
5640 / 1622 / 418
Регистрация: 23.12.2010
Сообщений: 2,430
Записей в блоге: 1
14.08.2013, 15:09
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Private Sub CommandButton2_Click()
    Const FRow& = 2  ' Номер строки начала сбора данных (ниже шапки)
'    Dim preres, ws As Worksheet            'Лишнее
'    Dim staff() As Boolean                 'Лишнее
'    Dim surname As String                   'Лишнее
    Dim lLoop&, FCol&, LCol&, LRow&, LRow_Cel&
    Dim wb_Tek As Workbook
    Dim Sh_Cel As Worksheet, Sh_Tek As Worksheet
    Set Sh_Cel = ThisWorkbook.ActiveSheet
    If (TextBox1.Text = "") Then
        MsgBox ("Вначале выберите файлы!")
        Exit Sub
    End If
'    ReDim staff(UBound(arrPlaFiles))       'Лишнее
'    For lLoop = 1 To UBound(arrPlaFiles)   'Лишнее
'        staff(lLoop) = False               'Лишнее
'    Next lLoop                             'Лишнее
    For lLoop = 1 To UBound(arrPlaFiles)
        Set wb_Tek = GetObject(arrPlaFiles(lLoop))
        'либо
        'Set wb_Tek = Workbooks.Open(arrPlaFiles(lLoop), False)
        With Sh_Cel
            FCol = .UsedRange.Cells(1, 1).Column
            LCol = .UsedRange.Columns.Count + FCol - 1
            LRow_Cel = .UsedRange.Rows.Count + .UsedRange.Cells(1, 1).row
        End With
        With wb_Tek.Worksheets(1)
        ' Либо
        'With wb_Tek.Worksheets("Имя_нужного_листа_сбора")
            LRow = .UsedRange.Rows.Count + .UsedRange.Cells(1, 1).row - 1
            If LRow >= FRow Then
                .Range(.Cells(FRow, FCol), .Cells(LRow, LCol)).Copy Sh_Cel.Cells(LRow_Cel, 1)
            End If
        End With
       Workbooks(arrPlaFiles(lLoop)).Close False
     Next lLoop
End Sub
Добавлено через 14 минут
Если форматы копировать не нужно, то можно ускорить.
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Private Sub CommandButton2_Click()
    Const FRow& = 2  ' Номер строки начала сбора данных (ниже шапки)
    Dim MyAr As Variant
    Dim lLoop&, FCol&, LCol&, LRow&, LRow_Cel&
    Dim wb_Tek As Workbook
    Dim Sh_Cel As Worksheet, Sh_Tek As Worksheet
    Set Sh_Cel = ThisWorkbook.ActiveSheet
    If (TextBox1.Text = "") Then
        MsgBox ("Вначале выберите файлы!")
        Exit Sub
    End If
    With Application
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
    End With
    For lLoop = 1 To UBound(arrPlaFiles)
        Set wb_Tek = GetObject(arrPlaFiles(lLoop))
        With Sh_Cel
            FCol = .UsedRange.Cells(1, 1).Column
            LCol = .UsedRange.Columns.Count + FCol - 1
            LRow_Cel = .UsedRange.Rows.Count + .UsedRange.Cells(1, 1).row
        End With
        With wb_Tek.Worksheets(1)
            LRow = .UsedRange.Rows.Count + .UsedRange.Cells(1, 1).row - 1
            If LRow >= FRow Then
                MyAr = .Range(.Cells(FRow, FCol), .Cells(LRow, LCol))
                Sh_Cel.Cells(LRow_Cel, FCol).Resize(LRow - FRow + 1, LCol - FCol + 1) = MyAr
            End If
        End With
       wb_Tek.Close False
    Next lLoop
    With Application
      .Calculation = xlCalculationAutomatic
      .ScreenUpdating = True
    End With
End Sub

еще arrPlaFiles Надо объявлять в начале модуля
Visual Basic
1
Dim arrPlaFiles
1
2 / 2 / 0
Регистрация: 24.07.2013
Сообщений: 54
14.08.2013, 15:54  [ТС]
спасибо)
Переменная да, объявлена,просто не весь код сюда вставила

к сожалению совсем ускорить не получиться, форматы нужны(

Добавлено через 49 секунд
сейчас буду проверять

Добавлено через 20 минут
Почти что всё хорошо)

У меня книга которая будет общей изначально пустая,поэтому
Visual Basic
1
LCol = .UsedRange.Columns.Count + FCol - 1
эту строчку переместила сюда:

Visual Basic
1
2
3
4
5
6
7
  With wb_Tek.Worksheets(1)
            LCol = .UsedRange.Columns.Count + FCol - 1 
            LRow = .UsedRange.Rows.Count + .UsedRange.Cells(1, 1).Row - 1
            If LRow >= FRow Then
                .Range(.Cells(FRow, FCol), .Cells(LRow, LCol)).Copy Sh_Cel.Cells(LRow_Cel, 1)
            End If
        End With
иначе копировал только один столбик.

И еще одно не пойму, ругается на
Visual Basic
1
 Workbooks(arrPlaFiles(lLoop)).Close False
Если с GetObject и вообще без этой строчки,то всё хорошо. Если Open то конечно вся куча книг которые просматриваю остаются открытыми. А с ней в обоих случаях ругается
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
14.08.2013, 16:03
Если с getobject и открытое не закрывать - оно так и будет висеть невидимым в памяти, возможно подглюкивая далее остальную работу (посмотрите в процессах).
Пишите
Visual Basic
1
wb_Tek.close 0
0
2 / 2 / 0
Регистрация: 24.07.2013
Сообщений: 54
14.08.2013, 16:11  [ТС]
Хорошо)спасибо

Кстати и GetObject и Workbooks.Open(arrPlaFiles(lLoop), False) почти одинаково по времени открывают их.

А почему с open не закрывается, не знаете? (говорит subscript out of range)

Добавлено через 2 минуты
кстати вашей строчкой и открытые через open нормально закрывает

Добавлено через 1 минуту
всё,до меня до самой уже дошло,почему не закрывал)
Всем спасибо за помощь)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.08.2013, 16:11
Помогаю со студенческими работами здесь

обработчик непонято как сделать чтоб в нем считалось общая площадь изделия, стоимость и количественный состав каким образом это реализовать?
Всем привет Решил посоветоваться вот у меня есть задача создать 3 класса Мебельное изделие, элемент изделия, и обработчик Ну вот...

Каким образом может это перевести в базис Стрелки Пирса?
\ (\bar{x}\bar{y}\bar{z}t)+(\bar{x}\bar{y}zt)+(x\bar{y}\bar{z}t)+(x\bar{y}z\bar{t})+(x\bar{y}zt)+(xy\bar{z}t)

Каким образом копировать файлы, чтобы антивирус не распознавал это действие как вредоносное
Доброго времени. Я просто в шоке от антивируса. Вообщем есть наверное безопаснейший метод File.Copy(); Всё бы было хорошо, если бы каспер...

Каким образом можно сделать.
Я описываю WndProc из класса. static WndProc(HWND,UINT,WPARAM,LPARAM); Но никак не могу сделать input с клавиатуры. Чтобы...

Каким образом в боди сделать отступы по 15 %
Каким образом в боди сделать отступы по 15 % - причем с слева и справа- и все серого цвета- это вопрос больше html


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru