Excel2007でマクロ実行時にSheetの確認方法

このQ&Aのポイント
  • Excel2007でマクロ実行時にSheetの確認方法を教えてください。
  • 月別のシートを作成し、マクロで処理をしたい場合、実行前にSheetの確認を行いたいです。
  • 処理月を指定し、マクロが正しいSheet上で実行されるようにしたいです。
回答を見る
  • ベストアンサー

Excel2007で、マクロ実行時にSheetの確認をしたいのですが、

Excel2007で、マクロ実行時にSheetの確認をしたいのですが、その方法を教えて下さい。 月別のシートを、毎月2枚(成績と実績)が作ってあり、当該シートを開き○月と入力することによりいろいろ作業をしたいのですが、このシート上でマクロを走らせて良いのかを判断させてから稼働するようにしたい。シートや月が間違っていたら、警告を発し処理を中止させるようにしたい。どうぞご指導をよろしくお願いします。 Sub データ並べ替え() Dim tuki As Integer '処理月 tuki = InputBox("処理月を半角英数で入力して下さい") Range("A2").Value = tuki ActiveSheet.Name End Sub

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

  • ベストアンサー
  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

例えば、インプットボックスで入力した数字がシート名に含まれるかどうかで、処理したいシートかどうか判断するのであれば、以下を参考にして下さい。 Sub データ並べ替え() Dim tuki As Integer '処理月 tuki = InputBox("処理月を半角英数で入力して下さい") If ActiveSheet.Name Like "*" & tuki & "*" Then Range("A2").Value = tuki Else MsgBox "シートが違います", vbCritical Exit Sub End If End Sub

kyoutanuki
質問者

お礼

早速にありがとうございました。  すごい すごい !! 下記のように、変更したところ、思っていたとおりに動きました。 当方まだまだ初心者のため、ほとんど解っていないのですが、 いろいろ勉強をしていきたいと思っております。 変更後 If ActiveSheet.Name Like tuki & "月成績" Then

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

思い当たるエラー処理をいつくか施しました。 この中から、必要な部分だけを抜き出してもよいです。 シートは、1月、2月、3月・・となっていると仮定しています。 Sub Test1()  Dim tuki As Variant '処理月  Dim msgRet As VbMsgBoxResult  Dim ret As Variant Start:  Do   tuki = Application.InputBox("処理月を英数で入力して下さい", "入力", Type:=2)   If VarType(tuki) = vbBoolean Then Exit Sub 'キャンセルボタン   tuki = StrConv(tuki, vbNarrow) '半角に変換   If Not tuki & "月" Like "#*月" Then Exit Do '月をいれた場合   If IsNumeric(tuki) = True Then tuki = tuki & "月": Exit Do '数字の場合  Loop  On Error Resume Next  ret = Worksheets(tuki).Range("A2").Value  If Err.Number > 0 Then   MsgBox tuki & "のシート名が違います。", vbExclamation   GoTo Start  End If  On Error GoTo 0  msgRet = MsgBox(tuki & "でよろしいですか?", vbQuestion + vbYesNoCancel)  If msgRet = vbNo Then   GoTo Start   ElseIf msgRet = vbCancel Then   Exit Sub  End If  With Worksheets(tuki)  '実行   .Select   .Range("A2").Value = tuki  End With End Sub

kyoutanuki
質問者

お礼

早速にありがとうございました。 非常に高度で、すばらしいプログラムとは思いますが、 当方ごく初心者のため、理解するまでには少し時間がかかりますので、 ご了承下さい。 これから勉強をして理解を深めたいと思います。 誠に申し訳ありませんが、理解の後改めてお礼を言わせて頂きます。 ありがとうございました。

関連するQ&A

  • シート間のコピーマクロについて

    下記のような、TextBoxで入力した行の内容を違うシートへ貼り付けるマクロを作成しています。 マクロは素人で参考書を見ながら作製しているのですが、 「ActiveSheet.Range("A&r:Z&r").Copy Destination:=Worksheets(tuki).Range("A&idousaki:Z&idousaki")」 のところで、 『アプリケーション定義またはオブジェクト定義のエラーです』 と表示されます。 多分めちゃくちゃな文をかいてるんだろうなと思うのですが、私には分かりませんでした・・・ どなたか、修正点をご教授お願致します。 Private Sub OK_Click() Dim r As Integer, tuki As String, idousaki As Variant If OptionButton1.Value = True Then '行指定 r = TextBox1.Value tuki = ComboBox1.Value '移動先の行番号取得 If Worksheets(tuki).Range("D7").Offset(1).Value = "" Then idousaki = Worksheets(tuki).Range("D7").Offset(1).Rows Else idousaki = Worksheets(tuki).Range("D7").End(xlDown).Ofset(1).Rows End If ActiveSheet.Range("A&r:Z&r").Copy Destination:=Worksheets(tuki).Range("A&idousaki:Z&idousaki") Else MsgBox "移動方法を選択してください" End If End Sub

  • エクセル2003 別シートへ抽出して印刷するマクロについて

    エクセル2003 別シートへ抽出して印刷するマクロについて Sheet1のデータ(1~60のナンバーを入れています)を、Sheet2のA1にナンバーを入力、 関数を反映させた同一の印刷範囲を繰り返し印刷させるマクロについて教えてください。 下記マクロで ActiveSheet.PrintOut Copies:=1 のところでファイルの保存の窓が出てきてしまいます。 種類はXPSだけで選択はできないようです。 こんな窓が出てくるのも不思議ですが、 vistaではない(XPです)のにXPSというのも不思議です。 保存窓の後ろには印刷中の窓が出ています(印刷はされません) キャンセルで窓を閉じるとエラー400がでます。 どういった修正をしたらいいのか教えてください。 よろしくお願いいたします。 Sub SAHIKOMI() Dim SNO As Integer, ENO As Integer, I As Integer SNO = InputBox("開始No.を入力") ENO = InputBox("終了No.を入力") Sheets("Sheet2").Activate For I = SNO To ENO Worksheets("Sheet2").Range("A1") = I ActiveSheet.PrintOut Copies:=1 Next I End Sub

  • INPUT関数で入力した日付でワークシートとセルに値をいれる。

    こんにちは、最近VBAを勉強し始めたのですが、 躓いてしまいました。 すでにあるワークシートからINPUT関数で”20101016”を入力して ワークシートをコピー(シート名は”20101016”)する事はできたのですが このシートに”2010年 10月 16日 (曜日)”を表示する事ができないのです。 指定したセルには”20101016”が入っているのですが 表示が"###################”になってしまいます。 (”負の日付又は時間は###の表示になります。”の意味がわかりません。) 書式設定で日付等をいじっても変化がありません。 どなたか、ご教示願います。 Sub 新規シート() Dim tuki As String ActiveSheet.Copy after:=ActiveSheet   'アクティブシートの後ろへコピーを作る。 Range("a46:r57").Select   'コピー元の値を削除 Selection.ClearContents Range("a1").Select tuki = InputBox("日付を半角英数字で入力してください。" & Chr(13) & _ "yyyymmdd 形式で入れてね!", "日付入力")   'tukiに8桁を入力 If tuki = "" Then Application.DisplayAlerts = False ActiveSheet.Delete Application.DisplayAlerts = True   '入力が無い場合、作成したシートを削除 Else On Error Resume Next ActiveSheet.Name = tuki   '新規ワークシート名に”tuki”を代入 Range("d6").Value = tuki  ’ここが問題! If Err.Number = 1004 Then MsgBox "日付が重複しています。" Application.DisplayAlerts = False ActiveSheet.Delete Application.DisplayAlerts = True   'シート名が重複した場合、警告後に削除 End If End If End Sub

  • VBA実行時のシート(複数)保護解除について

     いつも勉強させていただいております。VBA初心者です。  早速ですが、あるマクロを複数のシートで実行するとき、 シートに設定されている「シートの保護」を解除したいのですが、 複数シートに対しての処理方法が分かりません。  インターネットで検索した結果、 ActiveSheet.Unprotect を実行したいマクロの冒頭にセットし、 最後にActiveSheet.Protectを設定すればよいことは分かりました。 (私としての理解:こうすることで、シートの保護解除⇒保護となる。)  その結果、 Sub カレンダー作成() 'ワークシートを非保護にする ActiveSheet.Unprotect Dim 日付, i As Integer 日付 = Application.InputBox _ ("yyyy/m 形式の年月を半角で入力してください" & Chr(10) _ & " 例)2013年の1月 → 2013/1") Range("c3").Value = 日付 If 日付 = False Or IsDate(日付) = False Then Exit Sub For i = 1 To Sheets.Count With Sheets(i) Select Case .Name Case "sheet1", "sheet5" .Range("G5").Resize(, 31).ClearContents .Range("C3,G5").Value = DateSerial(Year(日付), Month(日付), 1) .Range("G5").AutoFill Destination:=.Range("G5"). _ Resize(, Day(DateSerial(Year(日付), Month(日付) + 1, 0))) End Select End With Next 'ワークシートを保護する ActiveSheet.Protect End Sub  と言った構文を作成し、1シートについての作業は成功しました。 ところが、2シート目以降にはエラーとなるのです。  この作業を、複数のシートに対して同時に、1回の操作で実行したいのです。 色々と調べてみて、それらしいサイトも見てみたのですが、初心者の私には、 その内容を理解し、自分のVBAに組み込むことが到底できませんでした。  有識者のみなさま、どうかご指導をよろしくお願いいたします。

  • [Excel2003] On Error GoTo について教えてください。

    エラー処理について教えてください。 以下の様なマクロで、インプットボックスに 数字以外を入力した場合のエラー処理ですが、 次のような手順で進めると 「型が一致しません」とエラー表示されてしまいます。 どこがいけないのでしょうか?   【手順】   ・マクロ実行   ・インプットボックスへ数字以外の文字を入力   ・「OK」クリック   ・再びインプットボックス出現   ・もう一度数字以外の文字を入力   ・「OK」クリック←ここでエラー表示! Sub TEST() Dim Tuki As Integer On Error GoTo INPT INPT: Tuki = InputBox("何月分ですか?" & vbCrLf & _ "数字を入力してください。", "集計月入力", 1) If Tuki = 0 Or Tuki > 12 Then MsgBox "1から12の数字を入力してください。" GoTo INPT End If On Error GoTo 0 End Sub

  • マクロが実行しない

     二行三列を一枡として月の勤務割表を作成しています。マクロで同じ事を しているのにMacro1の方が実行しません。お教え願えませんでしょうか。 (尚、図形を枠線上にコピペしています。) Sub Macro1()実行しません。 Dim i As Integer Dim j As Integer For i = 10 To 43 Step 2 For j = 10 To 103 Step 3 Select Case Cells(i, j).Value Case 1: ActiveSheet.Shapes("四角形1").Select Selection.Copy Cells(i + 1, j + 1).Select ActiveSheet.Paste End Select Next Next End Sub Sub Macro2()実行します。 ActiveSheet.Shapes.Range(Array("四角形1")).Select Selection.Copy Range("J11:K11").Select ActiveSheet.Paste End Sub

  • EXCEL-VBマクロで教えて下さい

    パスワードを入力を促すVBマクロですが「キャンセル」キーを押した時に 以降の操作をせずマクロ終了したいのですがどのような構文を挿入すべき でしょうか? Sub Macro3() ' ' Macro3 Macro ' マクロ記録日 : 2012/7/27  ユーザー名 : HA社 '    Const MYPASSWORD As String = "apcs123"    Dim myPassInput As String    myPassInput = InputBox("入力してください", "パスワードの入力")    Do While MYPASSWORD <> myPassInput    myPassInput = InputBox("違います。再度入力してください", "パスワードの入力")    Loop    ActiveSheet.Unprotect    Rows("40:50").Select    Selection.EntireRow.Hidden = False    Range("A1:C1").Select End Sub

  • Excelで、既に作成してある月別Sheetを呼び出すマクロを作りたい

    Excelで、既に作成してある月別Sheetを呼び出すマクロを作りたいのですが教えて下さい。 2ヶ月に1回のゴルフ会の成績表を作成するのに、 1月成績、1月転記、3月成績、3月転記というように12のSheetが作ってあります。 当該月分の入力準備表を(Sheet 7月成績)に2ヶ月前の(Sheet 5月転記)のSheetを丸ごとマクロでコピーをしたいのです。  この7月と入力したら、(7月成績)のSheetを呼び出し、コピー元のSheet(5月転記)をマクロに記入出来るように設定したいのです。 例えば、   1(月)と入力したら、    11月転記Sheetから自動コピーの指定        3(月)と入力したら、     1月転記Sheetから自動コピーの指定        7(月)と入力したら、     5月転記Sheetから自動コピーの指定     年間6回の作業となります。 初心者の私が、自動記録でマクロを記入したところ、下記のようになり、同じ作業をするのに各月ごとのマクロ6本を作る必要があり、不便なので何とか1つのマクロで処理が出来ればと思い、その方法を教えて頂ければ幸いです。    Sub Macro1() ' 入力準備表作成 ' Macro1 Macro ' ' Keyboard Shortcut: Ctrl+a ' Sheets("5月転記").Select  ← 7月と入力した場合、自動的に5月転記となるように  Cells.Select Selection.Copy Sheets("7月成績").Select Cells.Select ActiveSheet.Paste Range("E5:F5").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False   ・・・・・・

  • エクセルのシートをコピーしたら、マクロが・・・

    こんにちは。 小さい図書室の運営をしている者です。 前回、こちらに質問を投稿したところ、とても役立つアドバイスを頂き、すぐに解決したので、今回も質問させていただきます。 今、図書の管理をすべてPCで行っています。 エクセルの「貸出管理」と言うブックで図書の貸出管理を行っています。 フィルタを使って図書の検索をした後、次に図書データを入力すべきセルにボタン一つで戻れるようにマクロを登録してあります。 このマクロを同じブック内の他のシートにコピーして使いたいのですが、コピーするとシートのテーブル名が変わってしまうためマクロでエラーが出てしまいます。 同じブック内の複数のシートでこのマクロを使う場合、いちいちシート名を変えなければならないのでしょうか?? もしくは、シートそれぞれに違うマクロを登録しなければならないのでしょうか?? ちなみに、登録されているマクロは次の通りです。 Sub 戻り() ' ' 戻り Macro ' ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=12 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=10 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=9 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=7 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=6 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=4 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=3 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=2 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=1 Range("テーブル2[貸出日]").Select Selection.End(xlDown).Select Selection.Offset(1, 0).Select End Sub この説明で分かって頂けますでしょうか?! どうか御回答お願いいたします!!

  • excelのマクロでrangeの選択がうまくいきません。

    excelのマクロでrangeの選択がうまくいきません。 以下のマクロをsheet2に書きました。testcopyは動きますが、testcopy2は動きません。なぜなのでしょうか。どうすればいいのでしょうか。それ以外のマクロの部分との関係から、cellsを使い、数字を使ってrangeの処理をしたいのです。よろしくお願いします。 Sub testcopy() Worksheets("sheet1").Range("B3:C10").Copy Worksheets("sheet2").Range("e5").Select ActiveSheet.Paste End Sub Sub testcopy2() Worksheets("sheet1").Range(Cells(3, 2), Cells(10, 3)).Copy Worksheets("sheet2").Range("e5").Select ActiveSheet.Paste End Sub

専門家に質問してみよう