特定の数の列をExcelから.csvファイルにエクスポートしたい。 lname
、fname
、phone
、address
、email
などの約10列があります。 lname
、email
などの特定の列のみをエクスポートするにはどうすればよいですか?
単純な方法でやってください:-
10列に連結を適用する
=CONCATENATE(A1,",",B1,",",C1,",",D1,",",E1,",",F1,",",G1,",",H1,",",I1,",",J1)
リストの最後の行の最後までドラッグします
.csv
ファイル形式で保存します必要な最初の列を選択します。次に、<Ctrl>
を押しながら、必要な残りの列を選択します。選択内容をコピーして、新しいブックに貼り付けます。新しいワークブックを.csvファイルとして保存します。
これを頻繁に行う場合は、ステップのマクロを記録します。これが私のテストから記録されたマクロです。私の例では、列Aは名前で、列Eは電子メールです。また、SaveAsファイル名に現在の日付が含まれるようにマクロを変更しました。
マクロの例を表示するつもりでしたが、何らかの理由で、[編集の保存]をクリックするとスーパーユーザーがエラーを表示します。後でもう一度やります。
これがローテクソリューションです。
これに対する独自のVBAソリューションをアドインとして作成しました。 GitHubで利用できます here 。
ビューの例(画像をクリックすると拡大表示されます):
使用手順は次のとおりです。
フォームはモードレスであるため、別の範囲を選択するか、シートからシートまたはワークブックからワークブックに移動する間、フォームを開いたままにすることができます。注意すべきことは、「アットマーク」(@
)は、このような出力操作のためのExcelの「一般的な」数値形式の表現として機能します。
の内容 C:\test.csv
上記の例から:
13,14,15
14,15,16
15,16,17
Sub ExportSelectionAsCSV()
' MS Excel 2007
' Visual Basic for Applications
'
' Copies the selected rows & columns
' to a new Excel Workbook. Saves the new
' Workbook as Comma Separated Value (text) file.
'
' The active workbook (the 'invoking' workbook - the
' one that is active when this subroutine is called)
' is unaffected.
'
' Before returning from the subroutine, the invoking workbook
' is "set back to" (restored as) the active workbook.
'
' Note: target filename is hard coded (code is simpler that way)
' Suspends screen updating (until ready to return)
' Warning: ScreenUpdating MUST be re-enabled before
' returning from this subroutine.
'
' Note: Step through this subroutine line-by-line to prove
' to yourself that it is performing as promised.
' (Please step through the code at least once - use F8)
Application.ScreenUpdating = False
' Gets the name of *this (the invoking) workbook
' so *this workbook can again be set active
' at the end of this subroutine.
Dim CurrentFileName As String
CurrentFileName = ActiveWorkbook.Name
Debug.Print "Active File: " + CurrentFileName
' Copies the selected cells (to the clipboard).
' Precondition: Cells must be selected before
' calling this subroutine.
Selection.Copy
' Instantiates a (new) object instance of type Excel workbook.
' Side-effect: The new workbook instance is now
' the 'active' workbook.
Workbooks.Add Template:="Workbook"
' Selects the first cell of the
' first worksheet of the new workbook.
Range("A1").Select
' Pastes the clipboard contents to the new worksheet
' (of the new workbook)
ActiveSheet.Paste
' Writes the new (active) Excel workbook to file.
' The format is Comma Separated Value
ActiveWorkbook.SaveAs Filename:= _
"C:\temp\data.csv" _
, FileFormat:=xlCSV, _
CreateBackup:=False
' Gets the filename of the new (active) workbook
' so the name can be logged.
Dim NewFileName As String
NewFileName = ActiveWorkbook.Name
Debug.Print "Active File: " + NewFileName
' Closes the new CSV file
Application.DisplayAlerts = False
ActiveWorkbook.Close
Application.DisplayAlerts = True
' Clears the clipboard contents.
Application.CutCopyMode = False
' Restores the invoking workbook as the active
' Excel workbook.
Workbooks(CurrentFileName).Activate
Range("A1").Select
' Re-Enables Excel screen display.
Application.ScreenUpdating = True
End Sub
さらに別の解決策:
アクティブシートのテーブルを新しいCSVとして保存します(新しいブックを開き、そこからテーブル名をファイル名として使用して保存します)。
Ron's Editor でファイルを開くと、不要な列を非表示にして、結果の「ビュー」をExcelファイルまたはその他の形式でエクスポートできます。さらに良いことに、将来の使用のためにビューを保存できます。とても速く、とても簡単です。
これはPowerShellスクリプトで簡単に実行できます。この PowerShellスニペット でGet-ExcelData関数を使用して、結果を Select-Object を介してパイプし、最後に Export-Csv にパイプすることができます。