14. april 2009 - 13:28Der er
15 kommentarer og 1 løsning
Fjern data
Jeg har en del data, hvor de fleste skal fjernes efter et bestemt kriterie.
ProductionWork centre Quantity started Good quantity WO0000030 100 137 WO0000030 101 WO0000030 103 WO0000034 100 385 385 WO0000034 106 385 385 WO0000034 109 385 382 WO0000106 105 WO0000106 105
Jeg vil kune have de rækker med "Wo000030" stående tilbage, fordi:
På "Wo000034" er alle operationer påbegyndt og fuldendt, så de er ikke interssante. Det ses ved at der står tal både i kolonnen "Quantity startet" og "good Quantity"
På "Wo000000106" er der ikke startet nogle operationer, så den er jeg heller ikke interesseret i. Det ses ved at der hverken står tal i kolonnen "Quantity startet" eller "good Quantity"
"Wo000030" er en igangværende ordre, så den vil jeg have stående tilbage. Det ses ved at der står et tal i kolonnen "Quantity startet" men ikke i "good Quantity"
Det skal således være alle rækker med "Wo000030", selv om det kun er den ene række der opfylder kriteriet. Det er fordi jeg skal bruge alle operationer på ordren.
Det skal bemærkes at jeg har et par tusinde rækker, så det er et stor arbejde at gøre manuelt.
Hmm, der er sikkert en bedre/nemmere måde at gøre dette på, men dette burde i hvert fald gøre det :)
Gem dit excel dokument som excel.csv (Comma Delimited), og lig den i C:\
Åben notepad, og kopier følgende ind, og gem det som script.vbs
Dim FSO, readfile, writefile Dim arrText
Set FSO = CreateObject("Scripting.FileSystemObject") Set readfile = FSO.OpenTextFile("c:\excel.csv", 1, false) Set writefile = FSO.CreateTextFile("c:\nyexcel.csv", true)
writefile.WriteLine(readfile.ReadLine)
Do While Not readfile.AtEndOfStream If InStr(readfile.Readline, "WO0000030") > 0 Then writefile.WriteLine(readfile.ReadLine) End If Loop
readfile.close writefile.close
Åben C:\nyexcel.csv i Excel, og gem den som et normalt Excel dokument, du burde nu kun havde de udvalgte linier :)
Som sagt, muligvis ikke den nemmeste/flotteste metode, men burde virke, og hvis ikke, så må du endelig lige skrive...
scriptet skal se sådan her ud: Dim FSO, readfile, writefile Dim text
Set FSO = CreateObject("Scripting.FileSystemObject") Set readfile = FSO.OpenTextFile("c:\excel.csv", 1, false) Set writefile = FSO.CreateTextFile("c:\nyexcel.csv", true)
writefile.WriteLine(readfile.ReadLine)
Do While Not readfile.AtEndOfStream text = readfile.ReadLine If InStr(text, "WO0000030") > 0 Then writefile.WriteLine(text) End If Loop
#3 Ja ok, er jo også det smarteste, hvis det er noget du skal have gjort ofte...men så må vi vente til nogen med lidt bedre Excel VBA/Makro kunnen kommer forbi...
Scriptet virker fint her, men min plan om C:\ var lidt dum, da vista formegentlig ikke er meget for det...
Du kan evt ændre lokationerne til et andet sted, og prøve igen :) Set readfile = FSO.OpenTextFile("c:\mappe\excel.csv", 1, false) Set writefile = FSO.CreateTextFile("c:\mappe\nyexcel.csv", true)
Jeg tror ikke jeg har formuleret mit spørgsmål godt nok. Jeg søger noget i retning af: hvis rækken har et tal i kolonne C, kontroller om der står et tal i kolonne D i samme række. Hvis der ikke står et tal i kolonne D i samme række, skal alle rækker med samme Wo-nummer blive stående, uanset om der står tal i kolonne C og/eller kolonne D. Alt andet skal slettes.
#5 Som sagt, har jeg ikke kompetence til at lave det du beskriver i Excel :/ Jeg kan dog sagtens lave et script, som dem tidligere postet i denne tråd, der opfylder dine krav beskrevet i #5
Men det ved jeg ikke, om du overhovedet er interesseret i?
#7 Prøv med følgende...igen gem som filnavn.script, og sørg for at din excel.csv ligger i c:\mappe eller, ændre evt dette i scriptet :)
Dim FSO, readfile, writefile Dim text, arrText, group
Set FSO = CreateObject("Scripting.FileSystemObject") Set readfile = FSO.OpenTextFile("c:\mappe\excel.csv", 1, false) Set writefile = FSO.CreateTextFile("c:\mappe\nyexcel.csv", true)
writefile.WriteLine(readfile.ReadLine) ' Første linie (overskrifter) skal ikke tjekkes
Do While Not readfile.AtEndOfStream text = readfile.ReadLine arrText = Split(text, ",") ' Det er muligt at Dansk Excel bruger ; i stedet for , If arrText(0) = group Then writefile.WriteLine(text) ElseIf Len(arrText(2)) > 0 AND Len(arrText(3)) = 0 Then group = arrText(0) writefile.WriteLine(text) End If Loop
readfile.close writefile.close
Læg mærke til at "," muligvis skal være ";" i dit tilfælde (arrText = Split(text, ",")) Jeg ved ikke om det danske Excel benytter sig af ; i stedet for , når den laver en .csv fil :)
Hov jeg så lige at jeg i #9 er kommet til at skrive, at du skulle gemme scriptet som filnavn.script, det skal selvfølgelig gemmes som filnavn.vbs
Du kan evt. sætte følgende linie ind aller nederst i scriptet: MsgBox("Done") Dette vil sørge for at du får en popup box med "Done", så du ved at scriptet er kørt igennem...
Det ser desværreikke ud til at scriptet kører. Det er vigtigt for mig at finde en løsning, så jeg ikke skal bruge så lang tid på at gøre det manuelt hver dag.
Vi endte ud med følgende script, der klarede jobbet :)
Dim FSO, readfile, writefile Dim text, arrText, arrTextWrite() Dim group, count, countTrue
Set FSO = CreateObject("Scripting.FileSystemObject") Set readfile = FSO.OpenTextFile("c:\mappe\excel.csv", 1, false) Set writefile = FSO.CreateTextFile("c:\mappe\nyexcel.csv", true)
writefile.WriteLine(readfile.ReadLine) ' Første linie (overskrifter) skal ikke tjekkes
text = readfile.ReadLine arrText = Split(text, ";") ' Dansk Excel = ";" Engelsk Excel = ","
Do While Not readfile.AtEndOfStream count = 0 countTrue = 0 Erase arrTextWrite doWrite = False group = arrText(1)
Do While group = arrText(1)
ReDim Preserve arrTextWrite(count) arrTextWrite(count) = text
If Len(arrText(6)) > 0 AND Len(arrText(7)) > 0 Then countTrue = countTrue + 1 End If
text = readfile.ReadLine arrText = Split(text, ";") ' Dansk Excel = ";" Engelsk Excel = "," count = count + 1 Loop
If countTrue > 0 AND countTrue < count Then For Each x in arrTextWrite writefile.WriteLine(x) Next End If Loop
readfile.close writefile.close MsgBox("Done")
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.