• ベストアンサー

VB2005でエクセルファイル内容の分割

お世話なっております。 VB2005を勉強中の者です。 本業にてちょっとしたプログラムを使用したいのですが、素人のため試行錯誤しております。 ご助力願います。 VB2005にて、エクセルファイルの分割を行いたいと思っています。 たとえば、2000行あるファイルを50行づつに分け、新規ファイル40個を作成する、という感じです。 指定行数分コピーし(ここでは50行)、それを新規ファイルに貼り付け、 次の50行・・・そして最後の2000行目まで、 といった作業はどのように行うのでしょうか。 もしくはそういった類のフリーソフトなどはありますでしょうか。 ご教示いただければ幸いに思います。 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

>もしくはそういった類のフリーソフトなどはありますでしょうか 考えの行く方向が的外れです。 エクセルVBAを知っておれば10行程度でできるものを、(課題が部分的過ぎることもあって)、たとえ作れても、私ならおこがましくて公表できない内容ですので公表しません。 ーー エクセルのライブラリを使えるようにして、VB2005から、エクセルオブジェクトの世界に入り、そのエクセルオブジェクトを参照して使わせてもらいますという記述(下記WEB例では先頭にapp.が付いている部分がそれを示す)をして、VBAコードを書けば済む話です。 WEBではまだVB6.0からそれを行う例が載っている場合が多いですが、2005から入る例も載っています。 「VB2005 エクセル」で照会すれば沢山記事が出ます。 http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=861029&SiteID=7 http://www.geocities.jp/tomtomf/vb2005-1/vb2005-1.htm それらの知識を寄せ集めてやってみて、行き詰まったところで再質問のこと。 プログラムをやろうとしていながら、WEB照会もしていないらしいのは不思議です。 エクセルのObjectLibraryを使うことを考えるべきで、CやC++やVB独自 のコードでプログラムを組もうとしても絶対できませんのでダメです。 まずエクセルVBAの世界から >2000行あるファイルを50行づつに分け、新規ファイル40個を作成する、 がどういうコードになるか勉強することが先決です。 ーー 質問どおりだとテストが大変なので、50行ーー>20行(下記rsが20)、新規ブックーー>新規シート、列はH列までで、エクセルVBAでやってみました。参考になれば。 Sub test01() d = Range("A65536").End(xlUp).Row Dim sh1 As Worksheet Set sh1 = Worksheets("Sheet1") '元データシート rs = 20 MsgBox d s = 1 For i = 1 To d Step rs sh1.Range(sh1.Cells(s, "A"), sh1.Cells(s + rs - 1, "H")).Copy Sheets.Add.Paste s = s + rs Next i End Sub

metal3100c
質問者

お礼

VBAコードのご提示、誠にありがとうございました。 VBAも勉強し、さらなる応用力を身につけていきたいと思います。 今後とも宜しくお願いいたします。

metal3100c
質問者

補足

imogasiさん VBAコードのご提示、誠にありがとうございます。 おっしゃられるように、もっと検索などをし、行き詰った時点で質問すべきでした。 誠に申し訳ございません。 最初のご回答をいただいておりますn-junさんにご提示いただいたコード、 そしてimogasiさんにご提示いただいたコードを基に、VB2005でコードを書き、分割は成功しました。 しかしながら、下記コードでは分割はできるのですが、分割後のxlsの内容がおかしくなります。 おかしな内容の詳細なんですが、確かに20行に分割し、連番をつけてcsvファイルに保存できるのですが、 20行以降はカラのセルのはずが、他のプログラムから読み取ると20行目以降にも”何か”が入っているようなのです。 わかりづらい説明ですみません。 当方、出来上がったファイルを他のプログラムの「StreamReader」で最後の行まで読み込んでいるのですが、カラのセルも読み込んでしまいます。 分割の際の新規ファイルの作り方が悪いのでしょうか。 ご教示願います。宜しくお願いいたします。 ~以下、コードです(見づらいもので申し訳ないです。)~ Dim xlApp As Object = CreateObject("Excel.Application") Dim xlwb As Microsoft.Office.Interop.Excel.Workbook = xlApp.Workbooks.Open(TextBox1.Text) Dim xlsheet As Microsoft.Office.Interop.Excel.Worksheet xlsheet = xlwb.Worksheets("Sheet1") Dim d As String d = xlsheet.Range("A65536").End(Excel.XlDirection.xlUp).Row Dim sh1 As Excel.Worksheet sh1 = xlwb.Worksheets("Sheet1") '元データシート Dim rs As Integer = 20 Dim i As Integer Dim m As String = 1 MsgBox(d + "件ありました(=゜ω゜)ノ") '分割フォルダを作成 System.IO.Directory.CreateDirectory(System.IO.Directory.GetCurrentDirectory() + "\分割フォルダ") Dim s As Integer = 1 For i = 1 To d Step rs Dim dire As String = (System.IO.Directory.GetCurrentDirectory()) Dim xlFilePath As String = (dire + "\分割フォルダ\" + m + "つ目.csv") Dim xlApp3 As Object = CreateObject("Excel.Application") Dim xlwb3 As Microsoft.Office.Interop.Excel.Workbook = xlApp3.Workbooks.add Dim xlsheet3 As Microsoft.Office.Interop.Excel.Worksheet xlApp3.DisplayAlerts = False xlsheet3 = xlwb3.Worksheets("Sheet1") sh1.Range(sh1.Cells(s, "A"), sh1.Cells(s + rs - 1, "B")).Copy() xlsheet3.Paste() xlsheet3.SaveAs(xlFilePath) xlwb3.Close(True) xlApp3 = Nothing xlwb3 = Nothing xlsheet3 = Nothing m += 1 s = s + rs Next i MsgBox("分割OK♪") xlwb.Close(True) xlApp = Nothing xlwb = Nothing xlsheet = Nothing

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

>VB2005にて、エクセルファイルの分割を行いたいと思っています。 >もしくはそういった類のフリーソフトなどはありますでしょうか。 VB2005に拘らずって事なら、ExcelVBAではダメなのですか? 2005の勉強が目的なのか、処理を完了させる事が目的なのかによると思いますが、 如何でしょう? それにシート構成・新規ファイル名など不明な点もあります。

metal3100c
質問者

お礼

n-junさん いつもお世話になっております。 ご回答ありがとうございます。 確かに今回の質問では一体どうしたいのかが不明瞭でした。 誠に申し訳ございません。 VB2005の勉強も処理を完了させることも目的でした。 ちょっと焦っていましたので、しっかりとした質問にならずすみません。 imogasiさんにご提示いただいたVBAのコードと、 以前にn-junさんにご提示いただいたコードを基に、VB2005で書いてみました。 分割が目的でしたので、シート構成やファイル名は特に気にしておりませんでした。 imogasiさんが言われてますように、もっと検索してから質問すべきでした。 いつもありがとうございます。 今後とも宜しくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VB ファイル一覧表示について

    VB初心者です。 現在、指定したフォルダのサブフォルダを含むファイル名一覧を表示したものを作りたいと思い、試行錯誤しております。 ファイル名は、指定したフォルダ以下のパスで表示したものを作りたいと思っているのですが、どうしてもフルパスで表示されてしまいます。 現在、自分が書いているプログラムに拘ろうと思っていませんので、どなたかフルパスではないファイル名一覧表示方法を教えていただけないでしょうか。 環境は、Windows XP 、Microsoft Visual Studio 2008 Express Editionです。 ファイル名一覧表示は、ListViewかListBoxで考えています。 よろしくお願いいたします。

  • VB6.0同一プログラム上で複数のExcelファイルの編集をしたいのですが…

    目にとめていただき有難うございます。 VBについては初心者です。宜しくお願い致します。 VB6.0で、フォーム上で指定した2つのExcelファイルについて、それぞれ特定の行・列を削除してCSVとして保存、そのデータを使って処理を行うプログラムを作成しようとしています。 同じVB6.0のプログラム上で、複数のExcelファイルに対して編集をかけることは可能でしょうか。 プログラムの流れとしては (1)エクセルオブジェクトの新しいインスタンスを作成 (2)エクセルファイル1を開き、特定行を削除する (3)エクセルファイル1をCSVとして保存、閉じる (4)オブジェクトを解放する (5)エクセルオブジェクトの新しいインスタンスを作成 (6)エクセルファイル2を開き、特定行を削除する (7)エクセルファイル2をCSVとして保存する (8)オブジェクトを解放する というものです。 (1)~(4)と(5)~(8)は同じSubプロシージャでファイルのパスだけ変えるようにしています。 (1)~(5)迄は素直に行くのですが、(6)の削除行を指定する段階で ‘Rows’メソッドは失敗しました’_Global’オブジェクト と出てしまう状態です。 (1)~(4)は問題なく動き、ファイル1の編集もきちんと出来ているため、混乱しております。 同じコードでパスだけ変えてやろうという考えが無理な話なのか、コードの組み方が悪いのか… 質問で不明瞭点があれば説明させて頂きますのでご指摘下さい。 宜しくお願い致します。 #ソースまで出した方が良かったのでしょうか…

  • VB6でのファイル作成方法

    VB6.0でファイルを作成するにはOPEN命令を使用しますが、その時ファイル最後尾にEOFコードが入ってしまいます。このEOFコードが入らない様にするにはどうしたら良いか?試行錯誤していますが、どうにもうまくいきません。 どなたか分かる人がいたら教えて欲しいのですが・・・。

  • Excelファイルをマクロでファイルに分割したい

    資産管理のため、次のような作業を行いたいのですが、 勉強が足りず困っております。 あまえた質問で申し訳ないのですが、どうぞお知恵を貸してください。 下のようなExcelファイル(約3000行15列のもの)を 場所 資産番号 資産の種類 使用者 購入日・・・ 本社 123456 AA 東京太郎 2001/4/4 大阪 123457 BB 大阪花子 2003/1/10 福岡 123458 AA 福岡一郎 2005/3/10 京都 123459 CC 京都次郎 2006/8/1        場所ごとに分割して「場所」名のファイルを作成したいと思い、 過去の記事を探して、ここへたどり着きました。 http://okwave.jp/qa/q4361389.html 早速、mitarashiさんのマクロを使用し、ファイルの分割はできたのですが、 3列目までしか記載されておらず(これは当然のことだと思うのですが) どこを変えればいいか、試行錯誤したのですがエラーになってしまいます。 残りの列の値も出力させるには、どうしたらよいでしょうか。

  • VB6でEXCELの表をHTML形式で保存する方法は?

    VB6でEXCELのデータを作成してHTML形式で保存したいのですが、根本的にできないものでしょうか? EXCELのVBAではWebページで保存ということができるので試行錯誤してみたのですが VB6のヘルプでSaveAsメソッドを見る感じでは新しいファイル名までは指定できますが保存形式はEXCEL VBAのように指定できないようです。 XLSファイルの表までは完成できますが、そのXLSファイルをHTMLファイルにできればぃぃんです。 VB6からEXCELを制御してHTML形式で保存させるとか なにかいい方法はないでしょうか?

  • ファイル分割

    Windows8のコマンドプロンプトでバッチファイル内で指定バイト数でファイル分割したいのですが標準的な方法を教えてください。なるべくフリーソフトなどは使いたくありません。対象ファイルはひとつだけですがサイズが1170Byteで、これを39Byte毎にファイル分割したいです。

  • ファイルを分割する。

    ひとつのファイルを3つのファイルに分けて保存するプログラムを作りたいと思います。 ファイル名 test.txt 内容 あああ いいい ううう かかか ききき くくく さささ ししし すすす というファイルを指定した行数ごとに違う名前で保存できるようにしたいのです。 SEEKとかでは指定した行では分けれないし、foreachではすべての行になってしまいます。 ファイル名 1.txt あああ いいい ううう ファイル名 2.txt かかか ききき くくく という感じで分けたいと思います。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • VC++のDLLファイルをVBで読み出せません。

    お世話になります。 プログラムをやり始めて3か月の初心者です。仕事で以下のような事をしていますが、うまくいかず悩んでいます。 プログラム(1):VB 2008年版 メインプログラム プログラム(2):C言語 2006年版 プログラム(3):VC++ VISUAL STUDIO2012 EXPRESSを使用 ■今のプログラム (2)のdllファイルを(1)で呼び出しています。問題なく動きます。 ■やりたい事 (2)のプログラム内容を変更したのが(3)です。そのdllファイルを(1)で呼び出したいです。 ⇒しかし、(3)のdllファイルを読み込むことができません。((3)のdllファイルは作れました。) (3)はVC単独では正しく動作します。 (1)のプログラムに、(2)を呼び出すときと同じように(3)用のプログラムを追加しました。作った(3)のdllファイルは指定したフォルダにきちんと入れています。 コンピューターに詳しい先輩が時間をかけてみてくれたのですが、結局わからずじまいでした。 ■質問 VBの型が古い、EXPRESSを使っているからできないのでしょうか? VCでdllを作って、VBで呼び出すまでの流れをわかりやすく紹介した書籍やWEBなどあればご教示頂けませんでしょうか? よろしくお願いいたします。

  • VBとAdobe Acrobat SDKを使用してPDFファイルを作成したい

    VBとAdobe Acrobat SDKを使用してPDFファイルを作成 したいと考えています. SDKとVBの連携についての情報が見つからないため, 試行錯誤でプログラム作業をおこなっています. VBとAdobe Acrobat SDKを使用したサンプルが掲載されているサイトまたは書籍はないのでしょうか? OS:Windows2000+SP4 Visual Basic 6.0+SP6 Adobe Acrobat 5 +SDK

  • EXCELでのVBについて

    EXCELでVBのプログラムを作成していますが、2点ほどわからないことがありまして困っています。 1.EXCEL等でデータを保存するとき、同じファイルがあれば、上書き確認のメッセージボックスが出ます。VBのOpen文で保存 するとき、このメッッセージボックスを出したい。 2.コマンドボタンの機能をファンクションキー(たとえばF1)に割り付けたい。 以上、2点について、よろしくご教示ください。