• ベストアンサー
  • すぐに回答を!

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

  • 質問No.5495643
  • 閲覧数137
  • ありがとう数1
  • 気になる数0
  • 回答数6
  • コメント数0

お礼率 44% (152/341)

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枚あります。
そのためには、どういうコードにしたらよろしいでしょうか。

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

  • 回答No.6
  • ベストアンサー

ベストアンサー率 74% (396/532)

#たびたび申し訳ございません。

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

お礼率 44% (152/341)

できましいtった。ありがとうございます。これでやっと枕をたかくして寝ることができますありがとう
投稿日時:2009/12/04 00:08

その他の回答 (全5件)

  • 回答No.5

ベストアンサー率 74% (396/532)

 DOUGLAS_ です。

>実はこの2枚のシートはころころと名前がかわるので、文字列で指定できないのです。
>それで悩んでいるのですが・・・
 それは、ご質問文の中に記載していらっしゃいますので、存じております。

 肝心なのは、ご質問文の中にお書きの「上のシート」という ワークシート でして、「上のシート」という シート が特定できているのでしたら、
Worksheets("上のシート")
の中の「"上のシート"」の部分を、その シート名 に変えていただければ結構ですよ! と申しているのです。

 「上のシート」が特定できていないようでしたら、「~~の前にある2枚のシート」はなおさら特定できません!

 このような問題の場合は、「動かないものは何か」をよく吟味していただいて、その条件をご呈示ください。
補足コメント
aitaine

お礼率 44% (152/341)

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

ベストアンサー率 74% (396/532)

[回答番号:No.1・3] の DOUGLAS_ です。

>今実行しましたら「インデックスが有効範囲にありません」とでました。
 まさかとは思いますが、「("上のシート")」という記述をそのままコピペして試されたのではないでしょうね?

 aitaine さんが
>上のシートの前にある2枚のシートだけ関数を入れないようにしたい
とお書きですので、
Worksheets("上のシート")
というような表現にしておりますが、「("上のシート")」の部分には、ワークシート の実際の名前をお書きください。
補足コメント
aitaine

お礼率 44% (152/341)

そのまさかのことをしてしまいました。
実はこの2枚のシートはころころと名前がかわるので、文字列で指定できないのです。それで悩んでいるのですが・・・
投稿日時:2009/12/03 22:26
  • 回答No.3

ベストアンサー率 74% (396/532)

[回答番号: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

お礼率 44% (152/341)

今実行しましたら「インデックスが有効範囲にありません」とでました。
投稿日時:2009/12/03 22:16
  • 回答No.2

ベストアンサー率 28% (4493/16009)

大勢一般のシートに対して行う処理を、避けたいシートがあるということか。処理を避けるシートのメルクマール(区別)は何か。質問に書かないで、質問しても回答者や読者には判らないよ。
そういう質問ではないの。
ーー
エクセル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

お礼率 44% (152/341)

せっかく丁寧なご回答いただきましたが、現在の私の力では理解しがたく、恐縮でもうしわけありません。
たとえば、

Dim t As Integer, i As Integer
t = Sheets.Count - 7
i = Sheets.Count - 8

Const EXCEPT_NAME = "表紙 経理 一覧  部門" & _
" " & Worksheets(t).Name & _
" " & Worksheets(i).Name
というようなコードをつくりたいのですが・・・。うまくいきません。
定数式が・・のエラーがでます。
投稿日時:2009/12/03 22:02
  • 回答No.1

ベストアンサー率 74% (396/532)

こういうことでしょうか?

Dim EXCEPT_NAME As String
EXCEPT_NAME = "表紙 経理 一覧  部門" & _
 " " & Worksheets("上のシート").Previous.Name & _
 " " & Worksheets("上のシート").Previous.Previous.Name
補足コメント
aitaine

お礼率 44% (152/341)

このコードを上書きし実行したところ、コンパイルエラー 定数式が必要です。となりました。 定数式がよくわかりません。お願いします。
投稿日時:2009/12/03 21:44
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ