• ベストアンサー

コードの一部がよく解かりません。

下記>部分の使い方がよくわかりませんので教えて下さいませ。 なくても動作しますが、 ありますと ↓ 「実行時エラー'9' インデックスが有効範囲にありません。」 となりますので、>部分も使用して正常に動作するには、どのようにすればよろしいでしょうか? よろしくお願い致します。 ------------------ Sub ワークシートの追加() ' 新規シート1枚を追加 ' Sheets.Add after:=Worksheets(Worksheets.Count), Count:=1 MsgBox "ワークシートの最後の後ろに1枚のシートを追加しました。" > Sheets("ワークシート").Select End Sub ------------------

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

>1、この部分の文字がいけないんでしょうか? そのブックには「ワークシート」という名前のシートはありますか? 無い場合は確実にエラーになります。 >2、また、この一行(>)は重要な役割があるのでしょうか? プログラムの内容によって違います。 新しいシートを追加すると、追加されたシートがアクティブになります。 別のシートをアクティブ(何らかの操作の対象)にしたい場合は、該当のコマンドが必要になります。

oshietecho-dai
質問者

お礼

納得致しました。 「ワークシート」という名前のシートはありませんでした。 どうも有難うございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 >>部分も使用して正常に動作するには、どのようにすればよろしいでしょうか? > Sheets("ワークシート").Select それは無理ですね。そんなシート名なんてありませんからね。 このようにすれば可能ですが。 Sheets.Add after:=Worksheets(Worksheets.Count) MsgBox "ワークシートの最後の後ろに1枚のシートを追加しました。" Sheets(Worksheets.Count).Select "ワークシート"っていうのが、一意なら、 Worksheets(Worksheets.Count).Name = "ワークシート" を加えればよいですが、もし、そうなら、一回きりです。

oshietecho-dai
質問者

お礼

早速のご回答どうも有難うございました。 ご説明が、非常によくわかりました。

全文を見る
すると、全ての回答が全文表示されます。
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

Sheets("ワークシート").Activate Select の場合使い方によっては失敗するので、 Activate にしてください。

oshietecho-dai
質問者

補足

早速、どうも有難うございます。 実行して見ましたが、結果が同じですが、 "ワークシート" 1、この部分の文字がいけないんでしょうか? 2、また、この一行(>)は重要な役割があるのでしょうか? よろしくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBA コード教えてください

    添付画像のように 配送日・出発地・目的地・運送会社・ドライバー の5つの列からなるデータがあります(sheet1) これは調べたい配送日でデータを抽出、さらに出発地>運送会社>ドライバーの順でソートをかけた物です 出発地ごとに分けたデータが欲しいという要望があり、下記のようなコードを作ってみました Sub filter() Worksheets("Sheet1").AutoFilterMode = False With Cells(3, 1) Worksheets.Add After:=Worksheets(Worksheets.Count) ActiveSheet.Name = "青森" .AutoFilter Field:=2, Criteria1:="青森" .CurrentRegion.Copy Destination:=Worksheets("青森").Cells(3, 1) Worksheets.Add After:=Worksheets(Worksheets.Count) ActiveSheet.Name = "秋田" .AutoFilter Field:=2, Criteria1:="秋田" .CurrentRegion.Copy Destination:=Worksheets("秋田").Cells(3, 1) Worksheets.Add After:=Worksheets(Worksheets.Count) ActiveSheet.Name = "岩手" .AutoFilter Field:=2, Criteria1:="岩手" .CurrentRegion.Copy Destination:=Worksheets("岩手").Cells(3, 1) Worksheets.Add After:=Worksheets(Worksheets.Count) ActiveSheet.Name = "宮城" .AutoFilter Field:=2, Criteria1:="宮城" .CurrentRegion.Copy Destination:=Worksheets("宮城").Cells(3, 1) End With Worksheets("Sheet1").AutoFilterMode = False End Sub これを実行すると青森・秋田・岩手・宮城のワークシートが作成され出発地ごとのワークシートの作成は出来ました しかし、日によっては出発地が無い日がある事があります そこでB列のデータを参照し、データが無い場合にはその出発地のワークシートは作成されないようにしたいと思いました これが思ったようにいかないのです どのようなコードを書けば、出発地データがある物だけワークシートを作成して個別のワークシートを作成させる事が出来るのでしょうか? よろしくお願い致します

  • 「 VBA の 宣言 」 がない場合の問題点は ?

    下記例で、 「 宣言 」 なしでも、現在のところ、問題は発生してませんが、 今後、「 宣言 」 がなかった場合の 「 問題点の例 」 を教えて下さいませ。 ------------------------------- Sub ブックA*の全シートをコピー() Dim Wb As Workbook '宣言 For Each Wb In Workbooks If Wb.Name Like "ブックA*.xls" Then With Workbooks("ブックB.xls") Wb.Worksheets _ .Copy after:=.Sheets(.Sheets.Count) End With End If Next Worksheets(Worksheets.Count).Activate MsgBox ActiveSheet.Index Worksheets("Sheet1").Select End Sub

  • VBA シート名重複した場合削除する

    教えてください。 VBAに関しての質問です。 全くの知識がないので教えていただきたいです。 エクセルワークシートに以下の機能を追加している状態です。 For Each ws In Worksheets If ws.Name = "データ" Then wsChkflg = True End If Next If wsChkflg = True Then ThisWorkbook.Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "データ" Else ThisWorkbook.Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "データ" End If Set wsNew = ThisWorkbook.Worksheets("データ") 「データ」というシートが作成、追加されるのですが、同じシート名で新規作成した時に エラーが出てしまいます。そのエラーを出さないようにすため、ダイアログ等も出さずに既存のシートを強制的に削除する機能を追加したいのです。 VBAの知識がなくて困っています。 何か良い方法がわかる方いらっしゃいましたらお力を貸してください。 よろしくお願いいたします。

  • ボタン操作で元の画面から移動してしまう

    マクロで下記の記録で操作しております。 別シートにフォームコントロールで追加のボタンをつくって操作したところ コピーしたシートへ画面が移ってしまいます。 どのように追加記録したらいいかお教え下さい。 VBAは初心者です。 Sub シートコピーして追加() myNumber = Worksheets.Count Sheets("マスター").Copy After:=Worksheets(Worksheets.Count) ActiveSheet.Name = myNumber - 2 End Sub

  • Excel VBAシートの同一番地のセルのリスト化

    別々のシートの同一番地のセルの値をリスト化するのにこのようなVBAを見つけました。 シートは追加せず、既存のシートを指定したくて、色々と書き換えをチャレンジしましたがうまくいきません。 既存のシートを指定し、この作業を行うにはどうしたらよいのでしょうか? ご教示いただけますと幸甚です。 Sub Test1() Dim TmpSheet As Worksheet, i As Integer i = Worksheets.Count Set TmpSheet = Worksheets.Add(After:=Sheets(Sheets.Count)) With TmpSheet For i = 1 To i .Cells(i, 1).Value = Worksheets(i).Name .Cells(i, 2).Value = Worksheets(i).Range("E5").Value Next End With End Sub

  • ほんの少し変更しただけで、マクロが正常動作しないのは?

    「てすと1」はきちんと、結果が反映されるが、 「てすと2」は、動作はするが、肝心のデータがコピーされません。 Range("B5", Range("B5").End(xlDown)) と、変更しただけです。 ただ、「てすと2」は、手動で Worksheets(i)をアクティヴにしておくと、きちんと結果が反映されます。 なぜなんでしょうか? 何卒、ご教授お願い致します。 Sub てすと1() Dim i As Integer   Windows("TEST.xls").Activate   Sheets.Add after:=Worksheets(Worksheets.Count), Count:=1 On Error Resume Next For i = 1 To Worksheets.Count - 1   Worksheets(i).Range("C:C").Copy _   Destination:=Worksheets(Worksheets.Count).Range("IV4").End(xlToLeft).Offset(0, 1).EntireColumn  Next i End Sub Sub てすと2() Dim i As Integer   Windows("TEST.xls").Activate   Sheets.Add after:=Worksheets(Worksheets.Count), Count:=1 On Error Resume Next For i = 1 To Worksheets.Count - 1   'Worksheets(i).Activate  '左記を追記すると、きちんと結果が反映される   Worksheets(i).Range("B5", Range("B5").End(xlDown)).Copy _   Destination:=Worksheets(Worksheets.Count).Range("IV4").End(xlToLeft).Offset(0, 1)  Next i End Sub

  • エクセルVBAについて

    Sub a() Sheets("Sheet1").Select End Sub Sub b() Worksheets("Sheet1").Select End Sub どちらコードもSheet1を選択しますが 「こちらを使うべき!」ってありますか? 独学のため、SheetsとWorksheetsの違いがわかりません。 ご教授よろしくお願いします。

  • Excel2002のVBAでワークシートの挿入で疑問

    VBAの勉強をし始めたばかりものものです。 ワークシートの数が10枚になるまでワークシートの挿入を繰り返すように、以下のVBAを作成しました。 Sub wsins() Dim i As Integer For i = Worksheets.Count To 10 Step 1 Sheets.Add Next End Sub しかし、上記の方法だと、ワークシートが11枚になってしまいます。 もちろん10のところを9にすることによって、ワークシートがトータルで10枚にはなるのですが、理由がわかりません。 勉強したばかりで、思い違いをしているのかと思いますが、教えていただけないでしょうか?よろしくお願いいたします。

  • エクセルVBAでSheet1.ActivateとSheet(n).Activate

    エクセル2000です。 VBAでの疑問点を教えてください。 Sub test1() Sheet1.Activate MsgBox ActiveSheet.Name End Sub これは問題なく作動します。 Sub test2() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheet(n).Activate MsgBox ActiveSheet.Name Next End Sub これは「SubまたはFunctionがていぎされていません」というエラーになります。 もちろん、 Sub test3() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheets(n).Activate MsgBox ActiveSheet.Name Next End Sub のように書けばOKなのは存じておりますが、これではSheet名に係らず、左から順番となってしまいます。 Sub test4() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheets("Sheet" & n).Activate MsgBox ActiveSheet.Name Next End Sub のように明確にシート名として記述すればOKなのですが、それでは、Test1のSheet1.Activate が通って、Sheet(n).Activate が通らないのはなぜでしょう? しょうもない質問でごめんさない。

  • 「 このコード 」 のチェック を お願い致します。

    下記コードは何とか動作しますが、チェックお願い致します。 1、 MsgBox "「 空白シート 」 は ありません。"    の    追加編集が、よくわかりません。 2、 1以外に、おかしな箇所をご教示お願い致します。 --------------------------- '「 ブック1 」 に空白シートがあったら、そこへ貼り付ける Sub 空白シートへコピー() Dim ws As Worksheet For Each ws In Workbooks("ブック1.xls").Sheets If IsEmpty(ws.UsedRange) = True Then Workbooks("ブック2.xls").Activate Cells.Select Selection.Copy Workbooks("ブック1.xls").Activate ws.Select Range("A1").Select ActiveSheet.Paste Else MsgBox "「 空白シート 」 は ありません。" End If Next End Sub

専門家に質問してみよう