• ベストアンサー

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

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

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答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