さて、基本的に、約40k行を含むXSLMファイルがあります。私はカスタマイズされたCSV形式にこれらの行をエクスポートする必要があります - 各セルの境界を区切って〜印を付ける。一度エクスポートされると、Joomlaのインポーターアプリによって読み込まれ、データベースに処理されます。私はちょうど良い区切り文字を使用するためにそれを微調整した良いマクロスクリプトを見つけました。Excel 2010 - 複数のCSVファイルに1つのXSLMをエクスポート
Sub CSVFile()
Dim SrcRg As Range
Dim CurrRow As Range
Dim CurrCell As Range
Dim CurrTextStr As String
Dim ListSep As String
Dim FName As Variant
FName = Application.GetSaveAsFilename("", "CSV File (*.csv), *.csv")
'ListSep = Application.International(xlListSeparator)
ListSep = "^" ' Use^as field separator.
If Selection.Cells.Count > 1 Then
Set SrcRg = Selection
Else
Set SrcRg = ActiveSheet.UsedRange
End If
Open FName For Output As #1
For Each CurrRow In SrcRg.Rows
CurrTextStr = ìî
For Each CurrCell In CurrRow.Cells
CurrTextStr = CurrTextStr & "~" & CurrCell.Value & "~" & ListSep
Next
While Right(CurrTextStr, 1) = ListSep
CurrTextStr = Left(CurrTextStr, Len(CurrTextStr) - 1)
Wend
Print #1, CurrTextStr
Next
Close #1
End Sub
しかし、私が見つけたのは、生成されたCSVが大きすぎるため、利用可能なスクリプト実行時間で処理できないということです。私は、ファイルを手動で約5000行に分割することができ、それだけで十分です。私がしたいのは、上記のスクリプトを次のように調整することです:
- 各ファイルに挿入するヘッダ行を格納します。
- ファイルごとに出力する行数をユーザーに要求します。
- ファイル名として選択した保存に-pt#を追加します。
- Excelファイルを必要なだけ多くの 'チャンク' csvファイルに処理します。たとえば、
私のファイル名が出力された場合は、ファイルのブレーク数は5000で、Excelファイルが14000行を持っていた、私は、出力pt1.csv、出力pt2.csvで終わるだろう、とoutput-pt3.csv。
もし私がそれをやっていたのであれば、私は手作業でファイルを破壊し続けていましたが、すべてが完了したら、プロジェクトを委託するクライアントにこれらのファイルを渡す必要があります。
多くのアイデアに感謝します。
(1)範囲をループするよりもむしろバリアント配列を使う - はるかに速い(2)2つの長い文字列の連結を避けるために、長い文字列を組み合わせて短い文字列を連結する、つまり 'CurrTextStr = CurrTextStr&("〜 "&CurrCell.Value& 〜 "&ListSep')(3)文字列関数" Right $ "を使用するよりも遅いバリエーションのいとこ' Right' – brettdj
[Excel VBAを使用したCSVファイルへの作成と書き込み](http://www.experts-exchange .com/Software/Office_Productivity/Office_Suites/MS_Office/Excel/A_3509- CSVファイルの作成と書き出し-Excel-VBA.html)を参照してください。 – brettdj