Я работаю над листом и впервые использую vba, и мне это нравится.но застрял в одном за последние несколько дней, ведь чтение и поиск не могут понять, как сделать эту часть, вот сценарий, который у меня есть:
заблокированный лист и книга, пользователь может только редактировать /значения entre (числа) в ячейках C8: G8 и I8: X8, столбец H всегда пуст и хост не имеет значения.
пользователь может скрыть столбцы в C8: G8 и I8: X8, если ему необходимо использоватьопределенное количество столбцов.
пытается установить макрос для определения, было ли введено значение более одного раза во всем диапазоне C8: X8 (исключая H, оно пустое и любые другие столбцы, если скрытые)
Я начал с countif и дал идеальные результаты, только если все столбцы видны:
Sub dup()
Application.EnableEvents = False
Dim x As Variant 'tried with range
Dim n As Variant 'tried with range
Dim rng1 As Range 'tried with variant
Set rng1 = Range("C8:X8")
For Each x In rng1.SpecialCells(xlCellTypeVisible)
If Application.WorksheetFunction.CountIf(rng1, x) > 1 Then
x.Offset(4) = "3" 'used for conditional formatting
Else
x.Offset(4) = "10" 'used for conditional formatting
End If
Next
Application.EnableEvents = True
End Sub
все еще работает, когда некоторые столбцы скрыты, но он проверяет скрытые столбцы, и это не то, что я хочу (я хочу, чтобы он пропускал скрытые столбцы) некоторые поиски и чтения обнаруживают, что счетчик не может получить свойство ячейки, если оно видимое или скрытое.пробовал оба варианта application.countif и application.worksheetfunction.countif
поэтому пробовал application.match, но не повезло
For Each x In rng1
If Not IsEmpty(x) Then
n = Application.match(x.Value, rng1.Value, 0)
If Not IsError(n) Then
x.Offset(4) = "3"
Else
x.Offset(4) = "10"
End If
End If
Next
пробовал application.hlookup и не смог получить желаемый результат:
For Each x In rng1
If Not IsEmpty(x) Then
n = Application.HLookup(x.Value, rng1.Value, 1, False)
If Not IsError(n) Then
x.Offset(4) = "3"
Else
x.Offset(4) = "10"
End If
End If
Next
он будет соответствовать самой ячейке и смотреть только в первой части диапазона C8: G8.
, просто чтобы объяснить ситуацию со скрытыми столбцами, пользователь может скрыть / показать 1,2,3,4 и 5 столбцов в первом диапазоне (если пользователь выберет 2, будут видны только столбцы C8: D8) то же самое применимо к диапазону I8: X8, если пользователь выберет 5, будет виден только I8: M8), поэтому будетможет быть случай, когда скрытый столбец будет находиться между видимыми столбцами.
найдет несколько ответов о том, как использовать SumProduct (промежуточный итог, ...) только в качестве формулы, и не сможет преобразовать его в VBA.
любая рекомендация и совет будут оценены.