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

Вход

Регистрация

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

 

= Мир MS Excel/Извлечение данных из файла в Excel - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Извлечение данных из файла в Excel (Макросы/Sub)
Извлечение данных из файла в Excel
kombat Дата: Четверг, 10.09.2015, 12:47 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Приветствую энтузиастов Excel!

Неразрешимая задача:
Имеется файл с числовыми данными:
формат .xls или .csv, ~ 10000 чисел.

Требуется:
извлечь данные из этого файла в Excel 2010.
Извлекать необходимо последовательно каждое число в одну и ту же ячейку Excel (т. е. заменять данные в одной ячейке) с задержкой, к примеру в 0,05 сек.

Прошу подсказать, как подступиться к решению?


vlad
 
Ответить
СообщениеПриветствую энтузиастов Excel!

Неразрешимая задача:
Имеется файл с числовыми данными:
формат .xls или .csv, ~ 10000 чисел.

Требуется:
извлечь данные из этого файла в Excel 2010.
Извлекать необходимо последовательно каждое число в одну и ту же ячейку Excel (т. е. заменять данные в одной ячейке) с задержкой, к примеру в 0,05 сек.

Прошу подсказать, как подступиться к решению?

Автор - kombat
Дата добавления - 10.09.2015 в 12:47
nilem Дата: Четверг, 10.09.2015, 13:19 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
kombat, привет
по идее - Application.OnTime, но будет ли он работать с миллисекундами?
может, просто DoEvents? Т.е обновили ячейку, дальше пошли какие-то вычисления; ставим DoEvents, чтобы система закончила все пересчеты; и дальше опять обновляем ячейку.
Или 0,05 сек принципиально важно?


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениеkombat, привет
по идее - Application.OnTime, но будет ли он работать с миллисекундами?
может, просто DoEvents? Т.е обновили ячейку, дальше пошли какие-то вычисления; ставим DoEvents, чтобы система закончила все пересчеты; и дальше опять обновляем ячейку.
Или 0,05 сек принципиально важно?

Автор - nilem
Дата добавления - 10.09.2015 в 13:19
SLAVICK Дата: Четверг, 10.09.2015, 13:19 | Сообщение № 3
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Смотрите
[vba]
Код
Application.Wait
[/vba]
:D


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеСмотрите
[vba]
Код
Application.Wait
[/vba]
:D

Автор - SLAVICK
Дата добавления - 10.09.2015 в 13:19
_Boroda_ Дата: Четверг, 10.09.2015, 13:24 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
[vba]
Код
Application.Wait Time:=Now + TimeValue("0:00:01") / 20
[/vba]

Добавлено
О, пока я копался, Славик уже про Wait написал
Добавлено
/20 не работает. Wait принимает только дату


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение[vba]
Код
Application.Wait Time:=Now + TimeValue("0:00:01") / 20
[/vba]

Добавлено
О, пока я копался, Славик уже про Wait написал
Добавлено
/20 не работает. Wait принимает только дату

Автор - _Boroda_
Дата добавления - 10.09.2015 в 13:24
kombat Дата: Четверг, 10.09.2015, 13:35 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Эта задача возникла в процессе моделирования on-line потоков данных и приема их Excel'ем.

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

Задержка предполагается изменяемой в коде VBA.


vlad
 
Ответить
СообщениеЭта задача возникла в процессе моделирования on-line потоков данных и приема их Excel'ем.

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

Задержка предполагается изменяемой в коде VBA.

Автор - kombat
Дата добавления - 10.09.2015 в 13:35
SLAVICK Дата: Четверг, 10.09.2015, 13:36 | Сообщение № 6
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019

Славик уже про Wait написал

Александр, я старался beer

Вот интересная статья на эту тему - полнее выбора не встречал :D


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Четверг, 10.09.2015, 13:39
 
Ответить
Сообщение
Славик уже про Wait написал

Александр, я старался beer

Вот интересная статья на эту тему - полнее выбора не встречал :D

Автор - SLAVICK
Дата добавления - 10.09.2015 в 13:36
kombat Дата: Четверг, 10.09.2015, 13:44 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Приветствую _Boroda_!

Спасибо за решение.

Т. к. я в VBA почти ни разу не грамотный :),
Вы не могли бы кроме ядра решения написать и обрамляющие слова макроса?


vlad
 
Ответить
СообщениеПриветствую _Boroda_!

Спасибо за решение.

Т. к. я в VBA почти ни разу не грамотный :),
Вы не могли бы кроме ядра решения написать и обрамляющие слова макроса?

Автор - kombat
Дата добавления - 10.09.2015 в 13:44
SLAVICK Дата: Четверг, 10.09.2015, 13:48 | Сообщение № 8
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Вы не могли бы кроме ядра решения написать и обрамляющие слова макроса?

Вы статью смотрели? там даже не обрамляющие слова - а полное описание, что к чему и когда использовать :o


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
Вы не могли бы кроме ядра решения написать и обрамляющие слова макроса?

Вы статью смотрели? там даже не обрамляющие слова - а полное описание, что к чему и когда использовать :o

Автор - SLAVICK
Дата добавления - 10.09.2015 в 13:48
kombat Дата: Четверг, 10.09.2015, 13:51 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
SLAVICK,

статью изучаю, спасибо


vlad
 
Ответить
СообщениеSLAVICK,

статью изучаю, спасибо

Автор - kombat
Дата добавления - 10.09.2015 в 13:51
kombat Дата: Четверг, 10.09.2015, 14:43 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Я понял, что функция

Application.Wait Now + TimeSerial(0, 0, SecondsToWait)

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


vlad
 
Ответить
СообщениеЯ понял, что функция

Application.Wait Now + TimeSerial(0, 0, SecondsToWait)

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

Автор - kombat
Дата добавления - 10.09.2015 в 14:43
kombat Дата: Четверг, 10.09.2015, 15:20 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Друзья,

вы сориентировали меня на мысль, что данные в конкретную ячейку с задержкой можно извлекать не из файла, а из колонки на этом же листе!

Но, опять же, как написать макрос?


vlad
 
Ответить
СообщениеДрузья,

вы сориентировали меня на мысль, что данные в конкретную ячейку с задержкой можно извлекать не из файла, а из колонки на этом же листе!

Но, опять же, как написать макрос?

Автор - kombat
Дата добавления - 10.09.2015 в 15:20
ZamoK Дата: Четверг, 10.09.2015, 15:43 | Сообщение № 12
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
kombat,
покажется неприличным, но прошу подсказать, как написать сам код
deal Правила п.3 Так будет правильно. yes


Я не Гуру, но стремлюсь!
 
Ответить
Сообщениеkombat,
покажется неприличным, но прошу подсказать, как написать сам код
deal Правила п.3 Так будет правильно. yes

Автор - ZamoK
Дата добавления - 10.09.2015 в 15:43
kombat Дата: Четверг, 10.09.2015, 15:43 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Написал макрорекордером код и вставил в него функцию задержки:

[vba]
Код
Range("F5").Select
Selection.Copy
Range("C5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

[color=red]Application.Wait Time:=Now + TimeValue("0:00:05")[/color]

Range("F6").Select
Application.CutCopyMode = False
Selection.Copy
Range("C5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

[color=red]Application.Wait Time:=Now + TimeValue("0:00:05")[/color]

Range("F7").Select
[/vba]

и т. д.

Работает нормально.
Но вставлять вручную 10000 строк как-то нескромно.
Может сделать как-то в цикле? Но сам не потяну. Прошу помочь:

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


vlad

Сообщение отредактировал Pelena - Четверг, 10.09.2015, 17:47
 
Ответить
СообщениеНаписал макрорекордером код и вставил в него функцию задержки:

[vba]
Код
Range("F5").Select
Selection.Copy
Range("C5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

[color=red]Application.Wait Time:=Now + TimeValue("0:00:05")[/color]

Range("F6").Select
Application.CutCopyMode = False
Selection.Copy
Range("C5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

[color=red]Application.Wait Time:=Now + TimeValue("0:00:05")[/color]

Range("F7").Select
[/vba]

и т. д.

Работает нормально.
Но вставлять вручную 10000 строк как-то нескромно.
Может сделать как-то в цикле? Но сам не потяну. Прошу помочь:

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

Автор - kombat
Дата добавления - 10.09.2015 в 15:43
kombat Дата: Четверг, 10.09.2015, 15:49 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
выполняя п. 3
К сообщению приложен файл: test_01.xlsm (16.3 Kb)


vlad
 
Ответить
Сообщениевыполняя п. 3

Автор - kombat
Дата добавления - 10.09.2015 в 15:49
SLAVICK Дата: Четверг, 10.09.2015, 15:56 | Сообщение № 15
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Вот:
[vba]
Код
Sub df()
For Each c In [f5:f22]
[c5].Value = c.Value
Application.Wait Time:=Now + TimeValue("0:00:01")
Next
End Sub
[/vba]
Только не пойму зачем такой финт?

И оформите свой код ТЕГОМ КОД VBA yes
К сообщению приложен файл: 1533325.xlsm (18.5 Kb)


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Четверг, 10.09.2015, 15:58
 
Ответить
СообщениеВот:
[vba]
Код
Sub df()
For Each c In [f5:f22]
[c5].Value = c.Value
Application.Wait Time:=Now + TimeValue("0:00:01")
Next
End Sub
[/vba]
Только не пойму зачем такой финт?

И оформите свой код ТЕГОМ КОД VBA yes

Автор - SLAVICK
Дата добавления - 10.09.2015 в 15:56
kombat Дата: Четверг, 10.09.2015, 17:08 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
SLAVICK,

я тут вынужден был отойти, извините.

Ваш код работает отлично, лучше, чем я фантазировал (с кнопкой).
Сейчас еще с ним поработаю. Результат сообщу.

Для чего такой прием данных с задержкой?

Я принимаю в Excel данные по DDE от разных источников, с разной частотой.
Далее по этим данным выполняю расчеты в Excel.
Для меня важно определить, при какой частоте поступления данных Excel перестает успевать рассчитывать.

Конечно, можно было бы найти ответ на этот вопрос, написав макрос измерения времени работы кода при поступлении 1-го данного (я видел такие измерения). Но я никак не чувствую в себе способности его написать.

Может быть Вы знаете такой код, или его не трудно написать для Вас, был бы благодарен.


vlad
 
Ответить
СообщениеSLAVICK,

я тут вынужден был отойти, извините.

Ваш код работает отлично, лучше, чем я фантазировал (с кнопкой).
Сейчас еще с ним поработаю. Результат сообщу.

Для чего такой прием данных с задержкой?

Я принимаю в Excel данные по DDE от разных источников, с разной частотой.
Далее по этим данным выполняю расчеты в Excel.
Для меня важно определить, при какой частоте поступления данных Excel перестает успевать рассчитывать.

Конечно, можно было бы найти ответ на этот вопрос, написав макрос измерения времени работы кода при поступлении 1-го данного (я видел такие измерения). Но я никак не чувствую в себе способности его написать.

Может быть Вы знаете такой код, или его не трудно написать для Вас, был бы благодарен.

Автор - kombat
Дата добавления - 10.09.2015 в 17:08
kombat Дата: Четверг, 10.09.2015, 17:35 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
[vba]
Код
TimeValue("0:00:01")/2
[/vba]

как-то не работает.
Как заставить?


vlad
 
Ответить
Сообщение[vba]
Код
TimeValue("0:00:01")/2
[/vba]

как-то не работает.
Как заставить?

Автор - kombat
Дата добавления - 10.09.2015 в 17:35
KSV Дата: Четверг, 10.09.2015, 18:47 | Сообщение № 18
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
[vba]
Код
Dim FiftyMilliseconds#
FiftyMilliseconds = 1 / 86400 / 20
Application.Wait Time:=Now + FiftyMilliseconds
[/vba]
но врядли вы получите задержку ровно 50 миллисекунд...

[p.s.]к тому же, при получении в Excel данных по DDE есть свои особенности, например, не генерится событие Worksheet_Change (а я подозреваю, что вы привязали свои расчеты именно на него), поэтому полноценного тестового стенда без DDE-сервера у вас не получится.
(напишите простенький DDE-сервер и эмулируйте поток)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333


Сообщение отредактировал KSV - Четверг, 10.09.2015, 18:55
 
Ответить
Сообщение[vba]
Код
Dim FiftyMilliseconds#
FiftyMilliseconds = 1 / 86400 / 20
Application.Wait Time:=Now + FiftyMilliseconds
[/vba]
но врядли вы получите задержку ровно 50 миллисекунд...

[p.s.]к тому же, при получении в Excel данных по DDE есть свои особенности, например, не генерится событие Worksheet_Change (а я подозреваю, что вы привязали свои расчеты именно на него), поэтому полноценного тестового стенда без DDE-сервера у вас не получится.
(напишите простенький DDE-сервер и эмулируйте поток)

Автор - KSV
Дата добавления - 10.09.2015 в 18:47
nilem Дата: Четверг, 10.09.2015, 18:54 | Сообщение № 19
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
может проще измерить время работы кода, типа такого:
[vba]
Код
Sub ttt()
Dim tm!
tm = Timer
'тут ваш код
MsgBox Timer - tm ' время в мсек
End Sub
[/vba]
все-таки лучше Double, вот так: Dim tm#


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Четверг, 10.09.2015, 18:57
 
Ответить
Сообщениеможет проще измерить время работы кода, типа такого:
[vba]
Код
Sub ttt()
Dim tm!
tm = Timer
'тут ваш код
MsgBox Timer - tm ' время в мсек
End Sub
[/vba]
все-таки лучше Double, вот так: Dim tm#

Автор - nilem
Дата добавления - 10.09.2015 в 18:54
kombat Дата: Четверг, 10.09.2015, 22:43 | Сообщение № 20
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
nilem,

спасибо, что подключились к помощи.

Запускаю макрос с Вашим кодом, пока не считает время выполнения.
Наверное неправильно вставил в код?
К сообщению приложен файл: 1533325_time_01.xlsm (18.1 Kb)


vlad
 
Ответить
Сообщениеnilem,

спасибо, что подключились к помощи.

Запускаю макрос с Вашим кодом, пока не считает время выполнения.
Наверное неправильно вставил в код?

Автор - kombat
Дата добавления - 10.09.2015 в 22:43
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Извлечение данных из файла в Excel (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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