
お世話なっております。
VB2005を勉強中の者です。
本業にてちょっとしたプログラムを使用したいのですが、素人のため試行錯誤しております。
ご助力願います。
VB2005にて、エクセルファイルの分割を行いたいと思っています。
たとえば、2000行あるファイルを50行づつに分け、新規ファイル40個を作成する、という感じです。
指定行数分コピーし(ここでは50行)、それを新規ファイルに貼り付け、
次の50行・・・そして最後の2000行目まで、
といった作業はどのように行うのでしょうか。
もしくはそういった類のフリーソフトなどはありますでしょうか。
ご教示いただければ幸いに思います。
宜しくお願いいたします。
No.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
VBAコードのご提示、誠にありがとうございました。
VBAも勉強し、さらなる応用力を身につけていきたいと思います。
今後とも宜しくお願いいたします。
No.1
- 回答日時:
>VB2005にて、エクセルファイルの分割を行いたいと思っています。
>もしくはそういった類のフリーソフトなどはありますでしょうか。
VB2005に拘らずって事なら、ExcelVBAではダメなのですか?
2005の勉強が目的なのか、処理を完了させる事が目的なのかによると思いますが、
如何でしょう?
それにシート構成・新規ファイル名など不明な点もあります。
n-junさん
いつもお世話になっております。
ご回答ありがとうございます。
確かに今回の質問では一体どうしたいのかが不明瞭でした。
誠に申し訳ございません。
VB2005の勉強も処理を完了させることも目的でした。
ちょっと焦っていましたので、しっかりとした質問にならずすみません。
imogasiさんにご提示いただいたVBAのコードと、
以前にn-junさんにご提示いただいたコードを基に、VB2005で書いてみました。
分割が目的でしたので、シート構成やファイル名は特に気にしておりませんでした。
imogasiさんが言われてますように、もっと検索してから質問すべきでした。
いつもありがとうございます。
今後とも宜しくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) エクセルのマクロについて教えてください 物件ごとのフォルダを作成してます そのフォルダ内にサブフォル 2 2023/07/02 17:58
- Excel(エクセル) Excel使用前提 同じフォルダ内にあるファイルの集約等をマクロでできますか 4 2022/09/06 19:03
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- Visual Basic(VBA) エクセルのマクロについて教えてください マクロを実行して 作業フォルダの中にある PDFファイル名を 3 2023/07/01 15:16
- Excel(エクセル) Excel、同じフォルダ内のExcelファイルの特定シートのみを1つのファイルに集約したい 8 2022/09/07 15:12
- ノートパソコン 教えて下さい。過去のエクセルのファイルデータの中に、ヘッダーのところに図形を登録しています。 今回新 4 2023/04/11 15:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelマクロのファイルサイズ
-
タイムスタンプの更新の方法2
-
エクセルVBAでの呼出操作を...
-
Visual C++ 2008 (Win32)を使っ...
-
AccessからExcelファイルのシー...
-
マクロのアラームサウンドについて
-
VB2005でエクセルファイル内...
-
VBSのFor文
-
EXCEL VBAにおけるサンプルコ...
-
フォルダー内の最新更新エクセ...
-
VBA ディレクトリ名をワイルド...
-
大量にあるHTMLファイルのソー...
-
ファイルのアップロードと表示
-
VB2008 Expressで、Excelファイ...
-
エクセルvbaでdocuworksprinter...
-
リストボックスに関連してファ...
-
エクセルのプロパティーでセキ...
-
frxファイルの役目
-
【VBA】テキストファイルを指定...
-
エクセルのショートカットキー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
動かなくなってしまった古いVBA...
-
「エクセルファイルが開いてい...
-
FileDialog オブジェクトでファ...
-
VBAでフォルダ内のhtmlファイル...
-
VB6でUTF-8ファイルの読取りを
-
vbaサブフォルダーをワイルドカ...
-
webブラウザからローカルファイ...
-
ffftpでファイル取得が0バイト...
-
サブフォルダ含むフォルダ内の...
-
ファイルを複数選択した時のフ...
-
VBAでCSVファイルを読み込もう...
-
複数のワークブックのVBAを変更...
-
excel マクロ PDF化の際のエラ...
-
Wordのプロパティ・総ページ数...
-
フォルダ階層・ファイル名・ペ...
-
フォルダ内のファイル存在監視...
-
AccessからOLEオブジェクト型の...
-
VB.net XMLの作成方法 Iniの代替
-
【ACCESS VBA】アクセスからデ...
-
vbs ブック共有を解除
おすすめ情報