Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перебор данных в таблице Excel 
:(
    Опции темы
Mick Winder
  Дата 13.2.2006, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 15.10.2004
Где: Москва Рязанка

Репутация: нет
Всего: -1



Какую формулу можно использовать для того, чтобы оставить в определенном списке неповторяющиеся элементы, т.е. свернуть список, оставив только все в единичном экземпляре.

PM MAIL   Вверх
Staruha
Дата 13.2.2006, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 6
Всего: 27





--------------------
Возмездие настигнет
PM MAIL   Вверх
AsIs
Дата 14.2.2006, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 2.4.2005
Где: Санкт-Петербург

Репутация: 15
Всего: 17



Ну и еще этот топик укажу http://forum.vingrad.ru/index.php?showtopic=82323
smile

Есть еще вариант - использование расширенного фильтра - здесь вообще ни формулы ни макросы не нужны - наслаждаемся жизнью. smile
PM MAIL ICQ   Вверх
Mick Winder
Дата 15.2.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 15.10.2004
Где: Москва Рязанка

Репутация: нет
Всего: -1



Вообще-то я думал, что есть какая-то формула, предоставленная Excel. Но видимо нет... Я так и предполагал, что нужно писать на VBA и использовать тот алгоритм, какой предложила Staruha.
Делюсь своим кодом. Перед запуском макроса следует выделить область одного столбца, в котором и находятся "проблемные" данные.
Код

Sub Delserdat()

  Dim B As String
  Dim i As Integer
  Dim j As Integer
  Dim Kz As Integer
  Dim D As String
  Dim Col As String
  Dim Ter As String
  Dim Ker As String
  Dim Der As String
  Dim ARow As Variant
  Dim BRow As Variant
  Dim jf As Boolean
    
    Set A = Selection
    B = A.Address
    For i = 1 To Len(B)
     If Mid(B, i, 1) <> "$" Then D = D + Mid(B, i, 1)
    Next i
        
    Col = Mid(D, 1, 1)
   
   jf = False
    j = 0
    For i = 1 To Len(D)
     If Mid(D, i, 1) = ":" Then
      j = i
      jf = True
     End If
    Next i
    
   If jf = True Then
   For i = 2 To j - 1
    ARow = ARow + Mid(D, i, 1)
   Next i
   Else: For i = 2 To Len(D)
          ARow = ARow + Mid(D, i, 1)
    Next i
   End If
      
   If jf = True Then
   For i = j + 2 To Len(D)
    BRow = BRow + Mid(D, i, 1)
   Next i
   Else: BRow = ARow
   End If
   
' **************************************************************
    i = ARow
    Kz = BRow
  While i <> (Kz - 1)
    j = i + 1
    While j <> Kz
     Ter = Col & Trim(Str(i))
     Ker = Col & Trim(Str(j))
     If Range(Ter) = Range(Ker) Then
      Der = Trim(Str(j)) & ":" & Trim(Str(j))
      Rows(Der).Delete Shift:=xlUp
      Kz = Kz - 1
      j = j - 1
     End If
     j = j + 1
    Wend
    i = i + 1
   Wend

End Sub

PM MAIL   Вверх
Twwi
Дата 15.2.2006, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 8.11.2005
Где: Домодедово

Репутация: нет
Всего: 5



Есть формула, но она не очень красива, т.к. она "выдирает" повторяющиеся значения, т.е. диапазон получается с "дырками". Прикрпеляю. Если есть вопросы, расскажу.
Но этот некрасивый набор уникальных значений мне потом все равно приходилось загонять в массив который уже с легкостью вставлялся в любое место
Код

ReDim AA(nbv - 1) 'nbv - количество уникальных значений, nbv беру с ячеки листа, там оно считается 
                                  'по формуле   {=SUM(IF((c3:c37)>0;1;0))} колонка с - колонка                           
                                  'уже отсортированных  значений

For i = 0 To Range("row").Value  ' row - это ячейка содержащая количество рядов в некрасивом 
                                                    'диапозоне
 If Range("c" & Trim(Str(i))).Value > 0 Then
   AA(i) = Range("c" & Trim(Str(i))).Value
 End If


Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  Book3.rar 1,60 Kb
PM MAIL ICQ   Вверх
AsIs
Дата 15.2.2006, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 2.4.2005
Где: Санкт-Петербург

Репутация: 15
Всего: 17



smile
Практически все пользователи Excel условно делятся на две категории, первые ни при каких обстоятельствах не используют макросы (потому как не знают), вторые почти все решают через макросы, даже сумму. smile
Меньшинство тех, кто использует адекватные инструменты в зависимости от задачи.
Здесь, к счастью достаточно много людей адекватно оценивают задачу.
Сложности возникают правда, когда те кто спрашивает, не четко формулируют вопрос - а зря, в зависимости от контекста, лучше исопльзовать подход тот или иной. (Эк меня потянуло на философию smile )

Вот пример с отбором уникальных записей. Уточнить бы, что потом мы хотим с этими данными делать? Скопировать в другое место, или _сразу_ получить на новом месте. Это нужно делать многократно или единовременно?

Давайте посмотрим такой вариант.
Щелкаем в списке, выполняем Данные \ Фильтр \ Расширенный фильтр\ вводим адреса ячеек, ставим галочку Только уникальные записи и Скопировать результат в другое место.
Все.
Зайти в меню по трудозатратам сопоставимо с запуском макроса, только сам макрос писать не надо.

Что касается формулы.
Готовой конечно формулы нет. Но если рассмотреть вариант: ввести формулу в дополнительный столбец и далее сделать фильтрацию - тогда все ок. После фильтрации можно данные копировать куда угодно.
Опять же, по трудозатратам примерно то, что предлагает Twwi. 1) Ввести формулу 2) Что-то сделать с ячейками (отфимльтровать и скопировать).
Только формула проще намного (имхо). - см. приложение.


Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  Book3.zip 2,54 Kb
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Работа с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Работа с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0725 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.