Excel (VBA) |
![]() ![]() |
(Windows 11 Home : Excel 2019)
マクロの修正について(3シート除外したい)
投稿日時: 23/11/17 13:05:01
投稿者: りさこ
|
---|---|
下記マクロにおいて、★のつけてある2箇所
|
![]() |
投稿日時: 23/11/17 13:26:47
投稿者: simple
|
---|---|
> 止まってしまいます。
|
![]() |
投稿日時: 23/11/17 13:38:01
投稿者: りさこ
|
---|---|
実行時エラー '91!:
simple さんの引用: |
![]() |
投稿日時: 23/11/17 14:31:27
投稿者: simple
|
---|---|
回答ありがとうございます。
|
![]() |
投稿日時: 23/11/17 14:54:58
投稿者: Suzu
|
---|---|
simple さんの引用: 現状提示 コード 引用: に対し、 sh に対し判定を行っていますから If sh.Name <> "集約" And sh.Name <> "貼付用" And sh.Name <> "完了" Then とすべき所を、質問文の様に 引用: sh ではなく、WS を使用していると言う事。 WSは、1回目のループで使用しており そこを抜けていますから、既に Nothing になっている状態です。 同じ オブジェクトを扱うのに、別な変数を宣言し、使用しなくとも良いでしょう。 For Each sh In Worksheets If sh.Name <> "集約" And sh.Name <> "貼付用" Then ★ lastRow = sh.Cells(Rows.Count, 1).End(xlUp).Row を、 For Each WS In Worksheets If WS.Name <> "集約" And WS.Name <> "貼付用" And WS.Name <> "完了" Then lastRow = WS.Cells(Rows.Count, 1).End(xlUp).Row : 以下 sh を WS に書き換え を行っても良いでしょう。 WorkSheet オブジェクトのみならず、WorkBook オブジェクトも同様ですね。 |
![]() |
投稿日時: 23/11/17 16:49:00
投稿者: WinArrow
|
---|---|
コードの以外でのアドバイス
|
![]() |
投稿日時: 23/11/22 09:45:32
投稿者: りさこ
|
---|---|
日数が空いてしまい、回答いただいた方、申し訳ありません。
引用: |
![]() |
投稿日時: 23/11/22 11:48:06
投稿者: simple
|
---|---|
早速ご返事いただきました。(これで遠足終われますかね)
' lastRow = sh.Cells(Rows.Count, 1).End(xlUp).Row ' For i = 1 To lastRow ' sh.Range("A" & i & ":H" & i).Copy Destination:=貼付sh.Cells(cnt, "B") ' cnt = cnt + 1 ' Next iのところは、 lastRow = sh.Cells(Rows.Count, 1).End(xlUp).Row sh.Range("A1:H" & lastRow).Copy Destination:=貼付sh.Cells(Rows.cnt, "B").End(xlUp).Offset(1)のように書くとセル範囲を纏めてコピーペイストできます。 その他のところは詳細見ておりません。 Set WB = ActiveWorkbook より Set WB = ThisWorkbook が明確だと思いますし、 For Each sh In WB.Worksheetsのように統一し、念のためブックを指定したほうが可読性は高いかもしれません、 と言った事柄がありますが、本筋の話ではありません。 不明点があれば引き続きコメントしてください。 |
![]() |
投稿日時: 23/11/22 11:54:51
投稿者: Suzu
|
---|---|
引用: 何をどう試されて、うまくいかない のでしょうか? 提示されたコードは、質問時のコードとどこか変わっているのでしょうか? 先の回答の意図としては、 For Each sh In Worksheets If sh.Name <> "集約" And sh.Name <> "貼付用" Then を For Each sh In Worksheets If sh.Name <> "集約" And sh.Name <> "貼付用" And sh.Name <> "完了" Then としなきゃいけないのに、 質問文では If WS.Name <> "集約" And WS.Name <> "貼付用" And WS.Name <> "完了" Then としており、 sh とすべき を WS としているのはないの? と言う事。 実際には、sh に しているのだけど ・・ と言うなら 1. 具体的に こんな事を行いました。 2. 結果 こうでした。 3. 目的とここがちがいます。 こんなエラーになりました。 の様に、具体的に 動作を再現できる情報を 提示する様にしましょう。 わからない と ひとことでかたづけていらっしゃいますが、 ご自身で、コードがどんな動きをしているのか分からないと 希望通りに動かす為の確認ができませんよ。 どこに問題があるのか を 明らかにする方法として 各変数 に どんな 値・オブジェクトが 保存されているか (ワークシート オブジェクトなら、複数のワークシートが あると思いますが そのうちどのワークシートに対し 操作をおこなっているのか) を 確認する必要があります その方法はご存じでしょうか? 「VBA デバック方法」 をキーワードにWEB検索を行うと方法についての情報が得られますよ。 |
![]() |
投稿日時: 23/11/22 15:03:35
投稿者: りさこ
|
---|---|
できました!!!!
|
![]() |
投稿日時: 23/12/01 17:26:36
投稿者: WinArrow
|
---|---|
解決したならば、
|