- ベストアンサー
年間データからある一月分だけのデータを抜き出す方法
Excel2003です。 会計処理帳簿を作ろうとしています。 仕訳帳の列 項目 日付 金額 コード 借方科目 適用・適用 コード 貸方科目 金額 年間データがたまっていくのですが ここから6月なら6月分だけを別のシートへ抜き出したい その方法としてユーザーフォームへ 6月なら6月分と書き込み実行ボタンを押すと別のシートへ書き出される こんなことをしたいのですが 簡単な自動マクロしか作ったこのない私に難しいでしょうか? 外に簡単に出来る方法がありましたらお教えください。 jintaro1118
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
No1です。TextBox1 TextBox2 に2007/7/1 2008/8/1 とか入れたとして マクロの記録では Selection.AutoFilter Field:=1, Criteria1:=">=2007/7/1", Operator:=xlAnd, Criteria2:="<2007/8/1" と記録されている部分があると思いますが Selection.AutoFilter Field:=1, Criteria1:=">=" & TextBox1.Value, Operator:=xlAnd, _ Criteria2:="<" & TextBox2.Value に変えてみてください。 Rows("7:17").Select とか中途半端な行の選択になっていれば Rows("5:200").Select とか たっぷりとってみてください。 貼り付ける位置が Range("A5").Activate とか記録されていませんでしょうか? 説明忘れていましたが Application.CutCopyMode = False'コピィモードの解除 Selection.AutoFilter Field:=1'フィルターの全ての表示 も最後に加えた方が便利でしょう。 記述されたコマンドもさほど難しくはないと思いますので、エラーを修正しながら作ってみてください。 No2,No3さんの方が紹介されているように、ユーザーフォームでなくて INPUTBOXに 7 とか入れても十分かと思います。
その他の回答 (4)
- merlionXX
- ベストアンサー率48% (1930/4007)
#2,#3です。 項目見出とデータの間に列不明の他のデータがあるようなので梃子摺りました。 これでどうでしょうか? 元データのシート名は仕訳帳でいいんですね? Sub test02() Dim rtn, sd, ld rtn = InputBox("何月分ですか?" & vbCrLf & "7月なら7と入力します。", "月を入力") sd = DateSerial(Year(Date), rtn, 1) ld = DateSerial(Year(Date), rtn + 1, 0) With Sheets("仕訳帳") If .AutoFilterMode Then .AutoFilterMode = False End If .Rows("6").Insert Shift:=xlDown .Cells(6, 1) = "dummy" .Rows("6").AutoFilter .Rows("6").AutoFilter Field:=1, Criteria1:=">=" & sd, Operator:=xlAnd, Criteria2:="<" & ld .Range(.Range(.Range("A6"), .Range("A6").End(xlDown)), .Range(.Range("A6"), .Range("A6").End(xlDown)).End(xlToRight)).Copy .AutoFilterMode = False With Sheets("作業") .Range("A1").PasteSpecial .Rows("1").Delete Shift:=xlUp End With .Rows("6").Delete Shift:=xlUp End With Application.CutCopyMode = False End Sub
お礼
merlionXXさん お忙しい中お時間を頂きありがとうございました m(__)m 質問の仕方も悪くご迷惑をおかけしました。 だいたい上手く行きそうです。 参考になることたくさんあり もうちょっと勉強しなおし自分でいろいろやってみます。 お礼申し上げます jintaro1118 <m(__)m>
- merlionXX
- ベストアンサー率48% (1930/4007)
> データは6行目からです。 では見出行は5行目ですか?それとも見出しが6行目という意味ですか? > データを取り出したい先シートには"作業"という名前が入っています。 わたしにはあなたのファイルやシートの構成、レイアウト等何も見えません。 "作業"という名前のシートがあるのですか?それともシート名に作業という文字を含んでいると言っているのですか? では、そのシートのどこにデータを持っていけばいいのですか? その際、そのシートのデータは一旦クリアしなければいけないと思うのですがクリアする範囲はどこですか? > この作業シートに入った列データから自動的に"試算表" > "貸借対照表・損益計算書"へと書き出されるようになっています。 それはマクロでやっているのですか? それとも他シートが作業シートの必要なセルを参照しているということですか? そういうことをいちいち回答者に質問させないで下さい。
補足
質問の仕方と説明も出来てなくてお手数をおかけします m(__)m 2行目タイトル 4行目列項目 5行目繰越残高 6行目からデータです 1・3行はボタンなどのためあけています。 何もないシートに"作業"と名前をつけています。 "仕訳帳"で取り出したデータの値だけを"作業"シートのA1から貼り付けます このシートにはマクロで「クリア」ボタンを作り 利用したあとのデータを消せるようにしています。 > この作業シートに入った列データから自動的に"試算表" > "貸借対照表・損益計算書"へと書き出されるようになっています。 ここも言葉足らずでした m(__)m "作業"シートの列データからコード対照に集計する"集計"シートがあり "集計"シートから"試算表"へセル参照で書き写しています。 簡単に考えていて申し訳ありませんでした m(__)m
- merlionXX
- ベストアンサー率48% (1930/4007)
もし仕訳帳の項目見出し(日付 金額 コード 借方科目 適用・適用 コード 貸方科目 金額)が1行目、データが2行目以降 日付の列がA列に文字列ではなくシリアル値として入っているならば以下のようなコードで出来ると思います。 別のシートは新たに作成されます。 Sub test01() rtn = InputBox("何月分ですか?" & vbCrLf & "7月なら7と入力します。", "月を入力") sd = DateSerial(Year(Date), rtn, 1) ld = DateSerial(Year(Date), rtn + 1, 0) With ActiveSheet If .AutoFilterMode = False Then .Rows("1:1").AutoFilter End If .Rows("1:1").AutoFilter Field:=1, Criteria1:=">=" & sd, Operator:=xlAnd, Criteria2:="<" & ld .Range(.Range(.Range("A1"), .Range("A1").End(xlDown)), .Range(.Range("A1"), .Range("A1").End(xlDown)).End(xlToRight)).Copy .AutoFilterMode = False End With Set ns = Sheets.Add ns.Range("A1").PasteSpecial Application.CutCopyMode = False ns.Cells.Columns.AutoFit Set ns = Nothing End Sub
補足
早速回答くださってありがとうございます m(__)m 質問・説明の仕方が悪くて申し訳ありません A列に日付のシリアル値が入っています。 データは6行目からです。 データを取り出したい先シートには"作業"という名前が入っています。 この作業シートに入った列データから自動的に"試算表" "貸借対照表・損益計算書"へと書き出されるようになっています。 よく分かってなくてすみません m(__)m
- hallo-2007
- ベストアンサー率41% (888/2115)
>6月なら6月分と書き込み実行ボタンを押すと別のシートへ書き出される >こんなことをしたいのですが >簡単な自動マクロしか作ったこのない私に難しいでしょうか? VBAでの実行をご希望かとおもいますが、 取りあえず マクロの記録で オートフィルター 日付で 6月1日以上 7月1日 小さい で絞込み 縦方向に行をたっぷり選択 コピィ 別シートへ 貼り付ける マクロの記録の終了 出来上がったマクロでは 年月を変更できませんが、参考になると思います。 このあたりを提示していただくと、色々とアドバイスの回答が出来ると思います。 それと、ユーザモジュールを作成して、年月を入れるテキストボックスを 作成して その名前や入力はどうするのか(文字で 08071とか 日付で2008/7/1 と 2008/7/31 と2つ作るとかあると思います) このあたりまで実行してみてください。
補足
早速回答していただきましてありがとうございました。 アドバイスどおり自動マクロの記録で 6月分だけのデータを"作業"シートへ書き出すこと出来ました。 #毎月末にこの自動マクロを作れば目的は達成されるな #これで満足しても。。。などと考えましたが 何も分からず形だけのユーザーフォーム 「○○年○○月分 実行」などと作ったものの どうマクロを書いたらいいのか分からず質問したしだいです。 ユーザーモジュールで名前は実行ボタン 日付は08/07/01から08/07/31この間のデータと指定し 実行というボタンを作りたいと想います。 jintaro1118
お礼
hallo-2007さん アドバイスありがとうございました m(__)m 参考にしながらやってみます。 勉強になりました。jintaro1118