2010-12-14 2 views
0

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

+ ---- + ---- +

| Заголовок |

+ ---- + ---- +

| H2 | H3 |

+ ---- + ---- +

| 1 | 2 |

| 3 | 4 |

+ ---- + ---- +

У меня есть переменная с именем ГСЧ, такие как

Set rng = Range("B1:C1") 

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

rng.Offset(1,1).value 

и isntead давать мне «H3» он дал мне значение из следующего Колум т.е. d2.

+0

В чем смысл? диапазон («B1: C1»). offset (1,1) Диапазон IS C2: D2, но если B1: C1 слиты, то их смещение (1,1) равно D2. Попробуйте использовать клавиатуру, если не ясно: нажмите на объединенную ячейку, нажмите стрелку вправо, затем стрелку вниз. –

ответ

3

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

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

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

1) Де-сливаться Range ("B1: C1")

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

3) в горизонтальном диалоговом окне выберите 'Центр Across Selection'

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

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 
+0

, хотя я поменял свою логику на другое, но спасибо за вашу помощь :) –

1

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

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

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

Set rng = Range("B1:C1") 

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

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

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

Смежные вопросы