Чтение значения из объединенного диапазона (Excel) - PullRequest
0 голосов
/ 14 декабря 2010

У меня есть столбец, заголовок которого находится в диапазоне B1: C1. данные больше похожи на

+ ---- + ---- +

| Заголовок |

+ ---- + ---- +

| H2 | H3 |

+ ---- + ---- +

| 1 | 2 |

| 3 | 4 |

+ ---- + ---- +

У меня есть переменная с именем rng, например

Set rng = Range("B1:C1")

теперь используя переменную rng, я хочу выбрать значение «H3» или «2», или «4» Я использовал следующий синтаксис

rng.Offset(1,1).value

и вместо того, чтобы дать мне "H3", это дало мне значение из следующего столбца, т.е.

Ответы [ 2 ]

3 голосов
/ 14 декабря 2010

Нет прямого способа исправить это неожиданное поведение. Насколько я понимаю, в отношении объединенных ячеек ссылка на смещение основывается на всей ячейке, и что объединенные ячейки обрабатываются как одна ячейка вместо множества ячеек.

В вашем случае, если Range("B1:C1") объединен, то следующий столбец (т. Е. Offset(0,1)) - это столбец D. Excel рассматривает объединенный диапазон как одну ячейку, и поэтому с визуальной точки зрения следующий столбец вдоль столбца D и не столбец C. На мой взгляд, это может сбивать с толку.

Лучший способ обойти это - избегать использования объединенных ячеек в качестве заголовков, а вместо этого использовать Centre Across Selection форматирование:

1) Диапазон слияния («B1: C1»)

2) Выберите диапазон («B1: C1»)> Формат> Ячейки

3) В диалоговом окне «Горизонтально» выберите «Центр по всему выделению»

Если вы сделаете это, будет работать следующий код:

Sub GetOffsets()
    Dim rng As Range
    Set rng = Range("B1")

    Debug.Print rng.Offset(1, 0) // H2
    Debug.Print rng.Offset(2, 0) // 1
    Debug.Print rng.Offset(3, 0) // 3
    Debug.Print rng.Offset(1, 1) // H3
    Debug.Print rng.Offset(2, 1) // 2
    Debug.Print rng.Offset(3, 1) // 4
End Sub
1 голос
/ 21 декабря 2012

Если вам действительно нужно использовать объединенные ячейки, в Excel возникает эта «проблема», когда речь идет о смещениях из объединенных ячеек. В приведенном выше случае имеет смысл, что ячейка D2 становится смещенной (1,1) от B1.

Одним из решений является использование вложенных смещений:

У вас есть переменная:

Set rng = Range("B1:C1")

Затем используйте следующую настройку для вашего кода:

rng.Offset(1,0).offset(0,1).value

Таким образом, вы сначала смещаетесь на строку, чтобы перейти к B2, а затем смещаетесь по столбцу, чтобы добраться до C2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...