- ベストアンサー
16384列を超えるCSVファイルのExcel上での表示方法とVBAマクロ作成方法
- Excel上で16384列を超えるCSVファイルを表示する方法について、初心者向けに解説します。
- CSVファイルをテキスト化させて表示可能な列数に分割する方法や、ワードやアクセスにインポートする方法など、いくつかの手法があります。
- また、1行目の文字列データを識別して別シートに一覧表示するVBAマクロの作成方法も解説します。セキュリティのためにフリーソフトは使用できない場合でも、Excelのバージョンに応じた機能を利用することで解決できます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こういうことでしょうか? 「VBScript」で組みましたので、「Windows限定」です。 以下のプログラムを、メモ帳かテキストエディタに貼り付け、「~.vbs」という名前で保存します。 「~」の部分は、何でもかまいませんが、「.vbs」の部分は、必ず半角です。 できたプログラムファイル(「~.vbs」ファイル)に、これから処理したい「csv」ファイルを1つだけ、ドラッグ&ドロップしてください。 今は、1行目を読み飛ばし、2行目から、「4」番目の列だけを抜き出し、最後に「csv」ファイルと同じフォルダに、「csv」ファイルと同じ名前(「abc.csv」なら「abc.xlsx」)で保存します。 最後に「Finished!」と表示しますので、「OK」を押して、終了してください。 Option Explicit Dim a, c, bk, ex, sh, so, tx, w, wa Set so = CreateObject("Scripting.FileSystemObject") Set wa = WScript.Arguments w = wa(0) If wa.Count <> 1 or LCase(so.GetExtensionName(w)) <> "csv" Then MsgBox("ドラッグ&ドロップできるのは、csvファイル1つだけです") WScript.Quit End If Set ex = CreateObject("Excel.Application") ex.Application.DisplayAlerts = False ex.Visible = False Set bk = ex.Workbooks.Add() Set sh = bk.Worksheets(1) Set tx = so.OpenTextFile(w, 1) tx.ReadLine c = 0 Do Until tx.AtEndOfStream a = Split(tx.ReadLine, ",") c = c + 1 sh.Cells(c, 1).Value = a(3) Loop tx.Close bk.SaveAs(Left(w, InStrRev(w, "\")) & so.GetBaseName(w) & ".xlsx") bk.Close ex.Quit Set tx = Nothing Set wa = Nothing Set sh = Nothing Set bk = Nothing Set ex = Nothing Set so = Nothing MsgBox("Finished!") 簡単な説明です。 Option Explicit 「厳密に」というような意味ですが、気にしないでください。 Set so = CreateObject("Scripting.FileSystemObject") ファイルやフォルダを扱えるようにしていますが、今回は、「csv」というテキストファイルを開くのにも使っています。 Set wa = WScript.Arguments w = wa(0) If wa.Count <> 1 or LCase(so.GetExtensionName(w)) <> "csv" Then MsgBox("ドラッグ&ドロップできるのは、csvファイル1つだけです") WScript.Quit End If ドラッグ&ドロップされるのを待っていて、ドラッグ&ドロップされたとき、ファイルが複数ではないか、「csv」ファイルかを確かめ、違えば、メッセージを表示して、プログラムそのものを終了してしまいます。 Set ex = CreateObject("Excel.Application") エクセルを扱えるようにしています。 ex.Application.DisplayAlerts = False ex.Visible = False 「上書きしますか」などと聞いてこないように、また、エクセルを表示しません。 Set bk = ex.Workbooks.Add() Set sh = bk.Worksheets(1) ワークブックを新規作成して、その一番左端のシートを「sh」にセット。 Set tx = so.OpenTextFile(w, 1) ドラッグ&ドロップされた「csv」ファイルを読み込み専用で開いています。 tx.ReadLine 1行読み飛ばし。 c = 0 行カウント用。 Do Until tx.AtEndOfStream テキストファイル(「csv」ファイル)を最後まで処理。 a = Split(tx.ReadLine, ",") 「Split()」は、指定した区切り文字で文字列を区切って、配列変数に格納する関数です。 たとえば、読み込んだ1行が、今、「1,2,3」の場合、「a(0) = 1」、「a(1) = 2」、「a(2) = 3」となります。 c = c + 1 1行カウント。 sh.Cells(c, 1).Value = a(3) エクセルの列「A」に「4」番目の列を書き込んでいます。 「a(3)」となっていますが、上述のとおり、「1」から始まるので、「3」が「4」番目なのです。 を、繰り返しています。 tx.Close bk.SaveAs(Left(w, InStrRev(w, "\")) & so.GetBaseName(w) & ".xlsx") bk.Close ex.Quit テキストファイルを閉じ、エクセルのファイルを保存して、閉じ、エクセルそのものを終了しています。 Set tx = Nothing Set wa = Nothing Set sh = Nothing Set bk = Nothing Set ex = Nothing Set so = Nothing MsgBox("Finished!") 後は終了処理で、最後に「Finished!」と表示しています。
その他の回答 (1)
- eden3616
- ベストアンサー率65% (267/405)
CSVファイルはエクセルのファイルではなく、区切り文字としてカンマ「,」が使われているテキストファイルです。 メモ帳で開いていただくとわかるのですが、次のような表記で開くと思います。 ¥イチゴ¥トチオトメ,¥米¥ササニシキ・・・ 100,200・・・ 200,500・・・ ・ ・ ・ エクセルでは、このCSVファイルを開いた際に、テキストファイルの行で区切りセルの行に分け、カンマで区切りセルの列に分けて表示します。 この際に、エクセルで取り扱える行および列数を超えると読み込めないデータとしてエラー(表示しきれない)となります。 ただのテキストデータですので、上記みたいにいきなりエクセル任せでCSVを開くのではなく、VBAからテキストファイルとして読み込んで、splitなどの分割を用いて配列へ格納し、配列に格納したデータに対してお望みの処理を行い、シートへ書き出せば可能です。 CSVファイルをテキストデータとしてVBAから開く方法は以下のサイト様を参考にしてみてください。 http://tonari-it.com/vba-csv-split-2/
お礼
有難うございます。なるほど!一度テキストに変換して別けるという事ですね! 凄く参考になりました。 参考のサイトも分かりやすいです。有難うございました!
お礼
ものすごく丁寧で分かりやすい解説をつけていただき、有難うございます。 感激しています。 理解が遅いため、まだ全てを把握していませんが、頑張ってチャレンジしたいと思っています。 本当にありがとうございました!