#excel #vba
Вопрос:
Пожалуйста, рассмотрите приведенный ниже код, он повторяет столбец «Страна» таблицы и меняет позиции ячейки 2 на «Изменено»справа. Мне нужно прекратить использовать смещение и обратиться к двум столбцам справа от названия заголовка «Капитал». Как это сделать?
Любая помощь будет очень признательна!
For each lookupcell in lookupsheet.Range("A1:A10")
For Each updatecell in updatesheet.Listobjects(1).Listcolumns("Country").databodyRange
if updatecell.offset(0,2).value= lookupcell.Value 'Need to change this line, remove offset and use column name instead
if updatecell.offset(0,3).value= lookupcell.offset(0,2).Value 'Need to change this line, remove offset from Cell1 and use column name instead
Then.....
Next updatecell
Next lookupcell`
Комментарии:
1. Почему ты зацикливаешься? Почему бы просто не
ActiveSheet.ListObjects(1).ListColumns("Capital").DataBodyRange.Value = "Changed"
сделать это ?2. Это все твой код? Если есть больше логики, пожалуйста, обновите свой вопрос, чтобы включить его
3. Привет, Джос, На самом деле я использую databodyrange «Страна» для обновления многих столбцов таблицы и с разными значениями, получаемыми из отдельного файла, в настоящее время используя смещение, но я боюсь, что расположение столбцов может измениться, поэтому пытаюсь ссылаться на имена столбцов
4. Мой код действительно ссылается на столбец по имени.
5. Привет, Джос, Спасибо за ответ и извините, если мой вопрос недостаточно ясен, но мне нужно указать столбец «Столица» при повторении столбца «Страна» databodyrange, потому что для обновления требуется несколько столбцов.
Ответ №1:
With ActiveSheet.ListObjects(1)
For i = 1 To .DataBodyRange.Rows.Count
If [Your Test] Then
.ListColumns("Capital").DataBodyRange(i).Value = "Changed"
End If
Next i
End With
Измените [Свой тест] по мере необходимости, например:
With ActiveSheet.ListObjects(1)
For i = 1 To .DataBodyRange.Rows.Count
If .ListColumns("Country").DataBodyRange(i).Value = "A" Then
.ListColumns("Capital").DataBodyRange(i).Value = "Changed"
End If
Next i
End With
Комментарии:
1. Спасибо, это решило проблему. Иногда итерация проходит через отфильтрованный диапазон, так что в таком случае, как поместить индекс в специальные ячейки? Диапазон данных. Специальные ячейки(xlCellTypeVisible)
2. Вместо того, чтобы пытаться определить, фильтруется ли данная строка или нет, предпочтительнее добавить в цикл новое условие, эквивалентное условию, которое используется для фильтра.