Excel - Extrahovanie údajov zo zadaných stĺpcov

Problém

Niektoré stĺpce údajov vyzerajú takto:

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

(data1-3 sú len názvy údajov v stĺpcoch)

Chcem to previesť viac-menej automaticky na súbor .csv upravený podľa týchto riadkov:

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

Záhlavia stĺpcov vložené dovnútra (), pretože sa nemajú zobrazovať v súbore .csv. Poradie data1-3 je v mojom príklade náhodné, musím byť schopný použiť iné poradie. Viem, ako formátovať bunky, aby sa hodnoty zmenili na negatívy.

Očakával by som, že to bude niečo ako vzorec na získanie údajov z pomenovaného stĺpca v súbore; bunky v poslednom stĺpci budú vyzerať ako '= [path / sourcefile.xls] sheetname! column-values: "data2"'. To by mohlo byť z cesty a ani nie je možné v Exceli, a ak to nie je, chcel by som vedieť.

Zdrojový súbor bude obsahovať aj stĺpce, ktoré sa nebudú používať v súbore CSV. Proces preto potrebuje identifikovať špecifikované stĺpce v zadanom súbore, skopírovať ich a usporiadať a potom ich prilepiť do formátu .csv.

Máte nejaké nápady, ako to urobiť?

Riešenie

Nižšie uvedený kód predpokladá

  • 1. Údaje sú uvedené v liste s názvom List1
  • 2. Môžu byť vytvorené dočasné názvy hárkov myTempSheet
  • 3. Názov súboru CSV, ktorý sa má uložiť v tempCSV.csv
  • 4. Nevyžaduje sa žiadny prázdny stĺpec

Použit

Po vložení kódu spustite makro. Zobrazí sa otázka, ako chcete mať stĺpec v CSV. Takže ak prvý stĺpec, ktorý chcete, je D, správna odpoveď je 4. Akonáhle budete hotoví s informovaním, ako sa zobrazia stĺpce, stačí stlačiť ok bez akejkoľvek hodnoty.

kód:

 Sub createFile () Dim numOfCol Ako celé číslo Dim ColNum ako celé číslo Dim myTempSheet As String Dim dataSheet As String Dim Stĺpec Dim ColValue ako variant Dim ColIndex () Ako Integer Dim cvsName As String ThisWorkbook.Save myTempSheet = "myTempSeet" dataSheet = "Sheet1" cvsName = "myTempSeet" dataSheet = "Sheet1" cvsName = "myTempSeet" tempCSV "Sheets (dataSheet) .Vyberte numOfCol = Bunky (1, Columns.Count) .End (xlToLeft) .Column ReDim ColIndex (numOfCol) Pre colNum = 1 Pre numOfCol colValue = InputBox (" Aký stĺpec by mal byť v pozícii "& colNum & "v súbore CVS", "Col Position") Ak colValue = "" Potom Exit pre Else ColIndex (colNum) = colValue End If Next On Error Resume Next Sheets (myTempSheet) .Odstráňte chybu GoTo 0 Sheets.Add ActiveSheet. Name = myTempSheet Pre colNum = 1 Pre numOfCol Ak je ColIndex (colNum)> 0 Potom Sheets (dataSheet) .Vyberte stĺpce (ColIndex (colNum)) Vyberte Selection.Copy Sheets (myTempSheet) .Vyberte stĺpce (colNum) .Vybrať ActiveSheet.PasteSpecial. xlValue Else Exit pre End If Next Sheets (myTempSheet) .Vyberte numOfCol = Bunky (1, Columns.Count) .End (xlToLe ft) .Column Pre colNum = 1 Ak chcete numOfCol Ak bunky (1, colNum) "" Potom bunky (1, colNum) = "(" & Bunky (1, colNum) & ")" Koniec Ak Next ActiveWorkbook.SaveAs _ Názov súboru: = cvsName & ".csv", _ FileFormat: = xlCSV, _ CreateBackup: = True End Sub 

Poznámka

Vďaka rizvisa1 za tento tip na fóre.

Predchádzajúci Článok Nasledujúci Článok

Najlepšie Tipy