Извлечение данных из файла в Excel
kombat
Дата: Четверг, 10.09.2015, 12:47 |
Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация:
0
±
Замечаний:
20% ±
Excel 2010
Приветствую энтузиастов Excel! Неразрешимая задача: Имеется файл с числовыми данными: формат .xls или .csv, ~ 10000 чисел. Требуется: извлечь данные из этого файла в Excel 2010. Извлекать необходимо последовательно каждое число в одну и ту же ячейку Excel (т. е. заменять данные в одной ячейке) с задержкой , к примеру в 0,05 сек. Прошу подсказать, как подступиться к решению?
Приветствую энтузиастов Excel! Неразрешимая задача: Имеется файл с числовыми данными: формат .xls или .csv, ~ 10000 чисел. Требуется: извлечь данные из этого файла в Excel 2010. Извлекать необходимо последовательно каждое число в одну и ту же ячейку Excel (т. е. заменять данные в одной ячейке) с задержкой , к примеру в 0,05 сек. Прошу подсказать, как подступиться к решению? kombat
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 сек принципиально важно?
kombat , привет по идее - Application.OnTime, но будет ли он работать с миллисекундами? может, просто DoEvents? Т.е обновили ячейку, дальше пошли какие-то вычисления; ставим DoEvents, чтобы система закончила все пересчеты; и дальше опять обновляем ячейку. Или 0,05 сек принципиально важно?nilem
Яндекс.Деньги 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][/vba]
Иногда все проще чем кажется с первого взгляда.
Ответить
Сообщение Смотрите [vba][/vba] Автор - 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 принимает только дату
[vba]Код
Application.Wait Time:=Now + TimeValue("0:00:01") / 20
[/vba] Добавлено О, пока я копался, Славик уже про Wait написал Добавлено /20 не работает. Wait принимает только дату _Boroda_
Скажи мне, кудесник, любимец ба’гов... Платная помощь: 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.
Эта задача возникла в процессе моделирования on-line потоков данных и приема их Excel'ем. Изменяемое время задержки нужно для того. чтобы увидеть ту скорость потоковых данных, при которой Excel не будет успевать принимать данные (после приема каждого числа должны выполняться определенные вычисления). Задержка предполагается изменяемой в коде VBA. kombat
vlad
Ответить
Сообщение Эта задача возникла в процессе моделирования on-line потоков данных и приема их Excel'ем. Изменяемое время задержки нужно для того. чтобы увидеть ту скорость потоковых данных, при которой Excel не будет успевать принимать данные (после приема каждого числа должны выполняться определенные вычисления). Задержка предполагается изменяемой в коде VBA. Автор - kombat Дата добавления - 10.09.2015 в 13:35
SLAVICK
Дата: Четверг, 10.09.2015, 13:36 |
Сообщение № 6
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация:
766
±
Замечаний:
0% ±
2019
Славик уже про Wait написал
Александр, я старался Вот интересная статья на эту тему - полнее выбора не встречал
Славик уже про Wait написал
Александр, я старался Вот интересная статья на эту тему - полнее выбора не встречал SLAVICK
Иногда все проще чем кажется с первого взгляда.
Сообщение отредактировал SLAVICK - Четверг, 10.09.2015, 13:39
Ответить
Сообщение Славик уже про Wait написал
Александр, я старался Вот интересная статья на эту тему - полнее выбора не встречал Автор - SLAVICK Дата добавления - 10.09.2015 в 13:36
kombat
Дата: Четверг, 10.09.2015, 13:44 |
Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация:
0
±
Замечаний:
20% ±
Excel 2010
Приветствую _Boroda_! Спасибо за решение. Т. к. я в VBA почти ни разу не грамотный :), Вы не могли бы кроме ядра решения написать и обрамляющие слова макроса?
Приветствую _Boroda_! Спасибо за решение. Т. к. я в VBA почти ни разу не грамотный :), Вы не могли бы кроме ядра решения написать и обрамляющие слова макроса? kombat
vlad
Ответить
Сообщение Приветствую _Boroda_! Спасибо за решение. Т. к. я в VBA почти ни разу не грамотный :), Вы не могли бы кроме ядра решения написать и обрамляющие слова макроса? Автор - kombat Дата добавления - 10.09.2015 в 13:44
SLAVICK
Дата: Четверг, 10.09.2015, 13:48 |
Сообщение № 8
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация:
766
±
Замечаний:
0% ±
2019
Вы не могли бы кроме ядра решения написать и обрамляющие слова макроса?
Вы статью смотрели? там даже не обрамляющие слова - а полное описание, что к чему и когда использовать
Вы не могли бы кроме ядра решения написать и обрамляющие слова макроса?
Вы статью смотрели? там даже не обрамляющие слова - а полное описание, что к чему и когда использовать SLAVICK
Иногда все проще чем кажется с первого взгляда.
Ответить
Сообщение Вы не могли бы кроме ядра решения написать и обрамляющие слова макроса?
Вы статью смотрели? там даже не обрамляющие слова - а полное описание, что к чему и когда использовать Автор - SLAVICK Дата добавления - 10.09.2015 в 13:48
kombat
Дата: Четверг, 10.09.2015, 13:51 |
Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация:
0
±
Замечаний:
20% ±
Excel 2010
SLAVICK, статью изучаю, спасибо
SLAVICK, статью изучаю, спасибо kombat
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) приостанавливает выполнение кода на заданное время, что и нужно для моей задачи. Может это покажется неприличным, но прошу подсказать, как написать сам код считывания данных из файла, и где в нем вставить эту функцию?
Я понял, что функция Application.Wait Now + TimeSerial(0, 0, SecondsToWait) приостанавливает выполнение кода на заданное время, что и нужно для моей задачи. Может это покажется неприличным, но прошу подсказать, как написать сам код считывания данных из файла, и где в нем вставить эту функцию? kombat
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
Друзья, вы сориентировали меня на мысль, что данные в конкретную ячейку с задержкой можно извлекать не из файла, а из колонки на этом же листе! Но, опять же, как написать макрос?
Друзья, вы сориентировали меня на мысль, что данные в конкретную ячейку с задержкой можно извлекать не из файла, а из колонки на этом же листе! Но, опять же, как написать макрос? kombat
vlad
Ответить
Сообщение Друзья, вы сориентировали меня на мысль, что данные в конкретную ячейку с задержкой можно извлекать не из файла, а из колонки на этом же листе! Но, опять же, как написать макрос? Автор - kombat Дата добавления - 10.09.2015 в 15:20
ZamoK
Дата: Четверг, 10.09.2015, 15:43 |
Сообщение № 12
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация:
4
±
Замечаний:
0% ±
Excel 2003-2016
kombat , покажется неприличным, но прошу подсказать, как написать сам код
Правила п.3 Так будет правильно.
kombat , покажется неприличным, но прошу подсказать, как написать сам код
Правила п.3 Так будет правильно. ZamoK
Я не Гуру, но стремлюсь!
Ответить
Сообщение kombat , покажется неприличным, но прошу подсказать, как написать сам код
Правила п.3 Так будет правильно. Автор - 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 строк как-то нескромно. Может сделать как-то в цикле? Но сам не потяну. Прошу помочь: последовательно сверху вниз считывать данные из колонки в одну ячейку с задержкой.
Написал макрорекордером код и вставил в него функцию задержки: [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
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
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
Вот: [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 SLAVICK
Иногда все проще чем кажется с первого взгляда.
Сообщение отредактировал 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 Автор - SLAVICK Дата добавления - 10.09.2015 в 15:56
kombat
Дата: Четверг, 10.09.2015, 17:08 |
Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация:
0
±
Замечаний:
20% ±
Excel 2010
SLAVICK, я тут вынужден был отойти, извините. Ваш код работает отлично, лучше, чем я фантазировал (с кнопкой). Сейчас еще с ним поработаю. Результат сообщу. Для чего такой прием данных с задержкой? Я принимаю в Excel данные по DDE от разных источников, с разной частотой. Далее по этим данным выполняю расчеты в Excel. Для меня важно определить, при какой частоте поступления данных Excel перестает успевать рассчитывать. Конечно, можно было бы найти ответ на этот вопрос, написав макрос измерения времени работы кода при поступлении 1-го данного (я видел такие измерения). Но я никак не чувствую в себе способности его написать. Может быть Вы знаете такой код, или его не трудно написать для Вас, был бы благодарен.
SLAVICK, я тут вынужден был отойти, извините. Ваш код работает отлично, лучше, чем я фантазировал (с кнопкой). Сейчас еще с ним поработаю. Результат сообщу. Для чего такой прием данных с задержкой? Я принимаю в Excel данные по DDE от разных источников, с разной частотой. Далее по этим данным выполняю расчеты в Excel. Для меня важно определить, при какой частоте поступления данных Excel перестает успевать рассчитывать. Конечно, можно было бы найти ответ на этот вопрос, написав макрос измерения времени работы кода при поступлении 1-го данного (я видел такие измерения). Но я никак не чувствую в себе способности его написать. Может быть Вы знаете такой код, или его не трудно написать для Вас, был бы благодарен. kombat
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] как-то не работает. Как заставить?
[vba]Код
TimeValue("0:00:01")/2
[/vba] как-то не работает. Как заставить? kombat
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-сервер и эмулируйте поток)
[vba]Код
Dim FiftyMilliseconds# FiftyMilliseconds = 1 / 86400 / 20 Application.Wait Time:=Now + FiftyMilliseconds
[/vba] но врядли вы получите задержку ровно 50 миллисекунд... [p.s.]к тому же, при получении в Excel данных по DDE есть свои особенности, например, не генерится событие Worksheet_Change (а я подозреваю, что вы привязали свои расчеты именно на него), поэтому полноценного тестового стенда без DDE-сервера у вас не получится. (напишите простенький DDE-сервер и эмулируйте поток) KSV
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#
может проще измерить время работы кода, типа такого: [vba]Код
Sub ttt() Dim tm! tm = Timer 'тут ваш код MsgBox Timer - tm ' время в мсек End Sub
[/vba] все-таки лучше Double, вот так: Dim tm# nilem
Яндекс.Деньги 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, спасибо, что подключились к помощи. Запускаю макрос с Вашим кодом, пока не считает время выполнения. Наверное неправильно вставил в код?
nilem, спасибо, что подключились к помощи. Запускаю макрос с Вашим кодом, пока не считает время выполнения. Наверное неправильно вставил в код? kombat
vlad
Ответить
Сообщение nilem, спасибо, что подключились к помощи. Запускаю макрос с Вашим кодом, пока не считает время выполнения. Наверное неправильно вставил в код? Автор - kombat Дата добавления - 10.09.2015 в 22:43