Excel - Wyodrębnianie danych z określonych kolumn

Kwestia

Mam kilka kolumn danych wyglądających mniej więcej tak:

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

(dane1-3 to tylko nazwy danych w kolumnach)

Chcę przekonwertować to mniej lub bardziej automatycznie na plik .csv zmodyfikowany w następujący sposób:

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

Nagłówki kolumn umieszczane wewnątrz (), ponieważ nie powinny być wyświetlane w pliku .csv. Kolejność danych1-3 jest losowa w moim przykładzie, muszę być w stanie użyć innej kolejności. Wiem, jak sformatować komórki, aby zmienić wartości na negatywy.

Spodziewałbym się, że będzie to coś jak formuła pobierająca dane z nazwanej kolumny w pliku; komórki w ostatniej kolumnie wyglądałyby jak „= [ścieżka / plik_źródłowy.xls] nazwa_katalogu! wartości-kolumny:„ dane2 ”. To może być daleko i nawet niemożliwe w Excelu, a jeśli nie chciałbym tego wiedzieć.

Również plik źródłowy będzie zawierał kolumny, które nie będą używane w pliku csv. Proces musi zatem zidentyfikować określone kolumny w określonym pliku, skopiować je i zmienić ich kolejność, a następnie wkleić do pliku .csv.

Jakieś pomysły, jak to zrobić?

Rozwiązanie

Poniższy kod zakłada

  • 1. Dane są w arkuszu o nazwie Arkusz1
  • 2. Można utworzyć tymczasowe nazwy arkuszy myTempSheet
  • 3. Nazwa pliku CSV do zapisania w tempCSV.csv
  • 4. Brak wymaganej pustej kolumny

Używać

Po wklejeniu kodu wykonaj makro. Spyta cię, jak chcesz, aby kolumna pojawiła się w CSV. Jeśli więc pierwszą kolumną, którą chcesz, jest D, poprawna odpowiedź to 4. Gdy skończysz z informowaniem, w jaki sposób pojawią się kolumny, po prostu naciśnij ok bez żadnej wartości.

Kod:

 Sub createFile () Dim numOfCol As Integer Dim colNum As Integer Dim myTempSheet As String Dim dataSheet As String Dim colValue As Variant Dim ColIndex () Jako Integer Dim cvsName As String ThisWorkbook.Save myTempSheet = "myTempSeet" dataSheet = "Sheet1" cvsName tempCSV "Arkusze (dataSheet). Wybierz numOfCol = Komórki (1, Columns.Count) .End (xlToLeft) .Column ReDim ColIndex (numOfCol) Dla colNum = 1 Do numOfCol colValue = InputBox (" Jaka kolumna powinna być na pozycji "i colNum & "w pliku CVS", "Col Position") If colValue = "" Następnie Exit For Else ColIndex (colNum) = colValue Koniec jeśli Next On Error Wznów następne arkusze (myTempSheet). Usuń przy błędzie GoTo 0 arkuszy. Dodaj ActiveSheet. Name = myTempSheet Dla colNum = 1 To numOfCol Jeśli ColIndex (colNum)> 0 Następnie Sheets (dataSheet). Wybierz Columns (ColIndex (colNum)). Wybierz Selection.Copy Sheets (myTempSheet). Wybierz Column (colNum). Wybierz ActiveSheet.PasteSpecial xlValue Else Exit dla końca jeśli następne arkusze (myTempSheet) .Wybierz numOfCol = Komórki (1, Columns.Count) .End (xlToLe ft) .Column Dla colNum = 1 Do numOfCol Jeśli Cells (1, colNum) "" Then Cells (1, colNum) = "(" & Cells (1, colNum) & ")" End If Next ActiveWorkbook.SaveAs _ Nazwa pliku: = cvsName & ".csv", _ FileFormat: = xlCSV, _ CreateBackup: = True End Sub 

Uwaga

Dziękujemy rizvisa1 za tę poradę na forum.

Poprzedni Artykuł Następny Artykuł

Najważniejsze Wskazówki