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

Вход

Регистрация

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

 

= Мир MS Excel/Обработка данных таблицы при количестве строк более 300 000 - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Обработка данных таблицы при количестве строк более 300 000 (Макросы/Sub)
Обработка данных таблицы при количестве строк более 300 000
HiHiMAX Дата: Вторник, 08.09.2015, 15:36 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Привет!
Есть данные - таблица около 300 000 строк. На скрепке небольшой пример.
Требуется, на основе имеющихся данных выставить дополнительный маркер в столбце "mark".
Условие для выставления маркера:
1. запоминаем имя текущего участника в столбце "name", например на 5.01.2000 участник "aaaa";
2. ищем этого участника в более ранних испытаниях, если не находим, переходим к следующему участнику
3. если находим, проверяем есть ли в более раннем испытании метка "m" и нет ли "1" в столбце "place"
если выполняется условие, что есть метка "m" и нет "1" в столбце "place", то в столбце "mark" выставляется маркер "b";
если условие не выполняется, то переходим к следующему участнику в текущем испытании, т.е. более ранние результаты для "aaaa" нас не интересуют.

Как это реализовать в Excel, учитывая ограничение 65536 строк? Использовать несколько листов или файлов?
Может стоит использовать какие-либо другие программы для обработки такого количества строк?
[moder]Вы определитесь уже как-нибудь, сколько строк есть
данные - таблица около 300 000 строк

ограничение 65536 строк
[/moder]

ограничение Excel 65536 строк на листе.
в исходной таблице 300 000 строк, таблицу ведь можно разбить на пять таблиц, например на разных листах
К сообщению приложен файл: 1234.xls (14.0 Kb)


Сообщение отредактировал HiHiMAX - Вторник, 08.09.2015, 15:54
 
Ответить
СообщениеПривет!
Есть данные - таблица около 300 000 строк. На скрепке небольшой пример.
Требуется, на основе имеющихся данных выставить дополнительный маркер в столбце "mark".
Условие для выставления маркера:
1. запоминаем имя текущего участника в столбце "name", например на 5.01.2000 участник "aaaa";
2. ищем этого участника в более ранних испытаниях, если не находим, переходим к следующему участнику
3. если находим, проверяем есть ли в более раннем испытании метка "m" и нет ли "1" в столбце "place"
если выполняется условие, что есть метка "m" и нет "1" в столбце "place", то в столбце "mark" выставляется маркер "b";
если условие не выполняется, то переходим к следующему участнику в текущем испытании, т.е. более ранние результаты для "aaaa" нас не интересуют.

Как это реализовать в Excel, учитывая ограничение 65536 строк? Использовать несколько листов или файлов?
Может стоит использовать какие-либо другие программы для обработки такого количества строк?
[moder]Вы определитесь уже как-нибудь, сколько строк есть
данные - таблица около 300 000 строк

ограничение 65536 строк
[/moder]

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

Автор - HiHiMAX
Дата добавления - 08.09.2015 в 15:36
Manyasha Дата: Вторник, 08.09.2015, 16:07 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
А если подходящих строк для одного участника несколько, нужно метку ставить во все строки или только в последнюю (поставьте m, например в D10)?
Если во все, то
Код
=ЕСЛИ(СУММПРОИЗВ((B$5:B5=B6)*(C$5:C5<>1)*(D$5:D5="m"));"b";"")

ограничение Excel 65536 строк
если установите эксель более новой версии, то строк Вам хватит :)
К сообщению приложен файл: 1234-1.xls (42.5 Kb)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеА если подходящих строк для одного участника несколько, нужно метку ставить во все строки или только в последнюю (поставьте m, например в D10)?
Если во все, то
Код
=ЕСЛИ(СУММПРОИЗВ((B$5:B5=B6)*(C$5:C5<>1)*(D$5:D5="m"));"b";"")

ограничение Excel 65536 строк
если установите эксель более новой версии, то строк Вам хватит :)

Автор - Manyasha
Дата добавления - 08.09.2015 в 16:07
KSV Дата: Вторник, 08.09.2015, 16:09 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Есть данные - таблица около 300 000 строк.
в каком формате?
Может стоит использовать какие-либо другие программы
смотря что вы планируете делать с этими данными.
Как это реализовать в Excel
если прям так хочется реализовать именно в Excel 2003, то проще поставить конвертер и использовать новый формат .xlsx (там строк может быть в 4 раза больше, чем вам надо)

Если правильно понял, то можно так (UDF) [vba]
Код
Function Маркер(Участники As Range) As String
      Application.Volatile
      Dim i&, s$, v()
      With Участники
          i = .Count
          If i = 1 Then Exit Function
          s = .Item(i)
          i = i - 1
          v = .Resize(i, 3).Value
      End With
      For i = i To 1 Step -1
          If v(i, 1) = s Then
              If v(i, 2) <> 1 And v(i, 3) = "m" Then Маркер = "b"
              Exit For
          End If
      Next
End Function
[/vba]
К сообщению приложен файл: 0702125.xls (37.5 Kb)


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


Сообщение отредактировал KSV - Вторник, 08.09.2015, 16:43
 
Ответить
Сообщение
Есть данные - таблица около 300 000 строк.
в каком формате?
Может стоит использовать какие-либо другие программы
смотря что вы планируете делать с этими данными.
Как это реализовать в Excel
если прям так хочется реализовать именно в Excel 2003, то проще поставить конвертер и использовать новый формат .xlsx (там строк может быть в 4 раза больше, чем вам надо)

Если правильно понял, то можно так (UDF) [vba]
Код
Function Маркер(Участники As Range) As String
      Application.Volatile
      Dim i&, s$, v()
      With Участники
          i = .Count
          If i = 1 Then Exit Function
          s = .Item(i)
          i = i - 1
          v = .Resize(i, 3).Value
      End With
      For i = i To 1 Step -1
          If v(i, 1) = s Then
              If v(i, 2) <> 1 And v(i, 3) = "m" Then Маркер = "b"
              Exit For
          End If
      Next
End Function
[/vba]

Автор - KSV
Дата добавления - 08.09.2015 в 16:09
HiHiMAX Дата: Вторник, 08.09.2015, 16:38 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
А если подходящих строк для одного участника несколько, нужно метку ставить во все строки или только в последнюю (поставьте m, например в D10)?

Если в D10 поставить m, то в Е13 должен появится маркер b
замечу: нас интересует только ближайшее испытание, в котором был aaaa.
Т.е. если в D10 поставить m, то в Е13 должен появится маркер b;
а из D13 убрать m, то в E16 исчезнет b
как я понял, Ваша формула поставит метку в независимости от времени появления искомой комбинации
 
Ответить
Сообщение
А если подходящих строк для одного участника несколько, нужно метку ставить во все строки или только в последнюю (поставьте m, например в D10)?

Если в D10 поставить m, то в Е13 должен появится маркер b
замечу: нас интересует только ближайшее испытание, в котором был aaaa.
Т.е. если в D10 поставить m, то в Е13 должен появится маркер b;
а из D13 убрать m, то в E16 исчезнет b
как я понял, Ваша формула поставит метку в независимости от времени появления искомой комбинации

Автор - HiHiMAX
Дата добавления - 08.09.2015 в 16:38
HiHiMAX Дата: Вторник, 08.09.2015, 16:38 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
если установите эксель более новой версии, то строк Вам хватит

Спасибо)))
стоит задуматься
 
Ответить
Сообщение
если установите эксель более новой версии, то строк Вам хватит

Спасибо)))
стоит задуматься

Автор - HiHiMAX
Дата добавления - 08.09.2015 в 16:38
HiHiMAX Дата: Вторник, 08.09.2015, 16:43 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
в каком формате?

прога STATISTICA, но как там сделать макрос или отбор я не представляю((
то проще поставить конвертер и использовать новый формат .xlsx

спасибо, посмотрю
 
Ответить
Сообщение
в каком формате?

прога STATISTICA, но как там сделать макрос или отбор я не представляю((
то проще поставить конвертер и использовать новый формат .xlsx

спасибо, посмотрю

Автор - HiHiMAX
Дата добавления - 08.09.2015 в 16:43
KSV Дата: Вторник, 08.09.2015, 16:45 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Если в D10 поставить m, то в Е13 должен появится маркер b

значит, я правильно понял :)
посмотрите мое предыдущее сообщение (добавил файл с UDF)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщение
Если в D10 поставить m, то в Е13 должен появится маркер b

значит, я правильно понял :)
посмотрите мое предыдущее сообщение (добавил файл с UDF)

Автор - KSV
Дата добавления - 08.09.2015 в 16:45
KSV Дата: Вторник, 08.09.2015, 16:51 | Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
но как там сделать макрос или отбор я не представляю
а как вы собирались реализовать в Excel, если не представляете, как выгрузить данные из проги?
Может их и выгружать не нужно, а просто загрузить ее базу, целиком, в Excel и обрабатывать, как вам нужно... (в каком формате она хранит свою базу?)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщение
но как там сделать макрос или отбор я не представляю
а как вы собирались реализовать в Excel, если не представляете, как выгрузить данные из проги?
Может их и выгружать не нужно, а просто загрузить ее базу, целиком, в Excel и обрабатывать, как вам нужно... (в каком формате она хранит свою базу?)

Автор - KSV
Дата добавления - 08.09.2015 в 16:51
SLAVICK Дата: Вторник, 08.09.2015, 17:47 | Сообщение № 9
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
то проще поставить конвертер и использовать новый формат

Тут вопрос скорее в том что сама программа не сможет выгружать данные в новом формате.

прога STATISTICA, но как там сделать макрос или отбор я не представляю((

Посмотрите выгрузку в ТХТ или СSV - такое она должна уметь.
А там ограничений в количестве строк нет :D


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

Тут вопрос скорее в том что сама программа не сможет выгружать данные в новом формате.

прога STATISTICA, но как там сделать макрос или отбор я не представляю((

Посмотрите выгрузку в ТХТ или СSV - такое она должна уметь.
А там ограничений в количестве строк нет :D

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

Excel 2013
что сама программа не сможет выгружать данные в новом формате

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

поэтому я спросил про формат ее бызы...
если DBF, то просто открыть ее в Excel и делай с данными что хочешь.


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщение
что сама программа не сможет выгружать данные в новом формате

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

поэтому я спросил про формат ее бызы...
если DBF, то просто открыть ее в Excel и делай с данными что хочешь.

Автор - KSV
Дата добавления - 08.09.2015 в 17:52
SLAVICK Дата: Вторник, 08.09.2015, 18:01 | Сообщение № 11
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
то просто открыть ее в Excel и делай с данными что хочешь.

Это если админы на работе разрешат такое ;)
Может у них "Политика безопасности" не позволяет :o
А так да и никакая STATISTICA не нужна можно все отчеты в Excel сделать ^_^


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

Это если админы на работе разрешат такое ;)
Может у них "Политика безопасности" не позволяет :o
А так да и никакая STATISTICA не нужна можно все отчеты в Excel сделать ^_^

Автор - SLAVICK
Дата добавления - 08.09.2015 в 18:01
HiHiMAX Дата: Вторник, 08.09.2015, 18:12 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
если установите эксель более новой версии

что посоветуете? я всегда пользовался только 2003
 
Ответить
Сообщение
если установите эксель более новой версии

что посоветуете? я всегда пользовался только 2003

Автор - HiHiMAX
Дата добавления - 08.09.2015 в 18:12
KSV Дата: Вторник, 08.09.2015, 18:20 | Сообщение № 13
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
что посоветуете?
а чего советовать? новое – всегда лучше... (вопрос о лицензии не поднимаем?) :)
только к ленточному интерфейсу я до сих пор никак не привыкну... (поставил старое, привычное, меню)


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


Сообщение отредактировал KSV - Вторник, 08.09.2015, 18:23
 
Ответить
Сообщение
что посоветуете?
а чего советовать? новое – всегда лучше... (вопрос о лицензии не поднимаем?) :)
только к ленточному интерфейсу я до сих пор никак не привыкну... (поставил старое, привычное, меню)

Автор - KSV
Дата добавления - 08.09.2015 в 18:20
HiHiMAX Дата: Вторник, 08.09.2015, 22:04 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Если правильно понял, то можно так

спасибо за код, все правильно
поставил MSOffice 2013, протянул функцию до 47000 ячейки)))
вот сижу, жду уже 10мин, пока 50% обработано...
что же будет на 300К??? О_о
боюсь повиснет Excel на таких объемах данных(
 
Ответить
Сообщение
Если правильно понял, то можно так

спасибо за код, все правильно
поставил MSOffice 2013, протянул функцию до 47000 ячейки)))
вот сижу, жду уже 10мин, пока 50% обработано...
что же будет на 300К??? О_о
боюсь повиснет Excel на таких объемах данных(

Автор - HiHiMAX
Дата добавления - 08.09.2015 в 22:04
KSV Дата: Вторник, 08.09.2015, 22:10 | Сообщение № 15
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
чтобы быстро - можно сделать макросом


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщениечтобы быстро - можно сделать макросом

Автор - KSV
Дата добавления - 08.09.2015 в 22:10
HiHiMAX Дата: Вторник, 08.09.2015, 22:13 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
можно сделать макросом

подскажите как?? я полагал это и есть макрос)
 
Ответить
Сообщение
можно сделать макросом

подскажите как?? я полагал это и есть макрос)

Автор - HiHiMAX
Дата добавления - 08.09.2015 в 22:13
ikki Дата: Вторник, 08.09.2015, 23:37 | Сообщение № 17
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
проще поставить конвертер и использовать новый формат .xlsx (там строк может быть в 4 раза больше, чем вам надо)
серьезно?
это какой именно конвертер такие кунштюки умеет вытворять?
родной майкрософтовский - год назад не умел точно.
т.е. файлы-то он открывал.
но строк в них было ровно 64К


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщение
проще поставить конвертер и использовать новый формат .xlsx (там строк может быть в 4 раза больше, чем вам надо)
серьезно?
это какой именно конвертер такие кунштюки умеет вытворять?
родной майкрософтовский - год назад не умел точно.
т.е. файлы-то он открывал.
но строк в них было ровно 64К

Автор - ikki
Дата добавления - 08.09.2015 в 23:37
KSV Дата: Вторник, 08.09.2015, 23:42 | Сообщение № 18
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
я полагал это и есть макрос

макрос макросу рознь :)
если в вашем рабочем файле структура такая же, как в файле-примере, то ничего переделывать не нужно – просто поместите код в модуль листа и запустите [vba]
Код
Option Base 1

Sub Проставить_Маркеры()
     Dim i&, k&, n&, s$, v(), b()
     v = Range("B6:D" & [B6].End(xlDown).Row)
     n = UBound(v)
     ReDim b(n, 1)
     For k = 1 To n
         s = v(k, 1)
         For i = k - 1 To 1 Step -1
             If v(i, 1) = s Then
                 If v(i, 2) <> 1 And v(i, 3) = "m" Then b(k, 1) = "b"
                 Exit For
             End If
     Next i, k
     [E6].Resize(n) = b
End Sub
[/vba]
[p.s.]напишите время выполнения
К сообщению приложен файл: 5893569.xls (37.0 Kb)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщение
я полагал это и есть макрос

макрос макросу рознь :)
если в вашем рабочем файле структура такая же, как в файле-примере, то ничего переделывать не нужно – просто поместите код в модуль листа и запустите [vba]
Код
Option Base 1

Sub Проставить_Маркеры()
     Dim i&, k&, n&, s$, v(), b()
     v = Range("B6:D" & [B6].End(xlDown).Row)
     n = UBound(v)
     ReDim b(n, 1)
     For k = 1 To n
         s = v(k, 1)
         For i = k - 1 To 1 Step -1
             If v(i, 1) = s Then
                 If v(i, 2) <> 1 And v(i, 3) = "m" Then b(k, 1) = "b"
                 Exit For
             End If
     Next i, k
     [E6].Resize(n) = b
End Sub
[/vba]
[p.s.]напишите время выполнения

Автор - KSV
Дата добавления - 08.09.2015 в 23:42
KSV Дата: Вторник, 08.09.2015, 23:52 | Сообщение № 19
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
но строк в них было ровно 64К

я это подозревал, но т.к. проверить уже не на чем (остался только 2013), то поверил MS "на слово"
Цитата
Установив пакет обеспечения совместимости в качестве дополнения к пакетам Microsoft Office 2000, Office XP или Office 2003, вы сможете открывать, редактировать и сохранять файлы в новых форматах, которые используются в последних версиях программ Word, Excel и PowerPoint.
, и на странице конвертера ни про какие ограничения ничего не нашел, поэтому так и написал.


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщение
но строк в них было ровно 64К

я это подозревал, но т.к. проверить уже не на чем (остался только 2013), то поверил MS "на слово"
Цитата
Установив пакет обеспечения совместимости в качестве дополнения к пакетам Microsoft Office 2000, Office XP или Office 2003, вы сможете открывать, редактировать и сохранять файлы в новых форматах, которые используются в последних версиях программ Word, Excel и PowerPoint.
, и на странице конвертера ни про какие ограничения ничего не нашел, поэтому так и написал.

Автор - KSV
Дата добавления - 08.09.2015 в 23:52
ikki Дата: Вторник, 08.09.2015, 23:57 | Сообщение № 20
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
ага...
я подумал - может я чего-то самое главное в жизни пропустил :D


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениеага...
я подумал - может я чего-то самое главное в жизни пропустил :D

Автор - ikki
Дата добавления - 08.09.2015 в 23:57
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Обработка данных таблицы при количестве строк более 300 000 (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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