|
Сравнить несколько столбцов и результат скопировать в другой файл. Не могу найти ошибку.
|
|||
---|---|---|---|
#18+
День добрый Не получилось переделать макрос для следующего задания: Нужно таблицу состоящей из 4-х столбцов из файла №1 - первый наименование, 3 других числовые, сравнить с другим файлом №2, и в случае совпадения наименования и 2 других столбцов скопировать в файл №2 содержимое 3-го столбца с цифрами. Никто не может подсказать, в чем тут ошибка? Option Explicit Sub Test1() Const DataRange = "A:E" Dim Arr1(), Arr2(), Arr3(), Arr4(), r&, c&, rs&, ds&, cs&, rs1&, ds1&, cs1&, i&, r1&, c1& Arr1() = Intersect(ActiveSheet.UsedRange, Range(DataRange)).Value rs = UBound(Arr1, 3) cs = UBound(Arr1, 4) ds = UBound(Arr1, 5) ReDim Arr2(1 To rs, 1 To 1) Windows("ëèñò2").Activate rs1 = UBound(Arr3, 3) cs1 = UBound(Arr3, 4) ds1 = UBound(Arr1, 5) ReDim Arr4(1 To rs, 1 To 1) Windows("ëèñò1").Activate For c = 1 To cs Step 3 For r = 1 To rs If Arr1(r, c + 2) = Cells(r1, c1 + 2) Then If Arr1(r, c + 3) = Cells(r1, c1 + 3) Then If Arr1(r, c + 4) = Cells(r1, c1 + 4) Then i = i + 1 Arr2(i, 1) = Arr1(r, c + 2) End If End If End If Next Next ReDim Arr1(0) If i > 0 Then If i > Rows.Count Then MsgBox "Íàéäåíî: " & i, 16, "!": Exit Sub On Error Resume Next Application.DisplayAlerts = False Application.ScreenUpdating = False Sheets("Result").Delete With Sheets.Add .Name = "Result" Range("F1").Resize(i).Value = Arr2() End With Application.DisplayAlerts = True Application.ScreenUpdating = True End If End Sub ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2012, 11:13 |
|
Сравнить несколько столбцов и результат скопировать в другой файл. Не могу найти ошибку.
|
|||
---|---|---|---|
#18+
Код: vbnet 1. 2. 3.
Массив Arr1 - двумерный, существует только UBound(Arr1, 1) и UBound(Arr1, 2) Приложенный файл - это №1 или №2? Где другой? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2012, 11:26 |
|
Сравнить несколько столбцов и результат скопировать в другой файл. Не могу найти ошибку.
|
|||
---|---|---|---|
#18+
Вообще это делается функцией ВПР. Бэз циклов :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2012, 11:28 |
|
Сравнить несколько столбцов и результат скопировать в другой файл. Не могу найти ошибку.
|
|||
---|---|---|---|
#18+
Казанский, Приложенный файл - это №1 или №2? Где другой? №1-й. Второй представляюет такой же файл, просто с перемешанными названиями и без 4-го стобца(F в примере 1-го файла). Казанский\ Вообще это делается функцией ВПР. Бэз циклов :) К сожалению, мне нужно чтобы перенос работал с условием что совпадают все три значения - и только в этом случае копировать 4-е. ВПР же на попытку сделать именно так отвечает - слишком много аргументов. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2012, 15:18 |
|
Сравнить несколько столбцов и результат скопировать в другой файл. Не могу найти ошибку.
|
|||
---|---|---|---|
#18+
С ВПР можно, если в таблице, откуда подтягиваются данные, создать доп. столбец типа =A1&A2&A3, а в качестве искомого значения тоже использовать выражение A1&A2&A3. Числа лучше соединять через какой-нибудь символ, чтобы избежать ошибочных совпадений, например =A1&"|"&A2&"|"&A3 Но можно и без доп. столбца, если использовать комбинацию ИНДЕКС+ПОИСКПОЗ. См. в файле пример подтягивания данных с Лист1 на Лист2 одной формулой массива, введенной в столбец. Поскольку формула вводится один раз, нет необходимости использовать абсолютную адресацию Лист1. Чтобы показать, что формула действительно ищет по 3-м значениям, отсортировал Лист2!A1:C18 по убыванию и изменил некоторые значения. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2012, 16:09 |
|
|
start [/forum/topic.php?fid=60&msg=37885023&tid=2157572]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 136ms |
0 / 0 |