Excel - extraheren van gegevens uit opgegeven kolommen

Kwestie

Ik heb een aantal kolommen met gegevens die er ongeveer zo uitziet:

 data1 ... data2 ... data3 val ......... val ........ val val ......... val ........ val val ......... val ........ val val ......... val ........ val 

(data1-3 zijn slechts namen van de gegevens in de kolommen)

Ik wil dit min of meer automatisch converteren naar een CSV-bestand dat als volgt is aangepast:

 (data3) (data1) (data2) val ........- val ....... val val ........- val ....... val val .. ......- val ....... val val ........- val ....... val 

Kolomkoppen plaatsen binnen () omdat ze niet moeten worden weergegeven in het .csv-bestand. De volgorde van gegevens 1-3 is willekeurig in mijn voorbeeld, ik moet een andere volgorde kunnen gebruiken. Ik weet hoe ik de cellen moet opmaken om de waarden in negatieven te veranderen.

Ik zou verwachten dat het zoiets zou zijn als een formule die gegevens ophaalt uit een benoemde kolom in een bestand; de cellen in de laatste kolom zouden er ongeveer uitzien als '= [pad / bronbestand.xls] bladnaam! kolomwaarden: "gegevens2"'. Dit kan ver weg zijn en zelfs niet mogelijk in excel, en als het dat niet is, zou ik het graag willen weten.

Het bronbestand bevat ook kolommen die niet in het csv-bestand zullen worden gebruikt. Het proces moet daarom de opgegeven kolommen in een opgegeven bestand identificeren, kopiëren en opnieuw rangschikken en ze vervolgens in het CSV-bestand plakken.

Om het even welke ideeën op hoe te om dit te doen?

Oplossing

De onderstaande code veronderstelt

  • 1. De gegevens staan ​​in blad genaamd Blad1
  • 2. Een tijdelijke bladnaam die myTempSheet kan worden gemaakt
  • 3. De CSV-bestandsnaam die moet worden opgeslagen in tempCSV.csv
  • 4. Er is geen lege kolom vereist

Gebruiken

Na het plakken van de code, voert u de macro uit. Hij zal je vragen hoe je de kolom in de CSV wilt laten verschijnen. Dus als de eerste kolom die u wilt D is, is het juiste antwoord 4. Zodra u klaar bent met het informeren van de manier waarop kolommen zouden verschijnen, drukt u gewoon op OK zonder enige waarde.

Code:

 Sub createFile () Dim numOfCol As Integer Dim colNum As Integer Dim myTempSheet As String Dim dataSheet As String Dim colValue As Variant Dim ColIndex () Als geheel dimmen cvsName As String ThisWorkbook.Save myTempSheet = "myTempSeet" dataSheet = "Blad1" cvsName = " tempCSV "Sheets (dataSheet) .Select numOfCol = Cells (1, Columns.Count) .End (xlToLeft) .Column ReDim ColIndex (numOfCol) Voor colNum = 1 Aan numOfCol colValue = InputBox (" Welke kolom moet in positie "zijn & colNum & "in het CVS-bestand", "Col Position") if colValue = "" Then Exit For Else ColIndex (colNum) = colValue End If Next On Error Resume Next Sheets (myTempSheet) .Wissen bij fout GoTo 0-bladen.Voeg ActiveSheet toe. Name = myTempSheet For colNum = 1 To numOfCol If ColIndex (colNum)> 0 Then Sheets (dataSheet) .Selecteer Kolommen (ColIndex (colNum)). Selecteer Selection.Copy Sheets (myTempSheet). Selecteer Kolommen (colNum). Selecteer ActiveSheet.PasteSpecial xlValue anders Afsluiten voor einde als volgende sheets (myTempSheet). Selecteer numOfCol = Cells (1, Columns.Count). End (xlToLe ft). Cololum Voor colNum = 1 Voor numOfCol Als cellen (1, colNum) "" Vervolgens Cells (1, colNum) = "(" & Cells (1, colNum) & ")" End If Next ActiveWorkbook.SaveAs _ Bestandsnaam: = cvsName & ".csv", _ FileFormat: = xlCSV, _ CreateBackup: = True End Sub 

Notitie

Bedankt aan rizvisa1 voor deze tip op het forum.

Vorige Artikel Volgende Artikel

Top Tips