Страница: 1 |
Страница: 1 |
Вопрос: Найти одинаковые значения в столбцах Excel
Добавлено: 01.01.08 18:08
Автор вопроса: Zahar | Web-сайт:
Помогите решить задачу:
Имеется Workbook с двумя Worksheets.
В столбцах (скажем, их 50) WorkSheets(1) записаны различные 7-значные числа.
Необходимо создать макрос, который быстро выявит числа, которые встречаются не менее, чем в двух разных столбцах. И только совпадающие числа будут скопированы в Worksheets(2) в те же ячейки, где они находились в Worksheets(1) (числа, которые встречаются только в одном столбюце туда не копируются).
Сразу скажу, что вариант с проверкой числа из каждой ячейки путем пошагового сопоставлениями его со всеми ячейками в других столбцах не подходит, так как это слишком долго.
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #1
Добавлено: 01.01.08 21:07
____ 1. Можно сделать быстрее переписав сначала все столбцы в многомерный массив. Операции с ячейками работают очень долго.
____ 2. Можно "слить" всё в одномерный массив с проверкой в процессе копирования на повтор в пределах одного столбца и удаление повтора. Потом проверка на повтор по всему массиву.
Номер ответа: 2
Автор ответа:
Zahar
Вопросов: 91
Ответов: 67
Web-сайт:
Профиль | | #2
Добавлено: 01.01.08 23:50
Хорошо, тогда встречный вопрос:
- можно ли быстро загрузить столбец в массив, не шагая по ячейкам, а одним махом?
Номер ответа: 3
Автор ответа:
GenyaA
Вопросов: 0
Ответов: 185
Web-сайт:
Профиль | | #3
Добавлено: 05.01.08 17:51
Можно.
massiv = Range("A1:A65536"
Debug.Print massiv(10,1)
Номер ответа: 4
Автор ответа:
Pavel
Вопросов: 0
Ответов: 36
Профиль | | #4
Добавлено: 06.01.08 15:25
Правильнее, наверное, будет через Transpose
Dim iArray()
Dim i As Long
'загоняем одним махом диапазон ячеек A1:A20 в массив
iArray = Application.Transpose(Range("A1:A20")
'отображаем каждое значение в окне Immediate (Ctrl+G)
For i = 1 To UBound(iArray)
Debug.Print iArray(i)
Next
End Sub