特定のシートだけ関数入力を除外したい

このQ&Aのポイント
  • windows7 Excel2007でマクロ作成中の初心者です。30枚のシートがあるブックがあります。特定のシートだけ関数の入力を除外する方法について教えてください。
  • 質問者はwindows7 Excel2007でマクロ作成中の初心者です。ブックには30枚のシートがあり、特定のシートだけ関数の入力を除外したいと考えています。また、除外するシート名が可変のため、どのようなコードを記述すればよいか教えてください。
  • windows7 Excel2007でマクロ作成中の初心者です。30枚のシートがあるブックがあります。特定のシートだけ関数の入力を除外する方法を教えてください。また、除外するシート名が可変で、その数は15枚から20枚です。
回答を見る
  • ベストアンサー

特定のシートだけ関数入力を除外したい

windows7 Excel2007でマクロ作成中の初心者です。 30枚のシートがあるブックがあります。 以下のコードで処理を行っていました。 Sub 請求書入力() Const EXCEPT_NAME = "表紙 経理 一覧  部門" Application.ScreenUpdating = False ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path Dim list, SheetName For Each SheetName In ActiveWorkbook.Worksheets If InStr(EXCEPT_NAME, SheetName.Name) = 0 Then Sheets(SheetName.Name).Activate Call 各シートに同じ関数を入れる End If Next End Sub しかし、上のシートの前にある2枚のシートだけ関数を入れないようにしたいです。この2枚だけはシート名が可変のため除外シートに追加できません。 また、それより、前のシートはシート数が可変で15から20枚あります。 そのためには、どういうコードにしたらよろしいでしょうか。

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

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.6

#たびたび申し訳ございません。 imogasi さんの [回答番号:No.2] に対する「補足」で >Dim t As Integer, i As Integer >t = Sheets.Count - 7 >i = Sheets.Count - 8 とお書きですが、ひょっとして、「30個ある ワークシート の中の、後ろから数えて、8番目と9番目の ワークシート を除外したい」ということですか?  そういうことでしたら、 Const EXCEPT_NAME = "表紙 経理 一覧  部門" の行の替わりに Dim EXCEPT_NAME As String EXCEPT_NAME = "表紙 経理 一覧  部門" & _  " " & Worksheets(Sheets.Count - 7).Name & _  " " & Worksheets(Sheets.Count - 8).Name でいけるかと存じますが...。

aitaine
質問者

補足

できましいtった。ありがとうございます。これでやっと枕をたかくして寝ることができますありがとう

その他の回答 (5)

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.5

 DOUGLAS_ です。 >実はこの2枚のシートはころころと名前がかわるので、文字列で指定できないのです。 >それで悩んでいるのですが・・・  それは、ご質問文の中に記載していらっしゃいますので、存じております。  肝心なのは、ご質問文の中にお書きの「上のシート」という ワークシート でして、「上のシート」という シート が特定できているのでしたら、 Worksheets("上のシート") の中の「"上のシート"」の部分を、その シート名 に変えていただければ結構ですよ! と申しているのです。  「上のシート」が特定できていないようでしたら、「~~の前にある2枚のシート」はなおさら特定できません!  このような問題の場合は、「動かないものは何か」をよく吟味していただいて、その条件をご呈示ください。

aitaine
質問者

補足

関数を入れたくないシートが経理というシートの前にあるので Dim EXCEPT_NAME As String EXCEPT_NAME = "表紙 経理 一覧  部門" & _  " " & Worksheets("経理").Previous.Name & _  " " & Worksheets("経理").Previous.Previous.Name として何回も実行したところ、またまたインデックスが有効範囲にありません。とでます。あああわからないです。

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.4

[回答番号:No.1・3] の DOUGLAS_ です。 >今実行しましたら「インデックスが有効範囲にありません」とでました。  まさかとは思いますが、「("上のシート")」という記述をそのままコピペして試されたのではないでしょうね?  aitaine さんが >上のシートの前にある2枚のシートだけ関数を入れないようにしたい とお書きですので、 Worksheets("上のシート") というような表現にしておりますが、「("上のシート")」の部分には、ワークシート の実際の名前をお書きください。

aitaine
質問者

補足

そのまさかのことをしてしまいました。 実はこの2枚のシートはころころと名前がかわるので、文字列で指定できないのです。それで悩んでいるのですが・・・

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.3

[回答番号:No.1] の DOUGLAS_ です。 >このコードを上書きし実行したところ Const EXCEPT_NAME = "表紙 経理 一覧  部門" & _  " " & Worksheets("上のシート").Previous.Name & _  " " & Worksheets("上のシート").Previous.Previous.Name とされたのでしたら × です。 Const EXCEPT_NAME = "表紙 経理 一覧  部門" の行の替わりに Dim EXCEPT_NAME As String EXCEPT_NAME = "表紙 経理 一覧  部門" & _  " " & Worksheets("上のシート").Previous.Name & _  " " & Worksheets("上のシート").Previous.Previous.Name とするという意味でした。 [Const ステートメント] は >リテラル値の代わりに使う定数を宣言します。 と ヘルプ に書いてあるでしょう。

aitaine
質問者

補足

今実行しましたら「インデックスが有効範囲にありません」とでました。

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

大勢一般のシートに対して行う処理を、避けたいシートがあるということか。処理を避けるシートのメルクマール(区別)は何か。質問に書かないで、質問しても回答者や読者には判らないよ。 そういう質問ではないの。 ーー エクセルVBAでのシートの識別の原理論に立ち返ること。 1.名前 Arrayで複数指定できる 2.インデックス番号 番号で何々から何々と複数指定できる 3.AcactiveSheet 4.Next 5.Previous 6.(操作者が)選択したシート 複数指定・不定指定が前提 Sub test01() Dim sh As Worksheet For Each sh In ActiveWindow.SelectedSheets MsgBox sh.Name Next End Sub 7.1の亜種だが、シートのセルにシート名を指定。  ファイル(例テキストファイル)などにファイル名を記憶   プログラムコードの中にシート名を組み込み(配列など)。 8.以上もれているものもあるかもしれないが、これ以外は少数だろう。 これらを使って、どう表すか、質問者が考えないと。

aitaine
質問者

補足

せっかく丁寧なご回答いただきましたが、現在の私の力では理解しがたく、恐縮でもうしわけありません。 たとえば、 Dim t As Integer, i As Integer t = Sheets.Count - 7 i = Sheets.Count - 8 Const EXCEPT_NAME = "表紙 経理 一覧  部門" & _ " " & Worksheets(t).Name & _ " " & Worksheets(i).Name というようなコードをつくりたいのですが・・・。うまくいきません。 定数式が・・のエラーがでます。

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

こういうことでしょうか? Dim EXCEPT_NAME As String EXCEPT_NAME = "表紙 経理 一覧  部門" & _  " " & Worksheets("上のシート").Previous.Name & _  " " & Worksheets("上のシート").Previous.Previous.Name

aitaine
質問者

補足

このコードを上書きし実行したところ、コンパイルエラー 定数式が必要です。となりました。 定数式がよくわかりません。お願いします。

関連するQ&A

  • 最終シートからその手前まで5シートの選択したい

    最終シート名が「基本」、その前が「種別」、さらにその前が「一覧」と言うシート名になっています。 またその「一覧」の前2ケは、シート名をindexで指定したいです。 以下のコードを実行してもうまく、シートを除外してくれません。どうしたらよろしいでしょうか。 Sub 各シートに関数を入力() Dim EXCEPT_NAME As String EXCEPT_NAME = " 一覧  種別  基本" & Worksheets(Sheets.Count - 4).name & Worksheets(Sheets.Count - 5).name Application.ScreenUpdating = False ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path Dim list, sheetName For Each sheetName In ActiveWorkbook.Worksheets If InStr(EXCEPT_NAME, sheetName.name) = 0 Then Sheets(sheetName.name).Activate ActiveSheet.Unprotect Call 関数貼付 End If Next End Sub

  • プロシージャの呼び出しの分岐について

    Excel2000 Win2000でマクロ作成中の超初心者です。 請求書入力マクロですが、修正したいところがあります。 各シートのセルA10が、空欄のシートと、"個人"と記入してあるシートが混在しています。 これを、空欄の場合は Call 作成部品、 個人と記入してあるときは Call 作成部品2 と分岐して プロシージャを呼びだししたいのですが、コードをどう修正すればよろしいでしょうか。 修正前のコード Sub 請求書入力() Const EXCEPT_NAME = "表紙 印刷" Application.ScreenUpdating = False ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path Dim list, SheetName For Each SheetName In ActiveWorkbook.Worksheets If InStr(EXCEPT_NAME, SheetName.Name) = 0 Then Sheets(SheetName.Name).Activate Call 作成部品 End If 'ActiveSheet.Protect Next End Sub

  • 除外シートの連続印刷をしたい

    Vista SP1 Excel2000でマクロを作成中の超初心者です。 マクロコードの修正でエラー続出。四苦八苦しています。どうぞお助けください。 ---------------------------------------------------------------------------- イ)現在使用しているマクロを次のように修正したい。 (1)表紙.xls に次のコードを追加する。     Public Const EXCEPT_NAME = "一覧表, 印刷1, データ集, 請求見本" (2)表紙.xls の次のコードを削除する。    '開始   mySh = Array("A会社", "B会社", "C会社", "D会社",・・・ZZ会社") (3)代わりに、次のコードを使用する。  For Each SheetName In ActiveWorkbook.Worksheets 'すべての会社シートをアクティブにする  If InStr(EXCEPT_NAME, SheetName.Name) = 0 Then  Sheets(SheetName.Name).Activate ------------------------------ ア)現在の状況   デスクトップにAAフォルダがあります。その中身は     1)表紙.xls------コード記述用(シート名は「表紙」1枚のみ)     2)BBフォルダ       請求書.xls-----             シート名(1)A会社, B会社, C会社, D会社,・・・ZZ会社                (2)一覧表, 印刷1, データ集, 請求見本-----このシートは印刷しない。 イ)現在使用しているマクロ Sub 請求書連続印刷()  Application.ScreenUpdating = False  ChDrive ThisWorkbook.Path  ChDir ThisWorkbook.Path Workbooks.Open (ThisWorkbook.Path & "\BBフォルダ\請求書.xls") Worksheets("印刷1").Activate Dim mySh As Variant Dim i As Long '請求印刷面のデータの削除 Worksheets("印刷1").UsedRange.Clear '開始 mySh = Array("A会社", "B会社", "C会社", "D会社",・・・ZZ会社") For i = LBound(mySh) To UBound(mySh) Worksheets(mySh(i)).Unprotect 'プロテクトを外す Call 印刷時削除項目 Worksheets(mySh(i)).Range("A1:Q44").Copy _ Worksheets("印刷1").Cells((i + 1) + 43 * i, 1) Worksheets(mySh(i)).Protect 'プロテクトを掛ける Next Application.CutCopyMode = False Worksheets("印刷1").PrintPreview Application.CutCopyMode = False ActiveWorkbook.Close False

  • 配列に使うArry関数について

    winXP Excel2003でマクロ作成している初心者です。 1)指定した4個のシート以外を選択するコードを教えていただきました。  これを利用して list = Array("AAA会社", "BBB会社", "CCC会社", "DDD会社", "EEE会社", ・・以下略") の 部分を手修正でなく、追加削除にも対応できるように指定シート以外を選択したいのですがうまくいきません。 どうかお助けください。 ーーーーーーーーーーーーーーーーーーーーーーーーーーー 教えていただいたコード Sub 請求書入力()   ' // 処理を除外するシート名リスト   Const EXCEPT_NAME = "集計用 印刷用 リンク用 会社見本"   Dim sh As Worksheet   For Each sh In ThisWorkbook.Worksheets     If InStr(EXCEPT_NAME, sh.Name) = 0 Then       sh.Activate       Call 請求書作成用部品     End If   Next End Sub ーーーーーーーーーーーーーーーーーーーーーーーーーー 現在のマクロコード Sub 請求一覧表作成() Application.ScreenUpdating = False ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path Call BookOpen("請求書入力.xls") Dim list, SheetName Sheets("請求一覧表").Select Range("A4:U15").Select Selection.ClearContents Range("A4").Select list = Array("AAA会社", "BBB会社", "CCC会社", "DDD会社", "EEE会社", ・・以下略") ↑この部分はシートの追加・削除の度に手修正している。 For Each SheetName In list Sheets(SheetName).Activate Call 配列 Next Worksheets("請求一覧表").Activate ActiveSheet.Protect End Sub ーーーーーーーーーーーーーーーーーーーーーーー Sub 配列() With ActiveSheet ' 配列に格納 -- Dim i As Integer Dim LastRow As Long Dim SaleAry As Variant ' 配列に格納 -- SaleAry = Array(.Range("C8"), .Range("D13"), .ange("T30")・・・以下略)) End With ' 転記 --- With Worksheets("請求一覧表") LastRow = .Range("A65536").End(xlUp).Row For i = 0 To UBound(SaleAry) .Cells(LastRow + 1, i + 1).Value = SaleAry(i) Next i End With Set SaleAry = Nothing End Sub

  • サーバーに保存したエクセルファイルでChDrive、ChDirがエラーになる

    ひとつのフォルダにエクセルブックを6個置います、日常のデータ入力をする、メインのブックに 他ブックをオープンするコードを、以下のように書いています。 Sub 他ブックオープン1() Application.ScreenUpdating = False ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path ブック名 = "○○.xls" For Each myBook In Workbooks If myBook.Name = ブック名 Then Workbooks("○○.xls").Activate Exit Sub End If Next Workbooks.Open ("○○.xls") Application.ScreenUpdating = True End Sub この、フォルダをサーバーに置いて、クライアントのパソコンから 上記コードを実行すると、実行時エラー "プロシージャの呼び出し、または引数が不正ですとなり、うまく 行きません、デバッグ画面でChDrive,ChDir に示される、アドレスを みると、正しく\\○○サーバー\...と表示されます、どうしてこの アドレスを認識しているのに、エラーが出るのかわかりません どなたか宜しくご教示願います。

  • 複数のブックの特定シートを1つのブックにまとめたい

    複数のブックの特定のシートを1つのブックにまとめたいのですが そのマクロは下記のように検索してでてきたのですが Sub test() Dim Fname As String Dim Wbm As Workbook Dim Wbs As Workbook Application.ScreenUpdating = False Set Wbs = ThisWorkbook Fname = Dir(ThisWorkbook.Path & "\*.xlsx*") Do While Fname <> "" If Fname <> ThisWorkbook.Name Then Workbooks.Open ThisWorkbook.Path & "\" & Fname Set Wbm = ActiveWorkbook Wbm.Worksheets("2016.03").Copy after:=Wbs.Worksheets(Wbs.Worksheets.Count) ActiveSheet.Name = Left(Fname, InStr(Fname, ".") - 1) Wbm.Close End If Fname = Dir() Loop Application.ScreenUpdating = True End Sub たとえば、特定のシートというのが毎回変わる場合今回は”2016.03"ですが 次回は”2016.04”という風に変わる時、どこかに入力したセルの値を元にシートを検索してくることなどは可能なのでしょうか? よろしくお願い致します。

  • 最初の1回のみにボタンクリックでマクロ実行する

    Excel2007でマクロ作成中の初心者です。 1)Aブックに次のマクロを書いてます。 Sub データをクリアする() Dim list, SheetName Const EXCEPT_NAME = "計算 番号 明細" For Each SheetName In ActiveWorkbook.Worksheets If InStr(EXCEPT_NAME, SheetName.name) = 0 Then Sheets(SheetName.name).Activate クリア範囲 End If Next End Sub -------------------------------- Sub クリア範囲() Range("AM13:AQ13").Select Selection.ClearContents End Sub 2)上のマクロは、Bブック上で実行します。 Bブックのマクロ実行は、最初のボタンクリック1回のみです。 (このBブックが閉じられ保存されるまで) なぜなら、クリアした部分に、新しいデータを入れるからです。 誤って2回目のボタンクリックでも、マクロ実行しないようにしたいです。 せっかく入力した新しいデータを消去しないためです。 このようなコマンドボタンを作るにはどうしたらよろしいでしょうか?

  • ユーザ定義関数がうまく動きません。

    ユーザ定義関数がうまく動きません。 2月のA1セル値が1になっていたりします。 どこがおかしいのかわかりません。解決方法を教えていただけませんでしょうか。 よろしくお願いします。 【シートの設定】 シート名は1月・・・12月です。 各シートの A1セルは「=sheetname()」 B1セルは「月のチェックシート」 が入っています。 【VBAの設定】 Function SheetName() As String 'Application.Volatile If Len(ActiveSheet.Name) = 3 Then SheetName = Left(ActiveSheet.Name, 2) Else SheetName = Left(ActiveSheet.Name, 1) End If End Function

  • シートが表示された時にメッセージを表示したい

    win7・Excel2007でマクロ作成中の初心者です。 1)今ブック2個があります。 2)ひとつは、ブックAでマクロ書き込み用です。 3)もひとつは、ブックBで、データ作業用です。 4)やりたい事は、ブックAのユーザーフォームのコマンドボタンクリックで  ブックBのシートCを表示させ、メッセージボックスを即座に表示させたいです。 5)そこで、ブックAにコードを書込みました。 Private Sub CommandButton89_Click() Unload Me 表を開く End Sub ----------------------------------------- Sub 表を開く() ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path On Error GoTo err: Workbooks("H25年11月の表.xls").Activate Exit Sub err: Workbooks.Open Filename:=ThisWorkbook.Path & "\綴り\H25年11月の表.xls" Sheets("確定").Select MsgBox "これを更新してください。" End Sub ところが、シートCを表示させてから、メッセージボックスを表示させたいのに Private Sub CommandButton89_Click() Unload Me こんなところで(この段階で)、メッセージボックスが出てきてしまいます。 表を開く ここで出したいです。 End Sub シートを開いてからメッセジボックスを開くにはどうしたらよいでしょうか?よろしくお願いします。

  • リストボックスからシートを選びアクティブにしたい

    Excel2007でマクロ作成の初心者です。 リストボックスで選択した、リスト項目のワークシートを表示したいのですが、 「インデックスが有効範囲にありません」というエラーがでます。 どうしたらよろしいでしょうか? よろしくお願いします。 ’-------------------------------- Private Sub 顧客リスト_Click() With 顧客リスト Worksheets(.list(.ListIndex - 0)).Activate’----ここでエラー発生します End With End Sub ----------------------------- Private Sub UserForm_Initialize() Workbooks("請求.xls").Activate Dim i As Integer Const EXCEPT_NAME = "経理●一覧●基本●" For i = 1 To Worksheets.Count If InStr(EXCEPT_NAME, Worksheets(i).Name & "●") = 0 Then 顧客リスト.AddItem i & " " & Worksheets(i).Name End If Next i End Sub ’---------------------------