Привет! Есть данные - таблица около 300 000 строк. На скрепке небольшой пример. Требуется, на основе имеющихся данных выставить дополнительный маркер в столбце "mark". Условие для выставления маркера: 1. запоминаем имя текущего участника в столбце "name", например на 5.01.2000 участник "aaaa"; 2. ищем этого участника в более ранних испытаниях, если не находим, переходим к следующему участнику 3. если находим, проверяем есть ли в более раннем испытании метка "m" и нет ли "1" в столбце "place" если выполняется условие, что есть метка "m" и нет "1" в столбце "place", то в столбце "mark" выставляется маркер "b"; если условие не выполняется, то переходим к следующему участнику в текущем испытании, т.е. более ранние результаты для "aaaa" нас не интересуют.
Как это реализовать в Excel, учитывая ограничение 65536 строк? Использовать несколько листов или файлов? Может стоит использовать какие-либо другие программы для обработки такого количества строк? [moder]Вы определитесь уже как-нибудь, сколько строк есть
ограничение Excel 65536 строк на листе. в исходной таблице 300 000 строк, таблицу ведь можно разбить на пять таблиц, например на разных листах
Привет! Есть данные - таблица около 300 000 строк. На скрепке небольшой пример. Требуется, на основе имеющихся данных выставить дополнительный маркер в столбце "mark". Условие для выставления маркера: 1. запоминаем имя текущего участника в столбце "name", например на 5.01.2000 участник "aaaa"; 2. ищем этого участника в более ранних испытаниях, если не находим, переходим к следующему участнику 3. если находим, проверяем есть ли в более раннем испытании метка "m" и нет ли "1" в столбце "place" если выполняется условие, что есть метка "m" и нет "1" в столбце "place", то в столбце "mark" выставляется маркер "b"; если условие не выполняется, то переходим к следующему участнику в текущем испытании, т.е. более ранние результаты для "aaaa" нас не интересуют.
Как это реализовать в Excel, учитывая ограничение 65536 строк? Использовать несколько листов или файлов? Может стоит использовать какие-либо другие программы для обработки такого количества строк? [moder]Вы определитесь уже как-нибудь, сколько строк есть
А если подходящих строк для одного участника несколько, нужно метку ставить во все строки или только в последнюю (поставьте m, например в D10)? Если во все, то
если установите эксель более новой версии, то строк Вам хватит
А если подходящих строк для одного участника несколько, нужно метку ставить во все строки или только в последнюю (поставьте m, например в D10)? Если во все, то
если прям так хочется реализовать именно в 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
если прям так хочется реализовать именно в 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
А если подходящих строк для одного участника несколько, нужно метку ставить во все строки или только в последнюю (поставьте 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
но как там сделать макрос или отбор я не представляю
а как вы собирались реализовать в Excel, если не представляете, как выгрузить данные из проги? Может их и выгружать не нужно, а просто загрузить ее базу, целиком, в Excel и обрабатывать, как вам нужно... (в каком формате она хранит свою базу?)
но как там сделать макрос или отбор я не представляю
а как вы собирались реализовать в Excel, если не представляете, как выгрузить данные из проги? Может их и выгружать не нужно, а просто загрузить ее базу, целиком, в Excel и обрабатывать, как вам нужно... (в каком формате она хранит свою базу?)KSV
то просто открыть ее в Excel и делай с данными что хочешь.
Это если админы на работе разрешат такое Может у них "Политика безопасности" не позволяет А так да и никакая STATISTICA не нужна можно все отчеты в Excel сделать
то просто открыть ее в Excel и делай с данными что хочешь.
Это если админы на работе разрешат такое Может у них "Политика безопасности" не позволяет А так да и никакая STATISTICA не нужна можно все отчеты в Excel сделать SLAVICK
а чего советовать? новое – всегда лучше... (вопрос о лицензии не поднимаем?) только к ленточному интерфейсу я до сих пор никак не привыкну... (поставил старое, привычное, меню)
а чего советовать? новое – всегда лучше... (вопрос о лицензии не поднимаем?) только к ленточному интерфейсу я до сих пор никак не привыкну... (поставил старое, привычное, меню)KSV
спасибо за код, все правильно поставил MSOffice 2013, протянул функцию до 47000 ячейки))) вот сижу, жду уже 10мин, пока 50% обработано... что же будет на 300К??? О_о боюсь повиснет Excel на таких объемах данных(
спасибо за код, все правильно поставил MSOffice 2013, протянул функцию до 47000 ячейки))) вот сижу, жду уже 10мин, пока 50% обработано... что же будет на 300К??? О_о боюсь повиснет Excel на таких объемах данных(HiHiMAX
проще поставить конвертер и использовать новый формат .xlsx (там строк может быть в 4 раза больше, чем вам надо)
серьезно? это какой именно конвертер такие кунштюки умеет вытворять? родной майкрософтовский - год назад не умел точно. т.е. файлы-то он открывал. но строк в них было ровно 64К
проще поставить конвертер и использовать новый формат .xlsx (там строк может быть в 4 раза больше, чем вам надо)
серьезно? это какой именно конвертер такие кунштюки умеет вытворять? родной майкрософтовский - год назад не умел точно. т.е. файлы-то он открывал. но строк в них было ровно 64Кikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
макрос макросу рознь если в вашем рабочем файле структура такая же, как в файле-примере, то ничего переделывать не нужно – просто поместите код в модуль листа и запустите [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]
Код
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
я это подозревал, но т.к. проверить уже не на чем (остался только 2013), то поверил MS "на слово"
Цитата
Установив пакет обеспечения совместимости в качестве дополнения к пакетам Microsoft Office 2000, Office XP или Office 2003, вы сможете открывать, редактировать и сохранять файлы в новых форматах, которые используются в последних версиях программ Word, Excel и PowerPoint.
, и на странице конвертера ни про какие ограничения ничего не нашел, поэтому так и написал.
я это подозревал, но т.к. проверить уже не на чем (остался только 2013), то поверил MS "на слово"
Цитата
Установив пакет обеспечения совместимости в качестве дополнения к пакетам Microsoft Office 2000, Office XP или Office 2003, вы сможете открывать, редактировать и сохранять файлы в новых форматах, которые используются в последних версиях программ Word, Excel и PowerPoint.
, и на странице конвертера ни про какие ограничения ничего не нашел, поэтому так и написал.KSV