none
Copiar e colar transposto células com referência travada - Alteração da referência RRS feed

  • Pergunta

  • Olá.

    Em uma planilha do EXCEL 2010, preciso copiar diversas linhas, transpondo-as ao colar em colunas de outra planilha. Para isso, seleciono as células da linha que desejo copiar e as colo na outra planilha com o comando PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=True

    Quando a macro termina de rodar, todas as colunas estão corretas, exceto uma única célula. Observei que em todas as linhas na planilha de origem, na coluna "O" há a seguinte fórmula:

    =IF(unitTime="min";'STEP 4'!$I$30/60*$G14;'STEP 4'!$I$30*$G14) << Sendo que em todas as linhas, ocorre a referência para $I$30

    Porém, quando a linha 30 é copiada e transposta, a célula colada contém a seguinte fórmula:

    =IF(unitTime="min";'STEP 4'!$I$70/60*I$68;'STEP 4'!$I$70*I$68) << Repare que a referência $I$30 tornou-se $I$70 simplesmente copiando transpondo-se a linha, ao colar

    Fiquei intrigado e comecei a testar no excel, copiando e transpondo linhas e colunas travadas (ou seja, com referências como $A1 ou A$1)... E sempre que na coluna "A" tenho diversas células com referências como $A1 , $A2 , $A3 ao copiar e colar transpondo-as, as referências são mudadas, como se não houvesse $, e algumas vezes, fazendo referência a colunas ou linhas aparentemente aleatórias.

    Na imagem, há diversas referências como as que mencionei, e é possível ver que referências de colunas e linhas que deveriam se manter travadas com $ foram alteradas:


    Será que há um modo de contornar esse erro no EXCEL, para que eu possa copiar a linha 30 da planilha de origem, transpô-la em uma coluna da planilha de destino, mantendo a referência $I$30 na célula que contém a devida fórmula?

    Muito obrigado e tenham um bom dia.


    segunda-feira, 14 de maio de 2012 13:55

Respostas

  • Sub Exemplo()
        Dim rBanco As Range
        Dim rDestino As Range
        Dim lCol As Long
        Dim lRow As Long
    
        Set rBanco = Excel.Application.InputBox("Selecione um intervalo:" _
          , "Selecionar um intervalo" _
          , Excel.Selection.Address _
          , Type:=8)
        Set rDestino = Excel.Application.InputBox("Selecione a célula destino:" _
          , "Selecionar uma célula" _
          , Excel.Selection.Address _
          , Type:=8)
        
        For lCol = 1 To rBanco.Columns.Count
            For lRow = 1 To rBanco.Columns.Count
                rDestino.Offset(lCol - 1, lRow - 1) = rBanco.Cells(lRow, lCol).Formula
            Next lRow
        Next lCol
    
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    segunda-feira, 14 de maio de 2012 22:02
    Moderador