Excel - Extraction de données à partir de colonnes spécifiées

Problème

J'ai des colonnes de données ressemblant un peu à ceci:

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

(data1-3 ne sont que des noms de données dans les colonnes)

Je veux convertir cela plus ou moins automatiquement en un fichier .csv modifié selon ces lignes:

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

Les en-têtes de colonne sont placés à l'intérieur () car ils ne sont pas censés être affichés dans le fichier .csv. L'ordre de data1-3 est aléatoire dans mon exemple, je dois pouvoir utiliser un ordre différent. Je sais comment formater les cellules pour changer les valeurs en négatifs.

Je m'attendrais à ce que cela ressemble à une formule récupérant des données d'une colonne nommée dans un fichier; les cellules de la dernière colonne ressemblent à quelque chose comme '= [chemin / sourcefile.xls] nom_fichier! valeurs_colonne: "data2"'. Cela pourrait être loin et même pas possible dans Excel, et si ce n'est pas le cas, j'aimerais bien le savoir.

De plus, le fichier source contiendra des colonnes qui ne seront pas utilisées dans le fichier csv. Le processus doit donc identifier les colonnes spécifiées dans un fichier spécifié, les copier et les réorganiser, puis les coller dans le fichier .csv.

auriez vous des idées pour faire ça?

Solution

Le code ci-dessous suppose

  • 1. Les données sont dans la feuille appelée Sheet1
  • 2. Une feuille temporaire nommée myTempSheet peut être créée
  • 3. Le nom du fichier CSV à enregistrer dans tempCSV.csv
  • 4. Aucune colonne vierge n'est requise

Utiliser

Après avoir collé le code, exécutez la macro. Il vous demandera comment vous souhaitez que la colonne apparaisse dans le fichier CSV. Donc, si la première colonne que vous voulez est D, la réponse correcte est 4. Une fois que vous avez terminé avec l’information sur l’affichage des colonnes, appuyez simplement sur ok sans valeur.

Code:

 Sub createFile () Dim numOfCol As Entier Dim colNum As Integer Dim myTempSheet As String Dim dataSheet As String Dim colValue As Variant Dim ColIndex () As Integer Dim cvsName As String ThisWorkbook.Save myTempSheet = "myTempSeet" dataSheet "" templs " tempCSV "Sheets (dataSheet) .Sélectionnez numOfCol = Cells (1, Columns.Count) .End (xlToLeft) .Column ReDim ColIndex (numOfCol) Pour colNum = 1 Vers numOfCol colValue = InputBox (" Quelle colonne doit être en position "& colNum & "dans le fichier CVS", "Position du col") Si colValue = "" puis quitte pour un autre ColIndex (colNum) = colValue Fin si suivant sur erreur Reprenez les feuilles suivantes (myTempSheet). Name = myTempSheet For colNum = 1 To numOfCol Si ColIndex (colNum)> 0 Puis Sheets (dataSheet) .Sélectionnez des colonnes (ColIndex (colNum)). Sélectionnez Sélection.Copie feuilles (myTempSheet) .Sélectionnez des colonnes (colNum) .Sélectionnez ActiveSheet.PasteSpecial. xlValue Else Exit pour End If Next Sheets (myTempSheet) .Sélectionnez numOfCol = Cells (1, Columns.Count) .End (xlToLe ft) .Column For colNum = 1 To numOfCol Si Cells (1, colNum) "" Puis Cells (1, colNum) = "(" & Cells (1, colNum) & ")" Fin si Suivant ActiveWorkbook.SaveAs _ Nom de fichier: = cvsName & ".csv", _ FileFormat: = xlCSV, _ CreateBackup: = True End Sub 

Remarque

Merci à rizvisa1 pour cette astuce sur le forum.

Article Précédent Article Suivant

Les Meilleurs Conseils