Notifications
Clear all

[Resolvido] Transpor intervalo variavel

6 Posts
2 Usuários
0 Reactions
1,143 Visualizações
(@topscore)
Posts: 41
Eminent Member
Topic starter
 

Pessoal, seguinte:

BDProjetos2:  Minha Aba atual (Nome real da planilha)

BDProjetos1:  Segunda Aba (Nome real da planilha)

Quero transpor um intervalo do BD1 para o BD2. Mas o intervalo é variável.

Em BDProjetos2, já com o intervalo selecionado no tamanho exato, eis a fórmula que funciona:

Excel: =TRANSPOR(BDProjetos1!$F$1:$H$20)

VBA: Selection.FormulaArray = "=TRANSPOSE(BDProjetos1!R1C6:R20C8)" **Meu código coloca a fórmula no intervalo já selecionado.

Porém, esse intervalo que vai na fórmula, $F$1:$H$20, é variável. Para auxiliar, tenho alguns dados na coluna B:

B1 = 1          Linha de $F$1

B2 = 6          Coluna de $F$1

B3 = $F$1     Endereço(B1;B2)

B4 = 20         Linha de $H$20

B5 = 8          Coluna de $H$20

B6 = $H$20    Endereço(B4:B5)

B7 = R1C6     ="R"&B1&"C"&B2               *Tentei colocar B7 na fórmula em vba

B8 = R20C8   ="R"&B4&"C"&B5               *Tentei colocar B8 na fórmula em vba

 

NO VBA:

Dim InicioRange As String
Dim FimRange As String

InicioRange = Range("B7").Value
FimRange = Range("B8").Value

'**Aqui começei a tentar de tudo, sem sucesso. Lembrando que B7 = "R1C6" e B8 = "R20C8"

'Selection.FormulaArray = "=TRANSPOSE(BDProjetos1 & InicioRange & ":" & FimRange)"
'Selection.FormulaArray = "=TRANSPOSE(BDProjetos1! & InicioRange & ":" & FimRange)"
'Selection.FormulaArray = "=TRANSPOSE(BDProjetos1 & "!" & InicioRange & ":" & FimRange)"
'Selection.FormulaArray = "=TRANSPOSE(BDProjetos1!R1C6: & FimRange)"
'Selection.FormulaArray = "=TRANSPOSE(BDProjetos1!R1C6 & ":" & FimRange)"
'Selection.FormulaArray = "=TRANSPOSE(BDProjetos1!R1C6: & FimRange & ")""
'Selection.FormulaArray = "=TRANSPOSE(BDProjetos1!R1C6 & ":" & FimRange & ")""

 

 Está claro que meu raciocínio está errado. Como faço o código colocar a fórmula certa para transpor, com intervalo variável baseado nos dados da minha coluna B?

Desde já, obrigado.

 

 
Postado : 28/03/2021 1:26 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Anexe o arquivo, @topscore. Fica mais fácil de raciocinarmos e poupa esforços. 👍

 
Postado : 28/03/2021 6:42 pm
(@topscore)
Posts: 41
Eminent Member
Topic starter
 

@edsonbr

 

Segue um arquivo de exemplo, agora dá para entender bem o meu problema.

Obrigado a todos que puderem ajudar.

 
Postado : 29/03/2021 1:59 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

@topscore, pelo que pude perceber, sua dúvida foi montada mais com a finalidade didática do que de aplicação direta, correto?

Nesse caso, a fórmula que vc procura usando referências no estilo R1C1, poderia ser (obs.: usei uma variável temporária pra facilitar):

  Dim tmp1 As String
  tmp1 = "TRANSPOSE(BDProjetos1!R1C1:" & FimBd1 & ")"
  Selection.FormulaArray = "=" & tmp1

Como vc também não quer que as vazias em BD1 fiquem como zero em BD2, vc pode substituir a fórmula acima por:

Selection.FormulaArray = "=IF(" & tmp1 & "=0,""""," & tmp1 & ")"

 

Agora, se sua finalidade for mais de solução do problema e não a questão didática de uso de fórmulas R1C1, vc pode usar o próprio VBA para transpor diretamente o intervalo, sem ter que aplicar a fórmula nas células:

Sub TransporDinâmico2()
  Dim InicioBD2 As String:   InicioBD2 = BDProjetos2.Range("D5").Value
  Dim rgBD1 As Range:        Set rgBD1 = BDProjetos1.Range("A1").CurrentRegion
  BDProjetos2.Range(InicioBD2).Resize(rgBD1.Columns.Count, rgBD1.Rows.Count).Value = Application.Transpose(rgBD1)
End Sub

 

 
Postado : 29/03/2021 4:53 pm
(@topscore)
Posts: 41
Eminent Member
Topic starter
 

@edsonbr

Ambos!Preciso aprender porque fico enlouquecido quando tem algo que sei que é simples e não consigo fazer. Mas tenho um projeto que vou precisar fazer exatamente isso. Hoje mesmo vou aplicar suas soluções e dou um retorno.

Obrigado e até logo 

 
Postado : 29/03/2021 5:24 pm
(@topscore)
Posts: 41
Eminent Member
Topic starter
 

@edsonbr

Edson, usei o "transpordinamico2", funciona perfeitamente e ainda não coloca zeros nas células vazias! E é muito rápido.

Muito obrigado, agora toco o projeto para frente. Genial!!!

 
Postado : 31/03/2021 11:01 am