重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

お世話なっております。
VB2005を勉強中の者です。

本業にてちょっとしたプログラムを使用したいのですが、素人のため試行錯誤しております。
ご助力願います。

VB2005にて、エクセルファイルの分割を行いたいと思っています。
たとえば、2000行あるファイルを50行づつに分け、新規ファイル40個を作成する、という感じです。

指定行数分コピーし(ここでは50行)、それを新規ファイルに貼り付け、
次の50行・・・そして最後の2000行目まで、
といった作業はどのように行うのでしょうか。


もしくはそういった類のフリーソフトなどはありますでしょうか。

ご教示いただければ幸いに思います。
宜しくお願いいたします。

A 回答 (2件)

>もしくはそういった類のフリーソフトなどはありますでしょうか


考えの行く方向が的外れです。
エクセルVBAを知っておれば10行程度でできるものを、(課題が部分的過ぎることもあって)、たとえ作れても、私ならおこがましくて公表できない内容ですので公表しません。
ーー
エクセルのライブラリを使えるようにして、VB2005から、エクセルオブジェクトの世界に入り、そのエクセルオブジェクトを参照して使わせてもらいますという記述(下記WEB例では先頭にapp.が付いている部分がそれを示す)をして、VBAコードを書けば済む話です。
WEBではまだVB6.0からそれを行う例が載っている場合が多いですが、2005から入る例も載っています。
「VB2005 エクセル」で照会すれば沢山記事が出ます。
http://forums.microsoft.com/MSDN-JA/ShowPost.asp …
http://www.geocities.jp/tomtomf/vb2005-1/vb2005- …
それらの知識を寄せ集めてやってみて、行き詰まったところで再質問のこと。
プログラムをやろうとしていながら、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

この回答への補足

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

補足日時:2008/02/06 02:53
    • good
    • 0
この回答へのお礼

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

今後とも宜しくお願いいたします。

お礼日時:2008/02/09 04:24

>VB2005にて、エクセルファイルの分割を行いたいと思っています。


>もしくはそういった類のフリーソフトなどはありますでしょうか。
VB2005に拘らずって事なら、ExcelVBAではダメなのですか?
2005の勉強が目的なのか、処理を完了させる事が目的なのかによると思いますが、
如何でしょう?

それにシート構成・新規ファイル名など不明な点もあります。
    • good
    • 0
この回答へのお礼

n-junさん

いつもお世話になっております。
ご回答ありがとうございます。

確かに今回の質問では一体どうしたいのかが不明瞭でした。
誠に申し訳ございません。

VB2005の勉強も処理を完了させることも目的でした。
ちょっと焦っていましたので、しっかりとした質問にならずすみません。

imogasiさんにご提示いただいたVBAのコードと、
以前にn-junさんにご提示いただいたコードを基に、VB2005で書いてみました。

分割が目的でしたので、シート構成やファイル名は特に気にしておりませんでした。
imogasiさんが言われてますように、もっと検索してから質問すべきでした。

いつもありがとうございます。
今後とも宜しくお願いいたします。

お礼日時:2008/02/06 02:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!