Isso é possível usando apenas uma fórmula, sem nenhum VBA.
Eu configurei uma planilha da seguinte forma:
DigiteaseguintefórmulaemN1
eN20
:
=IF(ISNUMBER(MATCH("Rejected",INDEX(G:G,ROW()):INDEX(G:G,IFERROR(MATCH("*",INDEX(L:L,ROW()+1):INDEX(L:L,ROWS(L:L)),0)+ROW()-1,MATCH("",G:G,-1))),0)),"Rejected","Approved")
Eu usei L:L
na fórmula, pois não sei os detalhes precisos da sua planilha. Para que a fórmula funcione corretamente, substitua L:L
por qualquer coluna de células mescladas somente de texto que não contenha espaços em branco.
Infelizmente, como as células mescladas são de tamanhos diferentes, você não pode preencher a fórmula. Além disso, você só pode copiar e colar a fórmula em células mescladas do mesmo tamanho.
A maneira mais fácil de inserir a fórmula na coluna mais à direita é usar uma dessas sequências de pressionamento de tecla:
- F2 Ctrl + V Introduzir
ou
- Backspace Ctrl + V Introduzir
Você pode até gravar uma macro para acelerar as coisas.
A fórmula prettificada é a seguinte:
=
IF(
ISNUMBER(
MATCH(
"Rejected",
INDEX(G:G,ROW())
:INDEX(G:G,
IFERROR(
MATCH("*",INDEX(L:L,ROW()+1):INDEX(L:L,ROWS(L:L)),0)+ROW()-1,
MATCH("",G:G,-1)
)
),
0
)
),
"Rejected",
"Approved"
)
Notas:
- A fórmula prettificada realmente funciona se inserida.
- Os parênteses em torno de
(G:G)
na versão prettified são necessários para forçar oG:G
a permanecer em sua própria linha.
EDITAR:
Se você deseja aumentar a lista de valores de status de apenas Rejected
e Approved
para Rejected
, Void
, Pending
e Approved
, você pode aninhar as funções IF()
em a fórmula assim:
=
IF(
ISNUMBER(
MATCH(
"Rejected",
INDEX(G:G,ROW())
:INDEX(G:G,
IFERROR(
MATCH("*",INDEX(L:L,ROW()+1):INDEX(L:L,ROWS(L:L)),0)+ROW()-1,
MATCH("",G:G,-1)
)
),
0
)
),
"Rejected",
IF(
ISNUMBER(
MATCH(
"Pending",
INDEX(G:G,ROW())
:INDEX(G:G,
IFERROR(
MATCH("*",INDEX(L:L,ROW()+1):INDEX(L:L,ROWS(L:L)),0)+ROW()-1,
MATCH("",G:G,-1)
)
),
0
)
),
"Pending",
IF(
ISNUMBER(
MATCH(
"Void",
INDEX(G:G,ROW())
:INDEX(G:G,
IFERROR(
MATCH("*",INDEX(L:L,ROW()+1):INDEX(L:L,ROWS(L:L)),0)+ROW()-1,
MATCH("",G:G,-1)
)
),
0
)
),
"Void",
"Approved"
)
)
)
Uma solução muito melhor seria usar uma fórmula que funcione com matrizes:
=
CHOOSE(
SMALL(
IF(
ISERROR(
MATCH(
{"Rejected","Void","Pending","Approved"},
INDEX(G:G,ROW())
:INDEX(G:G,
IFERROR(
MATCH("*",INDEX(L:L,ROW()+1):INDEX(L:L,ROWS(L:L)),0)+ROW()-1,
MATCH("",G:G,-1)
)
),
0
)
),
FALSE,
{1,2,3,4}
),
1
),
"Rejected","Void","Pending","Approved"
)
Se você preferir a versão simplificada da fórmula, aqui está:
=CHOOSE(SMALL(IF(ISERROR(MATCH({"Rejected","Void","Pending","Approved"},INDEX(G:G,ROW()):INDEX(G:G,IFERROR(MATCH("*",INDEX(L:L,ROW()+1):INDEX(L:L,ROWS(L:L)),0)+ROW()-1,MATCH("",G:G,-1))),0)),FALSE,{1,2,3,4}),1),"Rejected","Void","Pending","Approved")
Esta última versão da fórmula é facilmente extensível a mais (ou menos) valores simplesmente ajustando as duas matrizes constantes e a lista de valores na segunda última linha.
Observe que a ordem exata dos valores determina qual valor será retornado se houver mais de um tipo de valor no intervalo apropriado. O maior valor de prioridade é o da esquerda.