2015-03-04 2 views
0

Я пытаюсь получить значения строки, содержащей определенный текст. Скажем, коэффициент покрытия ликвидности - это текст, доступный в B57. Мне нужно значение C57 и D57. Я достиг, пока не вернусь адрес ячейки, содержащей текст.VBA-get значения с известным адресом ячейки

Просьба помочь мне продвигаться дальше.

If fCheckSheet(forecastWorkbook, "Calculator (FX net)") Then 
      wsForecast.Activate 
     Else 
      ErrorStatus = "Source Sheet:Calculator (FX net) not found" 
      msgBoxReturn = MsgBox(ErrorStatus & forecastWorkbook.FullName, vbExclamation + vbOKCancel) 
    End If 

    Set rngRatio = FindRangeOfText(wsForecast, "Liquidity Coverage Ratio") 
    'Gets the address of cell having 
    RatioAddress = rngRatio.Address 

    'The address is $B$57 
     '???? how to retreive values for $c$57 and $D$57 

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

С уважением,

Mani

+0

Привет Manivannan, я предполагаю, что вы уже знаете об этом, но в случае, если вы этого не сделали, формула VLOOKUP также выполнила бы эту работу. Если вам нужно сделать это программно, вы можете вызвать VLOOKUP с помощью метода Excel.Application.WorksheetFunction.VLookup, и вам не нужно переписывать функцию поиска :) – Pillgram

+1

Мне нужен профессиональный код VBA. Vlookup - это тяжелый компонент, который будет писать формулу для каждой отдельной ячейки, которую мы выполняем. Спасибо за ответ. –

ответ

2

Если предположить, что функции вы ссылаетесь (но не предоставили код для поддержки) будут возвращать Range типа объекта (или Nothing), то вы можете просто использовать метод Offset :

If Not rngRatio Is Nothing Then 
    With rngRatio 
     Debug.Print .Offset(0,1).Address, .Offset(0,1).Value '$C$57 
     Debug.Print .Offset(0,2).Address, .Offset(0,2).Value '$D$57 
    End With 
End If 

Существует также менее известный способ сделать то же самое:

If Not rngRatio Is Nothing Then 
    With rngRatio 
     Debug.Print .Cells(1, 2).Value 
     Debug.Print .Cells(1, 3).Value 
    End With 
End With 

Мое предпочтение относится к первому методу, поскольку оно явственно, а не подразумевается. Этот метод менее ясно, потому что не каждый интуитивно знает, что вы можете ссылаться на ячейку вне объекта диапазона, используя Cells свойства, такие как:

MsgBox Range("A1").Cells(1, 4).Address ' --> $E$1 

MsgBox Range("A1").Cells(4, 2).Address ' --> $B$4 
+1

Простые слова, Но стоит того. Ты звезда. Огромное спасибо. Функция FindRangeOfText возвращается как диапазон. Абсолютно работает !!! –

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