人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Excel 2003 VBAで下記の事を行いたいです。

・シート1上に?というボタンがある。このボタンを押すと特定のファイルを参照できる。

・シート1上に?というボタンがある。このボタンを押すと?で参照したExcelファイルを読み込む。この時、シート2を作成して、そこにExcelのデータを読み込む。読み込むファイルは必ずExcelファイルのシート1。

・列数はA?Jまで固定。行数はファイルによってまちまち。

・A列には日付がソートされて入っている。
例)20100401,20100401,20100415

・シート1上に?というボタンがある。このボタンを押すと、上記?で読み込んだExcelファイル(シート2のデータ)を日付ごとにフィルタをかけて、そのデータをシート3、シート4、シート5・・・というデータに反映させたい。

●質問者: akaired
●カテゴリ:コンピュータ
✍キーワード:Excel VBA ソート データ ファイル
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● GreenStar
●100ポイント ベストアンサー

Macro1が本体です。ファイル読み込みからシート2作成、そしてシート3以降の作成までの部分を担当します。

(読み込むファイルは既に開いていても問題無いです。)

Macro0が呼び出し例です。Macro1は読み込むファイルのフルパスを渡してやります。

このマクロを組み込むブックにはシート1が存在するものとしているとしています。

このマクロを組み込むブックにはシート2やシート3、4・・・が存在していない事を想定しています。存在しているとそこでエラーになります。

オートフィルタは面倒なので使ってません。並び順に従って処理しています。

Sub Macro0()
 Call Macro1("Z:\Book2.xls")
End Sub

Sub Macro1(sPATH)
 sFilename = Dir(sPATH)
 With ActiveWorkbook
 Workbooks.Open Filename:=(sPATH)
 .Activate
 Workbooks(sFilename).Sheets("シート1").Copy after:=Sheets("シート1")
 With ActiveSheet
 sSheetName = "シート2"
 .Name = sSheetName
 iLastRow = .Range("A1").End(xlDown).Row
 iStartRow = 1
 dDate = .Range("A1").Value
 iSheetNO = 3
 For i = 1 To iLastRow
 If dDate <> .Cells(i + 1, 1).Value Then
 Sheets.Add after:=Worksheets(Worksheets.Count)
 sSheetName = "シート" & StrConv(iSheetNO, 4)
 ActiveSheet.Name = sSheetName
 .Range(iStartRow & ":" & i).Copy
 ActiveSheet.Paste
 .Activate
 dDate = .Cells(i + 1, 1).Value
 iSheetNO = iSheetNO + 1
 iStartRow = i + 1
 End If
 Next i
 Application.CutCopyMode = False
 End With
 End With
End Sub
◎質問者からの返答

ご回答ありがとうございます。コードを参考にさせて頂き、無事解決できあました。ありがとうございます!!


2 ● spyglass
●0ポイント

特定のxlsファイルを開いてシート1をシート2を作成してそこに貼り付け、

日別のオートフィルターをけかながらシート3以降にコピー&ペーストという感じでしょうか。

下記のページを参考にしてみてください。


「ファイルを開く」

http://officetanaka.net/excel/vba/file/file02.htm


「ワークシートの作成、コピー&ペースト、オートフィルタの設定」

http://www.big.or.jp/~seto/vbaref/vbaref7.htm

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ