Поиск поизиции для массива в коде 
				   
 
 
 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     
   
 
   
 
 
 Группа: Друзья  
 
 
 Ранг: Участник клуба  
 
 Сообщений:  3859 
 
 
 
 
  Репутация:    
 819    
 ±  
 
  
 Замечаний:
 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     
   
 
  
   
 
 
 Группа: Админы  
 
 
 Ранг: Местный житель  
 
 Сообщений:  19569 
 
 
 
 
  Репутация:    
 4646    
 ±  
 
  
 Замечаний:
    ±  
   Excel 365 & Mac Excel          
  
 
 
 
 
 
 
"Черт возьми, Холмс! Но как??!!"   Ю-money 41001765434816  
  
  
  
 Ответить 
Сообщение  покажите в файлеАвтор - Pelena  Дата добавления - 02.05.2020  в 22:36   
 
 
 Hugo  
 Дата: Суббота, 02.05.2020, 22:52 | 
 Сообщение № 6     
   
 
   
 
 
 Группа: Друзья  
 
 
 Ранг: Участник клуба  
 
 Сообщений:  3859 
 
 
 
 
  Репутация:    
 819    
 ±  
 
  
 Замечаний:
 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     
   
 
   
 
 
 Группа: Друзья  
 
 
 Ранг: Участник клуба  
 
 Сообщений:  3859 
 
 
 
 
  Репутация:    
 819    
 ±  
 
  
 Замечаний:
 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