Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Copiar para colunas não sequenciais

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
adrandre
Acabou de chegar
Acabou de chegar
Mensagens: 1
Registrado em: Qua Fev 10, 2021 4:16 pm

Copiar para colunas não sequenciais

Mensagem por adrandre »

Bom dia, tenho duas tabelas 1 ( Lançamento MAP) e tabela 2 ( Base DATA), na tabela 1 tenho apenas uma linha com umas 70 colunas onde é digitado os dados para uma data especifica, a tabela 2 deve receber esses dados, ela contém todas as datas do ano e umas 130 colunas, sendo as 70 que combinam mais algumas no meio com várias fórmulas.

Meu problema é o seguinte, não consigo um código que encontre a data correta na tabela 2, e copie a informação nas colunas idênticas, o mais perto que achei foi esse abaixo que cola na data correta, mas vai sequencial.


exemplo das colunas nas duas tabelas, vermelho tabela 1, azul tabela 2.

Imagem

Agradeço a ajuda, já me falaram para usar Find ou Application.Match mas não sei como.

Código: Selecionar todos

Sub NewNameandCostCenter()

  Dim start As Double
  start = Timer

  Dim countOfChangedRows As Long

  'set rngMap array
  Dim rngMap As Range
  Set rngMap = Worksheets("Lançamento captação").Range("A3:g4")

  'set rngData array
  Dim rngData As Range
  Set rngData = Worksheets("Base balanço Hídrico").Range("a6:k800")

  Dim aMap As Variant
  aMap = rngMap.Value

  Dim aData As Variant
  aData = rngData.Value

  Dim mapRow As Long
  Dim datarow As Long
  Dim mapcol As Long

  For mapRow = LBound(aMap, 1) To UBound(aMap, 1)
    For datarow = LBound(aData) To UBound(aData)
      'Check the key matches in both tables
      If aData(datarow, 1) = aMap(mapRow, 1) Then
        countOfChangedRows = countOfChangedRows + 1
        'Assumes the columns in map and data match
        For mapcol = LBound(aMap, 2) + 1 To UBound(aMap, 2)
          aData(datarow, mapcol) = aMap(mapRow, mapcol)
        Next mapcol
      End If
    Next datarow
  Next mapRow

  rngData.Value = aData

  Debug.Print countOfChangedRows & " of "; UBound(aData, 1) & " rows updated in " & Timer - start & " seconds"

End Sub


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder