Поиск поизиции для массива в коде
fanat1k90
Дата: Суббота, 02.05.2020, 20:34 |
Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация:
0
±
Замечаний:
0% ±
Excel 2016
Всем здравствуйте! Мне необходимо прописать в коде VBA формулу аналог этой:Код
{=ПОИСКПОЗ(1;--(A1:C1<=0,33);0)}
Написал такой код, но в нем ошибка: [vba]Код
Application.CutCopyMode = False ActiveWorkbook.Worksheets(6).Cells.ClearContents For k = 8 To 9 For i = 1 To ActiveWorkbook.Worksheets(5).Cells(k, 51) - 1 For j = 1 To ActiveWorkbook.Worksheets(5).Cells(k, 51) ActiveWorkbook.Worksheets(5).Cells(k, 42) = i ActiveWorkbook.Worksheets(5).Cells(k, 43) = j ActiveWorkbook.Worksheets(6).Cells(i + 1 + (k - 8) * 21, 1) = k ActiveWorkbook.Worksheets(6).Cells(i + 1 + (k - 8) * 21, 2) = i ActiveWorkbook.Worksheets(6).Cells(1 + (k - 8) * 21, 21 - j + 4) = j ActiveWorkbook.Worksheets(6).Cells(1 + i + (k - 8) * 21, ActiveWorkbook.Worksheets(5).Cells(k, 51) - j + 4) = CDbl(Trim(ActiveWorkbook.Worksheets(5).Cells(k, 49))) ActiveWorkbook.Worksheets(6).Cells(1 + i + (k - 8) * 21, 25) = Application.CountIfs(Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25)), ">=0", Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25)), "<=0.33") Next j Тут ошибка: ActiveWorkbook.Worksheets(6).Cells(1 + i + (k - 8) * 21, 3).FormulaArray = Application.Match(1, --(Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25) <= 0.33)), 0) Next i Next k End Sub
[/vba] Буду очень благодарен за помощь!
Всем здравствуйте! Мне необходимо прописать в коде VBA формулу аналог этой:Код
{=ПОИСКПОЗ(1;--(A1:C1<=0,33);0)}
Написал такой код, но в нем ошибка: [vba]Код
Application.CutCopyMode = False ActiveWorkbook.Worksheets(6).Cells.ClearContents For k = 8 To 9 For i = 1 To ActiveWorkbook.Worksheets(5).Cells(k, 51) - 1 For j = 1 To ActiveWorkbook.Worksheets(5).Cells(k, 51) ActiveWorkbook.Worksheets(5).Cells(k, 42) = i ActiveWorkbook.Worksheets(5).Cells(k, 43) = j ActiveWorkbook.Worksheets(6).Cells(i + 1 + (k - 8) * 21, 1) = k ActiveWorkbook.Worksheets(6).Cells(i + 1 + (k - 8) * 21, 2) = i ActiveWorkbook.Worksheets(6).Cells(1 + (k - 8) * 21, 21 - j + 4) = j ActiveWorkbook.Worksheets(6).Cells(1 + i + (k - 8) * 21, ActiveWorkbook.Worksheets(5).Cells(k, 51) - j + 4) = CDbl(Trim(ActiveWorkbook.Worksheets(5).Cells(k, 49))) ActiveWorkbook.Worksheets(6).Cells(1 + i + (k - 8) * 21, 25) = Application.CountIfs(Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25)), ">=0", Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25)), "<=0.33") Next j Тут ошибка: ActiveWorkbook.Worksheets(6).Cells(1 + i + (k - 8) * 21, 3).FormulaArray = Application.Match(1, --(Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25) <= 0.33)), 0) Next i Next k End Sub
[/vba] Буду очень благодарен за помощь! fanat1k90
Сообщение отредактировал fanat1k90 - Суббота, 02.05.2020, 20:35
Ответить
Сообщение Всем здравствуйте! Мне необходимо прописать в коде VBA формулу аналог этой:Код
{=ПОИСКПОЗ(1;--(A1:C1<=0,33);0)}
Написал такой код, но в нем ошибка: [vba]Код
Application.CutCopyMode = False ActiveWorkbook.Worksheets(6).Cells.ClearContents For k = 8 To 9 For i = 1 To ActiveWorkbook.Worksheets(5).Cells(k, 51) - 1 For j = 1 To ActiveWorkbook.Worksheets(5).Cells(k, 51) ActiveWorkbook.Worksheets(5).Cells(k, 42) = i ActiveWorkbook.Worksheets(5).Cells(k, 43) = j ActiveWorkbook.Worksheets(6).Cells(i + 1 + (k - 8) * 21, 1) = k ActiveWorkbook.Worksheets(6).Cells(i + 1 + (k - 8) * 21, 2) = i ActiveWorkbook.Worksheets(6).Cells(1 + (k - 8) * 21, 21 - j + 4) = j ActiveWorkbook.Worksheets(6).Cells(1 + i + (k - 8) * 21, ActiveWorkbook.Worksheets(5).Cells(k, 51) - j + 4) = CDbl(Trim(ActiveWorkbook.Worksheets(5).Cells(k, 49))) ActiveWorkbook.Worksheets(6).Cells(1 + i + (k - 8) * 21, 25) = Application.CountIfs(Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25)), ">=0", Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25)), "<=0.33") Next j Тут ошибка: ActiveWorkbook.Worksheets(6).Cells(1 + i + (k - 8) * 21, 3).FormulaArray = Application.Match(1, --(Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25) <= 0.33)), 0) Next i Next k End Sub
[/vba] Буду очень благодарен за помощь! Автор - fanat1k90 Дата добавления - 02.05.2020 в 20:34
Dmitriy_37
Дата: Суббота, 02.05.2020, 21:05 |
Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 26
Репутация:
4
±
Замечаний:
0% ±
Excel 2010
здравствуйте! Попробуйте заменить на Код
.FormulaArray = Evaluate("=ПОИСКПОЗ(1;--(A1:C1<=0,33);0)")
здравствуйте! Попробуйте заменить на Код
.FormulaArray = Evaluate("=ПОИСКПОЗ(1;--(A1:C1<=0,33);0)")
Dmitriy_37
Ответить
Сообщение здравствуйте! Попробуйте заменить на Код
.FormulaArray = Evaluate("=ПОИСКПОЗ(1;--(A1:C1<=0,33);0)")
Автор - Dmitriy_37 Дата добавления - 02.05.2020 в 21:05
Hugo
Дата: Суббота, 02.05.2020, 21:12 |
Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация:
790
±
Замечаний:
0% ±
365
[vba]Код
.FormulaArray = "=MATCH(1,--(" & Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25)).Address & "<=0.33), 0)"
[/vba]
[vba]Код
.FormulaArray = "=MATCH(1,--(" & Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25)).Address & "<=0.33), 0)"
[/vba] Hugo
webmoney: E265281470651 Z422237915069 USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
Сообщение отредактировал Hugo - Суббота, 02.05.2020, 21:14
Ответить
Сообщение [vba]Код
.FormulaArray = "=MATCH(1,--(" & Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25)).Address & "<=0.33), 0)"
[/vba] Автор - Hugo Дата добавления - 02.05.2020 в 21:12
fanat1k90
Дата: Суббота, 02.05.2020, 22:22 |
Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация:
0
±
Замечаний:
0% ±
Excel 2016
.FormulaArray = "=MATCH(1,--(" & Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25)).Address & "<=0.33), 0)"
все равно выдает ошибку
.FormulaArray = "=MATCH(1,--(" & Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25)).Address & "<=0.33), 0)"
все равно выдает ошибкуfanat1k90
Ответить
Сообщение .FormulaArray = "=MATCH(1,--(" & Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25)).Address & "<=0.33), 0)"
все равно выдает ошибкуАвтор - fanat1k90 Дата добавления - 02.05.2020 в 22:22
Pelena
Дата: Суббота, 02.05.2020, 22:36 |
Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 19405
Репутация:
4555
±
Замечаний:
±
Excel 365 & Mac Excel
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Ответить
Сообщение покажите в файлеАвтор - Pelena Дата добавления - 02.05.2020 в 22:36
Hugo
Дата: Суббота, 02.05.2020, 22:52 |
Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация:
790
±
Замечаний:
0% ±
365
У меня ошибки нет, но для чистоты - нужно Address(0, 0)
У меня ошибки нет, но для чистоты - нужно Address(0, 0) Hugo
webmoney: E265281470651 Z422237915069 USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
Ответить
Сообщение У меня ошибки нет, но для чистоты - нужно Address(0, 0) Автор - Hugo Дата добавления - 02.05.2020 в 22:52
fanat1k90
Дата: Суббота, 02.05.2020, 23:42 |
Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация:
0
±
Замечаний:
0% ±
Excel 2016
Файл на рабочем компьютере. А в моём варианте [vba]Код
.FormulaArray = Application.Match(1, --(Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25) <= 0.33)), 0)
[/vba] где ошибка? Или может у вас вообще есть идеи как проще прописать? нужно вывести порядковый номер первого значения в строке, которое меньше либо равно 0,33 в этом диапазоне [vba]Код
(Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25)
[/vba]
Файл на рабочем компьютере. А в моём варианте [vba]Код
.FormulaArray = Application.Match(1, --(Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25) <= 0.33)), 0)
[/vba] где ошибка? Или может у вас вообще есть идеи как проще прописать? нужно вывести порядковый номер первого значения в строке, которое меньше либо равно 0,33 в этом диапазоне [vba]Код
(Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25)
[/vba] fanat1k90
Сообщение отредактировал fanat1k90 - Суббота, 02.05.2020, 23:49
Ответить
Сообщение Файл на рабочем компьютере. А в моём варианте [vba]Код
.FormulaArray = Application.Match(1, --(Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25) <= 0.33)), 0)
[/vba] где ошибка? Или может у вас вообще есть идеи как проще прописать? нужно вывести порядковый номер первого значения в строке, которое меньше либо равно 0,33 в этом диапазоне [vba]Код
(Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25)
[/vba] Автор - fanat1k90 Дата добавления - 02.05.2020 в 23:42
Hugo
Дата: Воскресенье, 03.05.2020, 10:03 |
Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация:
790
±
Замечаний:
0% ±
365
В Вашем варианте ошибка в том, что это будет не формула массива, а значение, и в том, что в выражении со скобками промахнулись, но это не имеет значения... А если нужно макросом вывести номер - то макросом можно и пройтись в цикле по строке с анализом значений: [vba]Код
For Each c In Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25)) x = x + 1 If c <= 0.33 Then MsgBox x: Exit For Next
[/vba] или например взять готовую формулу [vba]Код
MsgBox Evaluate("MATCH(1,--(" & Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25)).Address(0, 0) & "<=0.33), 0)")
[/vba] Хотя вот странно - на листе работает только как формула массива, а для evaluate это не важно, в чём подвох?
В Вашем варианте ошибка в том, что это будет не формула массива, а значение, и в том, что в выражении со скобками промахнулись, но это не имеет значения... А если нужно макросом вывести номер - то макросом можно и пройтись в цикле по строке с анализом значений: [vba]Код
For Each c In Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25)) x = x + 1 If c <= 0.33 Then MsgBox x: Exit For Next
[/vba] или например взять готовую формулу [vba]Код
MsgBox Evaluate("MATCH(1,--(" & Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25)).Address(0, 0) & "<=0.33), 0)")
[/vba] Хотя вот странно - на листе работает только как формула массива, а для evaluate это не важно, в чём подвох? Hugo
webmoney: E265281470651 Z422237915069 USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
Сообщение отредактировал Hugo - Воскресенье, 03.05.2020, 10:04
Ответить
Сообщение В Вашем варианте ошибка в том, что это будет не формула массива, а значение, и в том, что в выражении со скобками промахнулись, но это не имеет значения... А если нужно макросом вывести номер - то макросом можно и пройтись в цикле по строке с анализом значений: [vba]Код
For Each c In Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25)) x = x + 1 If c <= 0.33 Then MsgBox x: Exit For Next
[/vba] или например взять готовую формулу [vba]Код
MsgBox Evaluate("MATCH(1,--(" & Range(Cells(1 + i + (k - 8) * 21, 4), Cells(1 + i + (k - 8) * 21, 25)).Address(0, 0) & "<=0.33), 0)")
[/vba] Хотя вот странно - на листе работает только как формула массива, а для evaluate это не важно, в чём подвох? Автор - Hugo Дата добавления - 03.05.2020 в 10:03