• ベストアンサー

Arry関数または他の方法で手入力でなく自動でシートを選択したい

winXP Excel2003でマクロ作成している初心者です。 0)シート名は次のようになっています。  AAA会社 BBB会社 CCC会社・・・・以下10枚(増減あり)  集計用シート 印刷用シート リンク用シート 会社見本シートの4枚 1)全シート名が表示されるリストボックスを配置しました。  任意のシート名をクリックすると即座にその会社のデータ入力ができます。 2)さらに、一番右の会社見本シートを複写し、そのシート名をWWW会社に変更しAAA会社シートの前に追加できるようコマンドボタンを配しました。シート削除のボタンも併設しました。 3)このブックには次のコードが書いてあります。 Sub 請求書入力() Application.ScreenUpdating = False Dim list, SheetName list = Array("1.AAA", "2.BBB", "3.CCC", "5.DDD", "6.EEE", "7.FFF", "8.GGG", "9.HHH ", "10.III", "12.JJJ", "13.KKK") For Each SheetName In list Sheets(SheetName).Activate Call 請求書作成用部品 Next End Sub ここで会社見本シートを複写してWWWの会社を新規作成したとき、 list = Array("1.AAA", "2.BBB", "3.CCC",・・・・の部分を手入力で変更しないとindexエラーが発生してしまいます。このエラーが出ないようにし、ブックの全シート14枚のうち、集計用シート 印刷用シート リンク用シート 会社見本シートの4枚だけは選択されないようにしたいのです。 どのようにコードをかいたらよろしいでしょうか

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんにちは。 リストは固定化されたもの、最小限で済むものを優先させると良いですよ。 あとは、#2 ご回答のロジックのとおりです。 Array でもいいですけど、今回の用途なら定数の文字列で定義しておいて、 ワークシートコレクションをループさせ、InStr でシート名が上記定数 に含まれるか調べると楽です。 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 ただし、私ならブックの保護等でユーザーにシート名が変更されない という保障がない限り、シート名による分岐は余り使いません。多分 シートのコードネームの方を使うと思います。   ※コードネームは Excel 画面で目にみえるシート名とは別物です    VBE のプロパティーウインドウで確認できます。これは、任意    に変更できるものですが、VBE 画面からしか変更できません。 Sub 請求書入力2()   ' // 処理を除外するシートのコードネームリスト   Const EXCEPT_NAME = "shCalc shPrint shLink shTemplate"   Dim sh As Worksheet   For Each sh In ThisWorkbook.Worksheets     If InStr(EXCEPT_NAME, sh.CodeName) = 0 Then       sh.Activate       Call 請求書作成用部品     End If   Next End Sub ご参考までに。

aitaine
質問者

お礼

私のような超初心者にも良く理解できました。思っていることが完璧にできたコードでした。ありがとうございました。

その他の回答 (2)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

>For Each SheetName In Worksheets >'If文追加 >Sheets(SheetName).Activate >Call 請求書作成用部品 >'End If >Next にして、変数SheetNameが4つのシート以外の時に目的を実行するよう If文を作るとか?ではダメですかね。 (4つが決まっているのならば)

aitaine
質問者

お礼

なるほどIf文を作ることはかんがえもしませんでした。勉強になりました。 ありがとうございました。当地は激しい雷で昨日はやむなくPCつながずお礼が遅くなりもうしわけないです

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

質問文ばかり長くて、何を聞きたいのかがわかり難い (1)集計用シート以下4つのシートを指定しないArrayを作る (2)Ubound(list)-4までを処理を繰り返す ではダメなんですか。 焦点を絞って質問文をかけないですか?

aitaine
質問者

補足

もうしわけございません。 端的に再質問させていただきます。おっしゃるとおり (1)集計用シート以下4つのシートを指定しないArrayを作るということです。 現在は list = Array("1.AAA", "2.BBB", "3.CCC", ・・に固定されています。ので、シートを追加したときは list = Array("11.WWW", "1.AAA", "2.BBB", ・・にコードを修正しなければなりません。 やりたいことは、シートの追加・削除があったばあいでも「コード修正」によらず集計用シート以下4つのシートを指定しないArrayを作ることです。よろしくお願いします。(2)のUbound(list)-4までを処理を繰り返す・・・・これについては作ったことがないのでわかりません。 すいません。

関連するQ&A

  • 集計シートに自動で集計されるようにしたい

    シート1.1には、 日付 会社名 2014/1/1 AAA会社 2014/1/1 BBB会社 のようなデータが入っていて、 シート1.2には、 日付 会社名 2014/1/2 CCC会社 2014/1/2 DDD会社 のようなデータが入っています。 同じようにシート1.1から1.31まで、日付+会社名が入っています。 最後に集計シートに全ての日付のデータを転記しています。 フォーマットは同じです。 現在は手作業で集計シートに全ての日付のシートを一つずつコピーして貼り付けていますが 自動で行う方法はないでしょうか? VBAは禁止されています。 各シート毎、リスト化したり名前を付けてみたのですが、そこからどうすればいいでしょうか?

  • 別シートの値を検索して一致したものを合計する

    excelvba初心者です。 お手数おかけします。 難問なのかどうかもよく分からず。。困っています。 シート1       シート2   シート3 AAA 100     AAA 50      BBB 20 BBB 200   CCC 150   CCC 30 DDD 300   QQQ 250   DDD 10 EEE 400     WWW 350  RRR 40 上記の値を決められた順番に別シートに集計したい(その時に、値を1/10にしたい) シート4 AAA 150 BBB 220 CCC 180 DDD 310 EEE 400 FFF 0 GGG 0 www 350 findでAAAを検索し見つかった値を ifにて条件分岐させるものをつくったものの プロシャーシーが大きすぎと言われてできません。 どなたか教えていただけないでしょうか。

  • エクセルで入力するデータを別シートで集計する方法

    エクセル初心者です。 いままでの質問と重複しておりましたら申し訳ございません。 不定期に打込むデータを、別シートで集計したいと思っています。 イメージ下記のような感じです。 宜しくお願いします。 (1)〔Sheet1〕にランダムに打込む。 (2)〔Sheet2〕に個人別に集計 (2)点数10点満点で、8点以上が合格 (3)8点以上には1000円の金額が合計欄に加算 (4)8点以下には100円の金額が加算欄に加算 〔Sheet1〕 名前  点数 aaa   8 bbb   10 ccc   7 bbb   5 aaa   10 bbb   9 〔Sheet2〕 名前  合格   小計  不合格   小計   合計 aaa    2    2000    0       0    2000 bbb    2    2000    1      100   2100 ccc    0      0    1      100    100

  • Excel2002:複数条件のデータの個数の集計

    苦手な集計について質問させてください。 [A] [B] [1] AAA aaa [2] BBB bbb [3] AAA aaa [4] AAA bbb [5] BBB ccc 上記のようなデータで[A]と[B]のAND条件でみたときの個数を集計したいと思います。 例えば上記であれば、 [A]AAAかつ[B]aaa・・・2個 [A]BBBかつ[B]bbb・・・1個 [A]AAAかつ[B]bbb・・・1個 [A]BBBかつ[B]ccc・・・1個 になります。[B]のデータは[A]のデータに依存せず、[A]の各値にまたがっています。([B]bbbは[A]AAAと[A]BBBの場合があります) 実際のシートでは、全パターンを網羅したリストがA列とB列、集計対象がD列とE列にあります。 上記の例でいえば、以下のようになっています。 [A] [B] [C] [D] [E] [1] AAA aaa AAA aaa [2] AAA bbb BBB bbb [3] BBB bbb AAA aaa [4] BBB ccc AAA bbb [5] BBB ccc つまり[A]列と[B]列が組み合わせパターン、[D]列と[E]列が集計元データです。 ちなみにパターン数が414個、集計元データは29000個程度です。 そして最終的な各パターンの個数を[C]列に表示させたいと思います。 VLOOKUPやピボットテーブルを考えましたが、ピンと来ません。 適切なやり方を教えてください。よろしくお願いします。

  • Excel 条件に一致したセルの隣のセルを返す

    エクセル初心者です。どうかご指導ください。 シート1の処理1・処理2・処理3に、シート2で一致したコードの隣の値を返したいのですが可能でしょうか? シート1                 シート2 コード 処理1 処理2 処理3   コード  処理名  1   AAA               1   AAA  2   BBB AAA           2   BBB  3   BBB               3   BBB  4   CCC AAA           2   AAA  5                      4   CCC                         4   AAA

  • VBAで複数シート選択

    エクセルVBAで複数のシートを選択する場合、 Sheets(Array("AAA", "BBB", "CCC")).Select  と書くと思いますが、マクロを回してみないことにはシート名や枚数が特定できない場合、どのように記述したらいいのでしょうか? たとえば、新たに追加されたSheets(n)~Sheets(n+x)を選択するような場合です。 よろしくお願いします。

  • エクセルの入力規則で複数のリストを選択する方法

    ご教授をお願い致します。 エクセル2003を使っているのですが、 統計というファイルのA1のセルで入力規則を入れようとしています。 今現在、「AAA」というシートにリストを作っておき、(_1という名前で作成) 元の値を「=INDIRECT("_1")」とした、入力規則を作成しています。 今回、新しいシート「BBB」というシートを作成し、そこに新しいリストを作成を考えています。 AAAのシートもしくはBBBのシートにあるものをドロップダウンリストとして 管理のA1で選べるようにするということはできるのでしょうか。 説明の仕方がうまくいきませんが、どなたかご教授をお願い致します。

  • エクセルで他シートの同名セルと比較して条件付き書式設定

    初心者で式はあっているような気がするのですがどうしても色がついてくれません。助けてください。 Book1のsheet1 1 aaa 2 bbb 3 ccc Book2のsheet1 A B 1 aaa ちなみにaaaとbbbはBook1のsheet1をVLOOK UPで読ませています 2 bbb 3 eee Book2のsheet1のaaaとbbbを条件付き書式設定で色をつけたいのですが うまくつきません。 式は=VLOOKUP(A1,INDIRECT("[Book1.xls]Sheet1!$A$1:$B$5"),2,FALSE) と入れました。助けてください。

  • セルの値に応じて数式を入力するシートを変えたい

    シート名が 「aaa」 「bbb」 「ccc」 「ddd」 という4つのシートがあります。 シート「aaa」のD4セルに入力した値(シート名)に応じて、 (上記で設定したシート)のF7セルに "=SUM(F5:F6)"という数式を入力したいのですが、 おわかりの方がいらっしゃいましたらご教授いただければ幸いです。 例) シート「aaa」のD4セルに「ccc」と入力して実行すると、 シート「ccc」のF7セルに「=SUM(F5:F6)」の数式を入力するマクロを作成したい。 (シート「aaa」のD4セルに「ddd」と入力して実行すると、 同様に、シート「ddd」のF7セルに数式をマクロで入力したい)

  • 【VBA】シートの内容を別シートへ転記する方法

    1シート目のA列には品番が沢山並んでおり、B列、C列に内訳、D列に合計が有ります。例)参照 下記の処理をしたいです。 ------------------------------------------------------------------- 2シート目へ1行目の見出しとAAAの品番の行を転記 3シート目へ1行目の見出しとBBBの品番の行を転記 同様に、A列最終行迄繰り返しシートを作成 ------------------------------------------------------------------- A列の品番が変わる行迄を一まとまりとして行選択する方法にて コードをお教え頂きたく、宜しくお願いします。お教え頂いた内容は理解する様努めます。 例) 内訳1 内訳2 合計 AAA ○○○ ○○○ ○○○ AAA ○○○ ○○○ ○○○ BBB ○○○ ○○○ ○○○ BBB ○○○ ○○○ ○○○ CCC ○○○ ○○○ ○○○ CCC ○○○ ○○○ ○○○ DDD ○○○ ○○○ ○○○ DDD ○○○ ○○○ ○○○ DDD ○○○ ○○○ ○○○ 以下略

専門家に質問してみよう