Найти самый дальний номер из 0 в динамических диапазонах VBA

У меня есть книга Excel, в которой имеется не более 6 наборов данных, но длина или объем данных в наборе данных является переменным / динамическим. Я хочу, чтобы найти самое большое значение из 0 во всех столбцах A-Axis_Disp (см. Рисунок ниже). Я думаю, что я на правильном пути с моим кодом, но не знаю, как закончить его. Любые советы / помощь будут очень признательны. ТИА. введите описание изображения здесь

Вот мой код:

Sub FindFurthestNoFromZero() Dim iRng As Range Dim Rng1 As Range Dim Rng2 As Range Dim Rng3 As Range Dim NewRng1 As Range Dim val As Variant Dim B As Integer Dim Dispws As Worksheet Set Dispws = Sheets("Disp_&_Result_Calc") Set iRng = Dispws.Range(Dispws.Cells(1, 1), Dispws.Cells(1, Dispws.Cells(1, Columns.Count).End(xlToLeft).column)) B = 0 Do Until B = Sheets("Hidden").Range("G2").Value + 1 For Each cel In iRng If cel.Value = "A-Axis_Disp" Then Set Rng1 = cel.EntireColumn.Find(What:="", LookIn:=xlValues, LookAt:=xlPart) Debug.Print Rng1.FormulaR1C1 Set Rng2 = Dispws.Cells(Rng1.row - 1, Rng1.column) Debug.Print Rng2.FormulaR1C1 Set Rng3 = Cells(cel.row + 1, cel.column) Debug.Print Rng3.FormulaR1C1 Set NewRng1 = Range(Rng3.Address & ":" & Rng2.Address) Debug.Print NewRng1.Address For Each cell In Range("NewRng1") val = cell.Value Next cell End If Next cel Loop End Sub 

Достаточно ли формулы?

 =IFERROR(INDEX(C:C, IFERROR(MATCH(MAX(AGGREGATE(14,6,ABS(0-C2:INDEX(C:C,MATCH(E1+99,C:C))),1),AGGREGATE(14,6,ABS(0-H2:INDEX(H:H,MATCH(E1+99,H:H))),1)), C:C, 0), MATCH(0-MAX(AGGREGATE(14,6,ABS(0-C2:INDEX(C:C,MATCH(E1+99,C:C))),1),AGGREGATE(14,6,ABS(0-H2:INDEX(H:H,MATCH(E1+99,H:H))),1)), C:C,0))), INDEX(H:H, IFERROR(MATCH(MAX(AGGREGATE(14,6,ABS(0-C2:INDEX(C:C,MATCH(E1+99,C:C))),1),AGGREGATE(14,6,ABS(0-H2:INDEX(H:H,MATCH(E1+99,H:H))),1)), H:H, 0), MATCH(0-MAX(AGGREGATE(14,6,ABS(0-C2:INDEX(C:C,MATCH(E1+99,C:C))),1),AGGREGATE(14,6,ABS(0-H2:INDEX(H:H,MATCH(E1+99,H:H))),1)), H:H,0)))) 

введите описание изображения здесь

я не уверен, что это то, что вы после

без кода:

 cell AF1: =MIN(C:C,H:H,M:M,R:R,W:W,AB:AB) cell AF2: =MAX(C:C,H:H,M:M,R:R,W:W,AB:AB) cell AF3: =IF(ABS(AF1)>AF2,AF1,AF2) this is your answer 

Код VBA:

 Sub minMax() Dim min As Long Dim max As Long min = Application.WorksheetFunction.min(Sheets("Sheet1").Range("C:C,H:H,M:M,R:R,W:W,AB:AB")) max = Application.WorksheetFunction.max(Sheets("Sheet1").Range("C:C,H:H,M:M,R:R,W:W,AB:AB")) If Abs(min) > max Then Debug.Print "extreme at "; min ElseIf Abs(min) < max Then Debug.Print "extreme at "; max Else Debug.Print "extremes at "; min; " and "; max End If End Sub 

вот перепись моей первой публикации

он ищет все столбцы A-Axis_Disp до столбца ZZ (это можно изменить)

я оставил строки отладки в коде (в настоящее время прокомментировано … удалите их, если хотите)

 Sub minMax() Dim aaa As Range Dim min As Long Dim max As Long Dim colm As Long Dim colOffset As Long Dim searchRange As String ' this is plugged into application.evaluate argument colm = Application.Evaluate("=IFNA(MATCH(""A-Axis_Disp"",1:1,0),0)") ' find first column If colm > 0 Then Set aAxisData = Sheets("Sheet1").Columns(colm) ' aAxisData.Select ' for debugging only Else Exit Sub ' exit if no column found. something more can be put here End If ' Debug.Print Split(Sheets("sheet1").Range("zz4").Address(1, 0), "$")(0) ' debug only ' Debug.Print Split(Sheets("sheet1").Cells(1, colm + 1).Address(1, 0), "$")(0) ' debug only Do While True searchRange = Split(Sheets("sheet1").Cells(1, colm + 1).Address(1, 0), "$")(0) & "1:ZZ1" ' Debug.Print searchRange ' for debugging only colOffset = Application.Evaluate("=IFNA(MATCH(""A-Axis_Disp""," & searchRange & ",0),0)") If colOffset = 0 Then Exit Do colm = colm + colOffset ' Sheets("Sheet1").Columns(colm).Select ' for debugging only Set aAxisData = Union(aAxisData, Sheets("Sheet1").Columns(colm)) Loop ' aAxisData.Select ' for debugging only min = Application.WorksheetFunction.min(aAxisData) max = Application.WorksheetFunction.max(aAxisData) If Abs(min) > max Then Debug.Print "extreme is "; min ElseIf Abs(min) < max Then Debug.Print "extreme is "; max Else Debug.Print "extremes are "; min; " and "; max End If End Sub 
Interesting Posts

VSTO – активировать «Track Changes» в книге Excel с помощью c #

Как я могу обрезать результаты после определенного количества символов в SQL Server

Копировать и вставить значения после фильтрации на основе значения на другом листе

Нет такого файла или каталога @ rb_sysopen – /tmp/oo_20161031-6508-1bswvam/roo_workbook.xml в рельсах

Макро – сортировка нескольких уровней по имени столбца

Макрос VBA не может найти последнюю использованную ячейку с ActiveCell

Как отобразить коэффициент в Excel в формате A: B?

Исключение COM-исключения Excel во время работы в фоновом режиме

Настройка Excel FitToPagesWide на «Автоматический» в C # (VTSO)

вывод данных Excel в текстовые документы

как перейти к следующему элементу на странице с тем же именем класса, используя selenium vba

Чтение Excel с отсутствием каких-либо границ

Создание файлов Excel с помощью C #

Загрузка Excel с числовым номером столбца, округляющим число

Невозможно преобразовать null в 'bool', потому что это тип значения, не равный nullable

Давайте будем гением компьютера.