Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Работа с массивами / 13 сообщений из 13, страница 1 из 1
14.08.2007, 14:00:45
    #34726552
Xelag
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с массивами
Здравствуйте.
У меня есть проблемка... нужно в экселе написать макрос, который сравнит два массива по строкам, каждый из которых состоит из двух колонок - первая - это цифры, вторая - текст.
Если строка искомого массива найдена во втором, то нас это уже не интересует, если же нет - надо понять, нет ли такой строки в проверяемом массиве вообще, или ошибка в некоторых символах, будь то текст или цифра(а главное, если ошибка в символах, то надо понять, где эта строка находится) - ээм, немного витиевато, но по-другому не написать.

Не могли бы мне помочь с этой задачкой? ^__^
Спасибо.
...
Рейтинг: 0 / 0
14.08.2007, 16:44:28
    #34727334
vbapro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с массивами
Массивы - это области на листе Excel?
На листе это можно просто сделать: сначала поиском и исключением того, что найдено, а затем анализ не найденого.
Проверка на схожесть - не совсем простая задача и как это реализовывать-зависит от вида данных. Покажите образцы данных для начала.
...
Рейтинг: 0 / 0
14.08.2007, 16:56:02
    #34727384
Xelag
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с массивами
Ну образно выглядит так:
Sheet1 - исходник
Sheet2 - массив, требующий проверки.
...
Рейтинг: 0 / 0
14.08.2007, 16:58:18
    #34727392
Xelag
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с массивами
...
Рейтинг: 0 / 0
14.08.2007, 17:00:51
    #34727404
Rampage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с массивами
да , ябы сделал , например что то вроде
если первая ячейка строки равна первой ячейке второго массива, а вторая ячейка второго массива равна второй ячейке первого , тогда делит ,
ну ячейку как функцию +1 , и в итоге останутся несовпадающие, а дальше уж , сложновато, несоответствие в символах искать для меня :\
...
Рейтинг: 0 / 0
14.08.2007, 17:04:00
    #34727418
Xelag
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с массивами
Ну эти две таблички по идее разных размеров, так как что-то может быть недобавленным или дублированным, также, информация в позиции A2:B2 в исходнике может находится во втором шите абсолютно на другой позиции.
...
Рейтинг: 0 / 0
14.08.2007, 17:43:31
    #34727550
vbapro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с массивами
Вся сложность в проверке на сходство, как и ожидалось. Такой вопрос уже обсуждался на форуме. Есть алгоритмы для проверки английского языка, но для русского я не видел. Скорее всего, это нужно будет самим разрабатывать.
...
Рейтинг: 0 / 0
14.08.2007, 17:55:41
    #34727588
Xelag
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с массивами
Ээм, а не могли бы вы подсказать ссылочку на тот топик? Я искал, но что-то ничего похожего не нашлось... =(
...
Рейтинг: 0 / 0
14.08.2007, 18:33:24
    #34727688
vbapro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с массивами
XelagЭэм, а не могли бы вы подсказать ссылочку на тот топик? Я искал, но что-то ничего похожего не нашлось... =( Excel. Поиск похожего слова.
...
Рейтинг: 0 / 0
14.08.2007, 18:48:37
    #34727714
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с массивами
Самым точным решением всё равно будет:
Справа от каждого значения написать сколько придёт в голову неправильных написаний и поискать их все. Могут помочь следующие примочки:
- оператор Like
- приведение текста к одному регистру перед сравненем
- замена всех пробелов в значениях на ""(пусто) перед сравнением, и в сравниваемом значении и в том, с которым сравниваем.
...
Рейтинг: 0 / 0
15.08.2007, 13:26:16
    #34729276
Xelag
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с массивами
Function Findtext(Rng As Range, text As String) As String
Dim t As String
Dim mycell As Range
For Each mycell In Rng
if InStr(mycell.text, text) > 0 Then
if Len(t) = 0 Then
t = mycell.Address(False, False)
Else
t = t & "," & mycell.Address(False, False)
End If
End If
Next mycell
ContainsText = t
End Function

У меня массив двумерный
x0 y0
x1 y1
x2 y2, где x - число, y - текст. Ну и соответсвенно поиск нужно делать по x & y, потому что только их сочетание делает их уникальными.
Вот функция ищет текст в заданном диапазоне, а как сделать, чтобы он искал сразу и текст и численные выражения?
Хотя, наверное, лучше сделать, чтобы он искал по x, и если совпадение, то сравнивает сразу вторую ячейку, где y.
Вопрос на миллион долларов - как это осуществить? ^__^
...
Рейтинг: 0 / 0
19.08.2007, 23:24:09
    #34737286
Fatty
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с массивами
Вроде с твоей книгой выдает правильный результат:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Sub CompareRanges()

Dim rng1 As Range, rng2 As Range
Dim i, j, k
Set rng1 = Sheets("Sheet1").Range("A2:B11")
Set rng2 = Sheets("Sheet2").Range("A1:B9")
For i =  1  To rng1.Rows.Count
j =  0 

Do
j = j +  1 
If rng1.Cells(i,  1 ) = rng2.Cells(j,  1 ) And _
   StrComp(rng1.Cells(i,  2 ), rng2.Cells(j,  2 ), vbBinaryCompare) =  0  Then
   k = k +  1 
Sheets("Sheet3").Cells(k,  1 ) = rng1.Cells(i,  1 )
Sheets("Sheet3").Cells(k,  2 ) = rng1.Cells(i,  2 )
End If
Loop Until j = rng2.Rows.Count

Next i

End Sub

~'J'~
...
Рейтинг: 0 / 0
20.08.2007, 12:27:39
    #34738119
Xelag
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с массивами
хмм, у меня почему-то не работает...
я тут написал макрос, вроде как простой, но чо т нифига не работает
Sub find()
Dim xi As Double
Dim xj As Double
Dim yi As String
Dim yj As String
Dim j As Double
Dim i As Double
Application.ScreenUpdating = False
Sheet9.Activate
i = 'номер первого столбца, которым мы проверяем второй массив'
xi = Cells(i, 1).Value
yi = Cells(i, 2).Value
Do Until i = 'номер последнего столбца, которым мы проверяем второй массив'
Sheet2.Activate
j = 'номер первого проверяемого столбца'
Do Until j = 'номер последнего проверяемого столбца'
xj = Cells(j, 3).Value
yj = Cells(j, 4).Value
If xj = xi And yj = yi Then
Sheet2.Activate
Cells(j, 8).Value = "1"
Sheet9.Activate
Cells(i, 8).Value = "1"
Sheet2.Activate
End If
j = j + 1
Loop
i = i + 1
Loop
End Sub
Хелпаните плиз, почему не работает?
Он мне в шите 9(искомый шит) показывает везде единички, а в проверяемом(шит2) ничего не пишет.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Работа с массивами / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]