- ベストアンサー
配列に使う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
- みんなの回答 (12)
- 専門家の回答
質問者が選んだベストアンサー
Const EXCEPT_NAME = "集計用 印刷用 リンク用 会社見本" をグローバルにして、 list = Array("AAA会社", "BBB会社", "CCC会社", "DDD会社", "EEE会社", ・・以下略") を削除して、 配列ルーチンを呼ぶループを For Each SheetName In ThisWorkbook.Worksheets If InStr(EXCEPT_NAME, SheetName.Name) = 0 Then Sheets(SheetName).Activate Call 配列 End If Next とするではダメなんでしょうか。
その他の回答 (11)
- n-jun
- ベストアンサー率33% (959/2873)
> For Each sh In ThisWorkbook.Worksheets ここでBook内の全てのワークシートを対象としているはずですが、 >list = Array("AAA会社", "BBB会社", "CCC会社", "DDD会社", "EEE会社", ・・以下略") の >部分を手修正でなく、追加削除にも対応できるように指定シート以外を選択したいのですがうまくいきません。 この部分がよく分かりません。 4つのシートが固定されているのなら、それ以外が追加・削除されても 問題ないように思えるのですが。。。 何らかの問題があるなら、そこを具体的にされては?
補足
現在の状況をご説明申し上げます。Aブックのコマンドボタンクリック→請求書作成ブック開く →ユーザーフォームのリストボックス開く→リストボックスにはシート名(会社名)が表示されます。 (必要のない一覧表シート名 リンクシート名までも表示されていますが、・・)クリックすると、その会社のシートに飛びます。 Aブックには他に見積作成ブックとか多くの他の業務に飛ぶコマンドボタンがあり、すべてAブックに プロシージャが書かれています。 ところが、この請求書作成ブックには次のコードがありますので Sub 請求書作成() Dim list, SheetName list = Array("AAA会社", "BBB会社", "CCC会社",・・・以下略") --- ---'このブック内の集計用シート 印刷用シート リンク用シート 会社見本シートの4枚だけは請求書作成とは無関係なのでArrayには含まない For Each SheetName In list Sheets(SheetName).Activate Call 請求書作成用部品 Next End Sub シートが追加されたり削除した場合は、list = Array("AAA会社", "BBB会社", "CCC会社",・・・以下略")の 部分を変更する必要があります。そこで教えていただいたのが前述のコードです。今までのように手修正が不要になり助かっています。 ところが、これをAAA会社からZZZ会社までの集計用一覧表を作成するため現在のマクロコードをいろいろ修正しましたがエラー続出で困っています。できればコードをどう書いたらいいか教えていただきたいのです。
- 1
- 2
補足
Const EXCEPT_NAME = "集計用 印刷用 リンク用 会社見本" をグローバルにして、-----と書いてありますが具体的にどうすればよろしいでしょうか? すいません。