Вы открыты для решения формулы, а не VBA? Вот как я бы попробовал это в первую очередь. Я говорю «попробуй», потому что функция INDIRECT()
медленная, и если у тебя слишком много формул, тебе может не понравиться производительность. Но я не вынесу такого решения, пока не попробую.
У меня есть лист с именем Company 1 Balance Sheet
, а в B21: D21 у меня 1015 и 20 соответственно. В B51: D51 у меня есть 20. У меня также есть лист с именем Company 2 Balance Sheet
, который имеет те же числители, но и знаменатель 30.
Вот формула в C2
=INDIRECT("'"&A2&" Balance Sheet'!"&CHAR(66+VALUE(SUBSTITUTE(SUBSTITUTE(B2,"T-",""),"yr","")))&"21")/INDIRECT("'"&A2&" Balance Sheet'!"&CHAR(66+VALUE(SUBSTITUTE(SUBSTITUTE(B2,"T-",""),"yr","")))&"51")
Iначал с указания и щелчка, чтобы построить эту формулу
='Company 1 Balance Sheet'!B21/'Company 1 Balance Sheet'!B51
Затем я использовал INDIRECT
, чтобы построить эту формулу в виде строки, чтобы я мог изменить входные данные. Давайте возьмем только часть числителя, потому что она работает одинаково для обоих. Моя компания находится в столбце А, поэтому я могу начать с замены этой части формулы
=INDIRECT("'"&A2&" Balance Sheet'!B21")
Балансовая часть названия будет последовательной, поэтому я оставлю это. Мне нужно изменить B, чтобы сослаться на соответствующий год. Я начну с создания этой переменной. В наборе символов ASCII буква B - 66.
=INDIRECT("'"&A2&" Balance Sheet'!"&CHAR(66)&"21")
Теперь я могу добавить любой год, который я хочу, к 66, чтобы увеличить его. Мой год в столбце B, но вокруг него много шума. Сначала мне нужно выделить числовую часть
=SUBSTITUTE(SUBSTITUTE(B2,"T-",""),"yr","")
, которая избавляет от содержимого вокруг числа. Затем я использую VALUE
, чтобы превратить его в число. Я могу добавить это число к 66, так что T-1yr относится к 67, что является C.
И это все. Это немного больно настраивать, но как только это будет сделано, просто скопируйте его. Обратите внимание, что ошибки Div / 0 означают, что у вас нет данных за этот год. Когда формулы работают так, как вы хотите, оберните их в функцию IFERROR()
, чтобы скрыть их.
В вашем примере название компании не повторяется в каждой строке. Это не очень хорошо для этого метода, но вы можете иметь столбец, в котором компания повторяется, просто скрыть этот столбец, если ваша конкретная презентация важна.
Другие вещи, которые вы можете использовать со скрытыми столбцами:имя листа, если вы не согласуетесь с именами листов или просто хотите, чтобы формула была немного проще для чтения. Вы также можете поместить 21 и 51 в скрытые столбцы и сослаться на те, которые находятся в вашей косвенной функции.