- ベストアンサー
エクセルで一括で実行するVBAの作成方法
- エクセルで一連の流れを一括で行うVBAを作成したいです。具体的には、指定した月のデータを入力し、書式をコピーして保存するという操作を自動化したいです。
- 実行する際には、ダイアログで月を入力し、バリデーションを行います。また、入力した月に存在しないシート名を指定した場合はエラーメッセージを表示します。
- (1)で指定した月のデータを、指定したシートの対応するセルにコピーします。具体的には、入力シートのB4~B503、F4~F503のデータを、指定した月のシートのB4~B503、F4~F503にコピーします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ANo3-4 merlionXXです。 何度もごめん、間違ってました。 再度訂正です。 Sub test01() Dim rtn Dim myD As String, msg As String, fn As String, x As String Dim wb As Workbook, ws As Worksheet line: rtn = Application.InputBox("入力する月を西暦YYYYMM形式で入力してください。" _ & vbNewLine & "例)2011年7月⇒201107", Type:=1) If rtn = False Then Exit Sub myD = Left(rtn, 4) & "/" & Right(rtn, 2) & "/01" If Not IsDate(myD) Then MsgBox "存在しない年月です!", vbCritical GoTo line Else If MsgBox(Format(myD, "yyyy年mm月") & "でよい?", vbYesNo + vbQuestion) = vbNo Then Exit Sub End If End If Set ws = Sheets(CStr(Month(myD))) With Sheets("入力") ws.Range("B4:B503").Value = .Range("B4:B503").Value ws.Range("F4:F503").Value = .Range("F4:F503").Value End With ws.Copy Set wb = ActiveWorkbook fn = "売上集計表" & Format(myD, "yyyy年mm月") Application.Dialogs(xlDialogSaveAs).Show (fn & ".xls") wb.Close (False) End Sub
その他の回答 (4)
- merlionXX
- ベストアンサー率48% (1930/4007)
ANo3です。 データは値貼り付けするんでしたね、失念してました。 訂正です。 Sub test01() Dim rtn Dim myD As String, msg As String, fn As String, x As String Dim wb As Workbook line: rtn = Application.InputBox("入力する月を西暦YYYYMM形式で入力してください。" _ & vbNewLine & "例)2011年7月⇒201107", Type:=1) If rtn = False Then Exit Sub myD = Left(rtn, 4) & "/" & Right(rtn, 2) & "/01" If Not IsDate(myD) Then MsgBox "存在しない年月です!", vbCritical GoTo line Else If MsgBox(Format(myD, "yyyy年mm月") & "でよい?", vbYesNo + vbQuestion) = vbNo Then Exit Sub End If End If With Sheets("入力") Sheets(Month(myD)).Range("B4:B503").Value = .Range("B4:B503").Value Sheets(Month(myD)).Range("F4:F503").Value = .Range("F4:F503").Value End With Sheets(CStr(Month(myD))).Copy Set wb = ActiveWorkbook fn = "売上集計表" & Format(myD, "yyyy年mm月") Application.Dialogs(xlDialogSaveAs).Show (fn & ".xls") wb.Close (False) End Sub
- merlionXX
- ベストアンサー率48% (1930/4007)
お急ぎとのことなので、とりあえずこんな感じではどうでしょう? 入力形式、保存方法等、不明な点はこっちで適当に解釈してます。 なお、エクセルバージョンは2003までです。 2007以降は fn & ".xls" の拡張子を.xlsxに変えてください。 Sub test01() Dim rtn Dim myD As String, msg As String, fn As String, x As String Dim wb As Workbook line: rtn = Application.InputBox("入力する月を西暦YYYYMM形式で入力してください。" _ & vbNewLine & "例)2011年7月⇒201107", Type:=1) If rtn = False Then Exit Sub myD = Mid(rtn, 1, 4) & "/" & Mid(rtn, 5, 2) & "/" & "01" If Not IsDate(myD) Then MsgBox "存在しない年月です!", vbCritical GoTo line Else If MsgBox(Format(myD, "yyyy年mm月") & "でよい?", vbYesNo + vbQuestion) = vbNo Then Exit Sub End If End If With Sheets("入力") .Range("B4:B503").Copy Sheets(Month(myD)).Range("B4:B503") .Range("F4:F503").Copy Sheets(Month(myD)).Range("F4:F503") End With Application.CutCopyMode = False Sheets(CStr(Month(myD))).Copy Set wb = ActiveWorkbook fn = "売上集計表" & Format(myD, "yyyy年mm月") Application.Dialogs(xlDialogSaveAs).Show (fn & ".xls") wb.Close (False) End Sub
- kuma56
- ベストアンサー率31% (1423/4527)
確かに、これじゃぁ質問じゃなくてVBA作成の丸投げと言われても仕方ないよなぁ・・・・ >色々調べてやっているのですが、どうもうまく動いてくれず・・・質問させて頂きます。 調べた結果、どういうVBAを組んで、どこがうまく動いてくれないのか? それを書いて初めて質問になるんじゃないのか? (1)、(2)はinputboxやuserformを使ってIFで条件分岐して処理すれば出来そうだけど、どうやって実行させるつもりなのかな??そしてどこが上手くいかないのかな? >『西暦YYYY年MM月』という形で入力できるようにする。 これだって、"西暦"から"月"までをフルで入力するのか?年と月を二つのマスに分けて、それぞれ4ケタ、2ケタで入力するのか?でコードも違ってくるでしょう。 そういう事を質問文に書くことによって質問者のスキルも推測できるだろうから、よりよいアドバイスがもらいやすくなると思うよ・・・・・"初心者"だけじゃただ単に甘えているだけに思われちゃうかもよ。
補足
すいません。他にも色々コマンドあって、できる所はやったんですけど・・・変数が関係する所だけうまく動いてくれなくて。 時間もなかったので、動かない所だけ質問させて頂いたんです。
- imogasi
- ベストアンサー率27% (4737/17069)
この質問こそ、やりたいことだけ文章で書いているだけで、丸投げで作ってください式の物ではないか。ここは無料のソフト委託コーナーではない。 >急いで作成したいので プログラムなど、急に勉強して、短時間で力が付いて、出来るものではない。日頃から訓練しておかないと、仕事などで、あることをやりたい場合に間に合わないものだ。 日頃勉強しておれば、1,2点の絞った点の質問回答で実現できるが。 ーーー 幸い、本件はそんなに複雑なことをやっているわけではないと思う。 一度「入力シート」にデータを入力し(狭いセル範囲でやれば良い)そこから、マクロの記録を取り始め、「入力シート」の入力範囲をコピーし、「質問者がどのシートあてか」を判断して、そのシート名のシートに貼り付けてみて、、マクロの記録がどう 記録されたか、見てみること。 そして (1)セル範囲が本番では変わる (2)シート名は入力者が指定する名前にする ためのコード修正箇所を推測すること。 ーー シート名をいれる方法はいろいろあるが初者は、Googleででも「VBA Inputbox}で照会し、例題つきのコードを真似せよ。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_inputbox.html http://officetanaka.net/excel/vba/tips/tips37.htm など ーー 保存する操作もも、マクロの記録が取れるのでコードがわかる。 「VBA ブックの保存」でGoogle照会。 入力者が入力した年月で「売上集計表YYYY年MM月」の文字列を作ればよいる。 ーー 初心者というからには、マクロの記録やWEB照会を活用してからここへ質問すべきだ。 ーー 他シートへのコピーは(例 Sheet1-->Sheet4) Sub test01() Worksheets("Sheet1").Range("A2:D6").Copy Worksheets("Sheet4").Range("A2") End Sub
補足
すいません。他にも色々コマンドあって、できる所はやったんですけど・・・変数が関係する所だけうまく動いてくれなくて。 時間もなかったので、動かない所だけ質問させて頂いたんです。
お礼
解決しました。色々ありがとうございました。