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


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

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

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

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

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

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/04/16 19:12:26
  • 終了:2010/04/17 13:48:16

ベストアンサー

id:GreenStar No.1

GreenStar回答回数192ベストアンサー獲得回数462010/04/16 23:45:51

ポイント100pt

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
id:akaired

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

2010/04/17 13:48:05

その他の回答(1件)

id:GreenStar No.1

GreenStar回答回数192ベストアンサー獲得回数462010/04/16 23:45:51ここでベストアンサー

ポイント100pt

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
id:akaired

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

2010/04/17 13:48:05
id:spyglass No.2

spyglass回答回数455ベストアンサー獲得回数292010/04/17 03:30:10

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

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

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


「ファイルを開く」

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


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

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

  • id:akaired
    ・オートフィルタのイメージ。まずは20100401でフィルタをかける。フィルタをかけたデータをシート3というシートを作り、そこへコピー。

    次に200415でフィルタ。シート4へコピー。日付のデータがなくなるまで繰り返し。

    このような処理をしたいと思っています。ただ、日付はファイルによってまちまちです。

    ボタン①は既に出来上がっているので、ボタン②③の作り方をお教えください。
  • id:akaired
    追記:ボタン②で読み込んだシートは必ずシートの2番目にきてもらいたいです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません