• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Ombouwen Excel

Status
Niet open voor verdere reacties.

Timooooooh

Gebruiker
Lid geworden
31 mei 2017
Berichten
6
Goedemiddag,

In de bijlage zitten 2 excel bestanden, ik ben op zoek naar een formule/macro/VBA die het mogelijk maakt van de excel "Import zoals aangeleverd" om te bouwen naar de excel als bij "Import zoals die moet".
De getallen 1505 en 1500 zijn overbodig dus kunnen eruit, maar de bedragen die in deze regels staan moeten een kolom verder. Wanneer in kolom B 8020 staat moet er een 3 in kolom J komen en bij 8015 een 9 in kolom J.

Nu is de vraag of het mogelijk is om überhaupt zoiets in te richten dat dit met 1 druk op de knop gedaan is. Vaak bestaan deze bestanden uit 100+ regels en is die veel handmatig werk om aan te passen.
Alvast bedankt!
 

Bijlagen

  • Import zoals die moet.xls
    26 KB · Weergaven: 50
  • Import zoals aangeleverd.xls
    34 KB · Weergaven: 53
Waarom en van wie krijg je deze data in ongewenste vorm/inhoud aangeleverd ?
 
Wij ontvangen dit van een klant van ons die naar eigen zeggen dit niet op andere wijze kan aanleveren.
Wij passen dit document aan om dit in ons systeem te kunnen importeren.
 
Is toch met een paar eenvoudige formules op te lossen? (zie groene cellen)
 

Bijlagen

  • Import zoals aangeleverd1.xls
    37 KB · Weergaven: 45
Waarom staat er ook een 3 als er 1200 in kolom B staat?
Wanneer moeten de getallen verplaatst worden van kolom H naar kolom I?
 
Of deze macro draaien:
Code:
Sub cobbe()
 For Each cl In Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row)
  If cl.Offset(, 1) = 1500 Or cl.Offset(, 1) = 1505 Then
   cl.Offset(, 1) = ""
   cl.Offset(, 7).Cut cl.Offset(, 8)
  End If
 Next
End Sub
 
Bedankt voor de reacties, @Vena formules is helaas geen optie meer sorry had ik erbij moeten zeggen. Ons software programma ziet geen gegevens bij het inlezen als er formules staan.

@Cobbe, is het ook mogelijk in deze macro zo in te richten dat wanneer er 8015 in Kolom B staat er in kolom J een 9 komt en als er 8020 in kolom B staat er in kolom J een 3 komt te staan?
Bij de regels met andere getallen in kolom B zoals 1200 is het niet nodig dat er wat gebeurd.

@edmoor, de regels met 1200 zijn overbodig. De getallen moeten worden verplaatst van H naar I als er 1500 of 1505 in kolom B staat.

Alvast bedankt.
 
Code:
Sub Cobbe()
 For Each cl In Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row)
  If cl.Offset(, 1) = 8015 Then cl.Offset(, 9) = "9"
  If cl.Offset(, 1) = 8020 Then cl.Offset(, 9) = "3"
  If cl.Offset(, 1) = 1500 Or cl.Offset(, 1) = 1505 Then
   cl.Offset(, 1) = ""
   cl.Offset(, 7).Cut cl.Offset(, 8)
  End If
 Next
End Sub
 
Je werkt met Excel en weet niet hoe je van formules vaste waarden moet maken ?

In wat voor systeem moeten de gegevens worden ingevoerd ?

Code:
Sub M_snb()
   sn = Sheet1.Cells(1).CurrentRegion.Resize(, 10)
   
   For j = 1 To UBound(sn)
      Select Case Left(sn(j, 2), 2)
      Case "15"
         sn(j, 9) = sn(j, 8)
         sn(j, 8) = ""
         sn(j, 2) = ""
       Case "80"
         sn(j, 10) = 3 - 6 * (sn(j, 2) = "8015")
       Case "12"
          For jj = 1 To UBound(sn, 2)
            sn(j, jj) = ""
          Next
       End Select
    Next
    
    Sheet1.Cells(1).CurrentRegion.Resize(, 10).Offset(10) = sn
End Sub
 
Laatst bewerkt:
@Jack dit lijkt super te werken, bedankt!

@snb ik werk nu noodgedwongen met Excel omdat het in dit formaat wordt aangeleverd. Excel is een prachtig programma maar helaas heb ik er te weinig kennis van.
 
Ook een duit (bij groter bereik vele malen sneller dan de "for each cl".
Code:
Sub hsv()
Cells(1).CurrentRegion.Columns(2).Name = "bereik"
 [bereik].Offset(, 7) = [if((bereik=1500)+(bereik=1505),offset(bereik,,6),"")]
 [bereik].Offset(, 6) = [if((bereik=1500)+(bereik=1505),"",offset(bereik,,6))]
 [bereik] = [if((bereik=1500)+(bereik=1505),"",bereik)]
 [bereik].Offset(, 8) = [if(bereik=8015,9,if(bereik=8020,3,""))]
Application.Names("bereik").Delete
End Sub
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan