INDEX() pode fazer uma pesquisa bidimensional. A sintaxe é INDEX(array,row_num,[col_num],[area_num]) . É preciso um array 2D e retorna a interseção de row_num e column_num.
Seu problema é um pouco complicado por causa dos intervalos nos cabeçalhos, mas alguns trabalhos rápidos com TRUNC() e IF() fazem o trabalho. Esta fórmula preenchida de D8 na imagem abaixo, dá os resultados mostrados:
=INDEX(B$2:E$5,IF(C8>31,4,TRUNC((C8-11)/5)),IF(B8>7,4,TRUNC((B8+1)/2)))
Se você quiser ver como a parte TRUNC() funciona, coloque =TRUNC((ROW()-11)/5) na linha 18 ou TRUNC((ROW()+1)/2) na linha 1 e preencha.
Espero que isso ajude e boa sorte.
