Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
Por CarlosAlberto
Posts
#38686
Olá amigos, bom dia!

Estou precisando de ajuda no desenvolvimento de um VBA que mude o layout da planilha em que trabalho.

O relatório que é extraído do sistema retorna 3 colunas: Conta, descrição e valor.

Contudo, na coluna Conta tem o Nº que representa o setor e na Descrição tem descrito a qual setor está conta pertence.

No arquivo em anexo tem exatamente o que estou precisando fazer via VBA.

Como as informações do setor responsável pela despesa estão "misturado" na descrição da despesa, precisaria que o VBA criasse duas novas colunas, com o nome do setor responsável pela despesa e o código do mesmo.

Agradeço pelo apoio de todos!
Você não está autorizado a ver ou baixar esse anexo.
Por osvaldomp
#38692
Experimente o código abaixo.
Código: Selecionar todos
Sub OrganizaDados()
 Dim c As Range, rng As Range, fAdd As String, x As Long, y As Long, LR As Long
  Application.ScreenUpdating = False
  Sheets("RelatDesp").[A:E] = ""
  Set rng = Range("A1:A" & Cells(Rows.Count, 1).End(3).Row)
   Set c = rng.Find("1.*", Lookat:=xlWhole)
   If Not c Is Nothing Then
    fAdd = c.Address
    Do
     x = c.Row
     Set c = rng.FindNext(c)
     y = IIf(c.Address <> fAdd, c.Row, Cells(Rows.Count, 1).End(3).Row)
     With Sheets("RelatDesp")
      LR = .Cells(Rows.Count, 1).End(3).Row
      .Cells(LR + 1, 1).Resize(y - x - 1).Value = Cells(x, 1)
      .Cells(LR + 1, 2).Resize(y - x - 1).Value = Cells(x, 2)
      .Cells(LR + 1, 3).Resize(y - x - 1).Value = Cells(x + 1, 1).Resize(y - x - 1).Value
      .Cells(LR + 1, 4).Resize(y - x - 1).Value = Cells(x + 1, 2).Resize(y - x - 1).Value
      .Cells(LR + 1, 5).Resize(y - x - 1).Value = Cells(x + 1, 3).Resize(y - x - 1).Value
     End With
    Loop While Not c Is Nothing And c.Address <> fAdd
   End If
  On Error Resume Next
  Set c = rng.Find("1.*", Lookat:=xlPart)
  Application.ScreenUpdating = True
End Sub
obs.
1. nomeie uma planilha vazia como RelatDesp, que receberá os dados.
2. ao rodar o código a planilha que contém os dados deverá ser a planilha ativa.
3. no modelo que você disponibilizou o código gerou 1.142 registros na planilha RelatDesp em aprox. 1 seg.
Por CarlosAlberto
Posts
#38702
Osvaldo, bom dia!

Exatamente o que precisava!!!

Muito obrigado!!!!

DEUS DO VBA :o :o :o :o :o

Poderia me passar o caminho de onde começar a estudar? tenho uma noção básica
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord