|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
03.04.2011, 16:18 | #21 |
Регистрация: 03.04.2011
Сообщений: 5
|
Спасибо. Ловко придумано. Но мне нужно просто удалить одинаковые строки . у нас в фирме просто у всех 2003 excel . в 2007 эта функция уже встроена.
|
04.04.2011, 13:09 | #22 | |
Регистрация: 03.04.2011
Сообщений: 5
|
Цитата:
s = Join(Application.Index(a, i, 0), "|") Ведь join объеденяет элементы одномерного массива. в связи с этим очень интересна строка Application.Index(a, i, 0). Спасибо |
|
04.04.2011, 17:58 | #23 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Функция Application.Index(a, i, 0) вернет одномерный массив, состоящий из элементов строки i двумерного массива a.
Соответственно, функция Join(Application.Index(a, i, 0), "|") вернет строковую переменную, представляющую собой все элементы полученного одномерного массива, разделенные символом "|". Таким образом, строковая переменная s = Join(Application.Index(a, i, 0), "|") будет содержать значения всех ячеек строки i в определенном диапазоне, разделенных указанным символом. Именно эти значения мы и заносим в коллекцию. А как известно, коллекция не может содержать два одинаковых элемента. Таким образом, перехватывая возможную ошибку при добавлении элемента в коллекцию, мы определяем, встречался ли нам такой элемент ранее, или нет. P.S. На будущее: если требуется получить одномерный массив b, состоящий из элементов столбца i двумерного массива a, то можно использовать b = Application.Index(a, 0, i).
Чем шире угол зрения, тем он тупее.
Последний раз редактировалось SAS888; 04.04.2011 в 18:03. |
04.04.2011, 20:46 | #24 | |
Регистрация: 03.04.2011
Сообщений: 5
|
Цитата:
|
|
21.11.2014, 10:21 | #25 |
Новичок
Джуниор
Регистрация: 21.11.2014
Сообщений: 2
|
Sub Main()
Dim x As Range, y As New Collection, z As Range, i As Long, a(), s As String Set z = Application.InputBox("Ввод/выбор", "Диапазон", Type:=8) If z.Count = 1 Then Exit Sub Else a = z.Value For i = 1 To UBound(a, 1) s = Join(Application.Index(a, i, 0), "|") On Error Resume Next: y.Add s, s If Err <> 0 Then If x Is Nothing Then Set x = z.Rows(i) Else Set x = Union(x, z.Rows(i)) On Error GoTo 0 End If: Next: x.EntireRow.Delete End Sub Макрос понравился. Как сделать чтобы он не удалял а очищал ячейки не во всей строке а до определенного столбца к примеру Q? |
21.11.2014, 12:08 | #26 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
Код:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
Последний раз редактировалось IgorGO; 21.11.2014 в 12:12. |
21.11.2014, 12:58 | #27 |
Новичок
Джуниор
Регистрация: 21.11.2014
Сообщений: 2
|
Большое спасибо!!!
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поиск одинаковых строк | Demitriy | Microsoft Office Excel | 45 | 26.07.2010 08:50 |
Перенос строк по двойному клику в Excel 2003 | Riddick | Помощь студентам | 8 | 15.12.2009 16:59 |
удаление одинаковых ссылок | neoman1 | Microsoft Office Word | 6 | 30.11.2009 16:05 |
удаление одинаковых элементов из массива | sauron99 | Общие вопросы Delphi | 6 | 15.04.2009 21:27 |
удаление одинаковых слов (С/С++) | jewel | Помощь студентам | 1 | 12.12.2008 15:14 |