• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルで、一連の流れを一括で行うVBA)

エクセルで一括で実行するVBAの作成方法

このQ&Aのポイント
  • エクセルで一連の流れを一括で行うVBAを作成したいです。具体的には、指定した月のデータを入力し、書式をコピーして保存するという操作を自動化したいです。
  • 実行する際には、ダイアログで月を入力し、バリデーションを行います。また、入力した月に存在しないシート名を指定した場合はエラーメッセージを表示します。
  • (1)で指定した月のデータを、指定したシートの対応するセルにコピーします。具体的には、入力シートのB4~B503、F4~F503のデータを、指定した月のシートのB4~B503、F4~F503にコピーします。

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.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

rutohamuni
質問者

お礼

解決しました。色々ありがとうございました。

その他の回答 (4)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

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)
回答No.3

お急ぎとのことなので、とりあえずこんな感じではどうでしょう? 入力形式、保存方法等、不明な点はこっちで適当に解釈してます。 なお、エクセルバージョンは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)
回答No.2

確かに、これじゃぁ質問じゃなくてVBA作成の丸投げと言われても仕方ないよなぁ・・・・ >色々調べてやっているのですが、どうもうまく動いてくれず・・・質問させて頂きます。 調べた結果、どういうVBAを組んで、どこがうまく動いてくれないのか? それを書いて初めて質問になるんじゃないのか? (1)、(2)はinputboxやuserformを使ってIFで条件分岐して処理すれば出来そうだけど、どうやって実行させるつもりなのかな??そしてどこが上手くいかないのかな? >『西暦YYYY年MM月』という形で入力できるようにする。 これだって、"西暦"から"月"までをフルで入力するのか?年と月を二つのマスに分けて、それぞれ4ケタ、2ケタで入力するのか?でコードも違ってくるでしょう。 そういう事を質問文に書くことによって質問者のスキルも推測できるだろうから、よりよいアドバイスがもらいやすくなると思うよ・・・・・"初心者"だけじゃただ単に甘えているだけに思われちゃうかもよ。

rutohamuni
質問者

補足

すいません。他にも色々コマンドあって、できる所はやったんですけど・・・変数が関係する所だけうまく動いてくれなくて。 時間もなかったので、動かない所だけ質問させて頂いたんです。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

この質問こそ、やりたいことだけ文章で書いているだけで、丸投げで作ってください式の物ではないか。ここは無料のソフト委託コーナーではない。 >急いで作成したいので プログラムなど、急に勉強して、短時間で力が付いて、出来るものではない。日頃から訓練しておかないと、仕事などで、あることをやりたい場合に間に合わないものだ。 日頃勉強しておれば、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

rutohamuni
質問者

補足

すいません。他にも色々コマンドあって、できる所はやったんですけど・・・変数が関係する所だけうまく動いてくれなくて。 時間もなかったので、動かない所だけ質問させて頂いたんです。

関連するQ&A

専門家に質問してみよう