Excel2002のVBAでワークシートの挿入で疑問
- VBAを使ってExcel2002でワークシートを挿入する方法について疑問があります。
- 上記のVBAコードを使ってワークシートを挿入すると、ワークシートが11枚になってしまいます。
- 勉強したばかりで理由がわからないので、どこが間違っているのか教えていただけませんか?
- ベストアンサー
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枚にはなるのですが、理由がわかりません。 勉強したばかりで、思い違いをしているのかと思いますが、教えていただけないでしょうか?よろしくお願いいたします。
- omusupa
- お礼率86% (350/406)
- オフィス系ソフト
- 回答数3
- ありがとう数3
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Sub シート() Dim i As Integer i = Worksheets.Count Do Until i = 10 Sheets.Add i = i + 1 Loop End Sub これではどうでしょうか?もっとスマートな方法があるかもしれませんが・・・。
その他の回答 (2)
- komkoma
- ベストアンサー率33% (7/21)
たびたびすみません。下記のような方法もありますね。 Sub シート() Dim a As Integer a = 10 - Worksheets.Count Sheets.Add Count:=a End Sub
お礼
Count:=a がまだ理解できていないようですので、勉強しなおします。 本当にありがとうございました。
- komkoma
- ベストアンサー率33% (7/21)
For i = Worksheets.Count To 10 Step 1では、iが10になった直後に、もう一度Sheets.addを実行してしまうからですね。
補足
なるほどわかりました。 では、10という数字を使って、記述するにはどのようにすればよいでしょうか? お手数ですが、教えていただけませんか?よろしくお願いいたします。
関連するQ&A
- 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
- ベストアンサー
- Excel(エクセル)
- ワークシート上のチェックボックスのチェックをカウント
こんにちは EXCELのVBAに関する質問なのですが ワークシート上に配置したチェックボックス(コントロールツールボックス) で各シートのCheckbox1にチェックが入っている数を数えたいのですが 下記のように書いたところエラーが出ました。 何かよい改善案ご存知の方いらっしゃいませんか? よろしくお願いいたします。 Sub test() Dim myst As Worksheet Dim yes As Integer, myct As Integer myct = ThisWorkbook.Sheets.Count Worksheets.Add after:=Sheets(myct) Sheets(myct + 1).Name = "syuukei" For Each myst In Worksheets On Error GoTo elabel If ThisWorkbook.myst.CheckBox1.Value = True Then yes = yes + 1 End If elabel: Next with worksheets("syuukei") .range("a2")="YESの合計" .range("b2")=yes end with End Sub
- ベストアンサー
- Visual Basic
- VBA 複数シート選択について
Sub test() Dim i As Integer i = ActiveWorkbook.Worksheets.Count Worksheets(Array(2, i)).Select End Sub シート2とシートi の選択ではなく、2~iまでの複数シート を選択するにはどのように書くのかご教示下さい。
- ベストアンサー
- オフィス系ソフト
- 行数分をワークシート挿入する
こんにちわ。 名簿を作っています。 Sheet1に管理番号、住所、名前等のデータがあります。 <Sheet1> 管理番号 住所 名前 電話番号 S0001 東京都・・・ ●山●子 XX-XXXX-XXXX S0002 神奈川県・・・ ●田●男 XXX-XXX-XXXX S0003 埼玉県・・・ ●川●子 XXXX-XXX-XXXX この住所録を、各シートにコピーをしようと考え、管理番号をシート名にして、行数分のワークシートを増やそうと思っています。 下記のVBAを作成してみたのですが、空のワークシートが最初のS0001(ワークシート1つ分)しか作成されません。 Sub 住所録() Dim iRow as Variant iRow = 1 Do Until Cells(iRow, 1).Value = "" ActiveWorkbook.Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = Cells(iRow + 1, 1) iRow = iRow + 1 Loop Sheets("Sheet1").Select Range("A1").Select End Sub Sheet1のデータ行数分、シートを増やすにはどのようにしたらよいでしょうか。 住所録は都度増えていきます。 どなかたご教示願います。 よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- シート名変更マクロ
「1」というシートのH4にコピー数を入力し、「1」の後ろに挿入するマクロがあります。できたシートの名前は「1(2)」「1(3)」となってしまいます。このシート名を挿入した数の通し番号(「2」「3」に変更することはできるのでしょうか?挿入するシートの数は決まっていません。 Sub シートのコピー() Dim i As Integer Dim n As Integer n = Worksheets("1").Range("H4").Value For i = 1 To n Worksheets("1").Copy Before:=Worksheets(Sheets.Count) Next i End Sub
- ベストアンサー
- オフィス系ソフト
- Excel2010 VBA終了時に強制終了する
Excel2003、2007で実行した場合は正常終了するが Excel2010で実行するとVBA終了時に強制終了します。 処理は、マクロありブックからマクロなしブックを作成するために、 新規ブックを作成しマクロありブックからシートを移動する処理です。 VBA起動は、フォームコントロールから行っています。 VBA終了時に(End Sub)後にEXCELがなぜか強制終了します。 (Microsoft Excel は動作を停止しました。のメッセージが表示される) なお、 ・フォームコントロールから実行した場合はEXCELが強制終了し、 デバックモードで実行した場合は強制終了しません。 ・マクロありファイルの種類:Excel 97-2003ブック ・★★★のソースが含まれていると、Excelが強制終了します。 以下、ソース。 Sub ファイル保存() 'マクロなしファイルを作成 CreateNoMacroBook End Sub '←ここで異常終了が発生する。 Sub CreateNoMacroBook() Dim fname As String Dim ns As Integer Dim cnt As Integer Dim i As Integer 'マクロありブックの名前を取得 fname = ActiveWorkbook.Name 'マクロありブックのシート数を取得 cnt = ActiveWorkbook.Worksheets.Count 'すべてのシートをMoveするとエラーになるのでシートを追加 Worksheets.Add After:=Worksheets(Worksheets.Count) '新規ブック作成時のデフォルトのシート数を保管 ns = Application.SheetsInNewWorkbook '新規ブック作成時のシート数を変更 Application.SheetsInNewWorkbook = 1 '新規ブック作成 Workbooks.Add '新規ブック作成時のデフォルトのシート数に戻す Application.SheetsInNewWorkbook = ns 'マクロありブックのシートを新規ブックの"Sheet1"シートの前に移動 For i = 1 To cnt Workbooks(fname).Worksheets(1).Move Before:=Workbooks(Workbooks.Count).Worksheets("Sheet1") '★★★ Next i '表示用に新規ブックの一枚目のシートをアクティブにする Workbooks(Workbooks.Count).Worksheets(1).Activate Application.DisplayAlerts = False '新規ブックのデフォルトシート"Sheet1"を削除する Workbooks(Workbooks.Count).Worksheets("Sheet1").Delete Workbooks(Workbooks.Count).Activate Application.DisplayAlerts = True End Sub
- 締切済み
- Visual Basic
- エクセル、ワークシートが保護されているかどうかを判断するVBAは?
以下のように書いてもダメでした。 どう直せばよいでしょうか? Sub TEST2() Dim n As Integer n = ThisWorkbook.Worksheets.Count For i = 1 To n If Worksheets(i).Protect = False Then MsgBox Worksheets(i).Name End If Next End Sub
- ベストアンサー
- オフィス系ソフト
- シート番号追加VBA
watabe007さま 大変お世話になりました 前にシートのセルにページ番号を追加するVBAをこちらで教えて頂きまして、本当に有難うございます 前回に下記の内容を教えて頂き、大変有難く使わせていただいております Sub pageA() Dim i As Long For i = 1 To Worksheets.Count If Worksheets(i).Name = "Sheet3" Then Worksheets(i).Range("G2") = "'" & i & "/" & Worksheets.Count ElseIf Worksheets(i).Name = "Sheet4" Then Worksheets(i).Range("G3") = "'" & i & "/" & Worksheets.Count Else Worksheets(i).Range("G1") = "'" & i & "/" & Worksheets.Count End If Next End Sub それで、今回はどのシート名にも属さないシートはページカウントとしてカウントしない、という方法がありましたらお教え頂きたいのですが、方法はありますでしょうか? お忙しいかと思いますが、アドバイス頂けますますと嬉しいです
- ベストアンサー
- Excel(エクセル)
- EXCEL VBAにてのワークシート作成
エクセルのVBAにてワークシートを作成することで困っています。 自分で書き込んだのは Private Sub CommandButton1_Click() Worksheets("原紙").Copy ActiveSheet.Name = TextBox1 Worksheets.Add After:=Worksheets(2) End Sub Private Sub UserForm_Initialize() TextBox1 = Format(Date, "yy.mm.dd") End Sub 実行したいことはCommandButton1クリック時に 左から2番目にあるワークシート 原紙を テキストボックス1に入力されている(日付) 名前を付けて左から3番目に新規で作成したいのですが 思うように動かずエラーが出てしまいます。 どの様に修正すれば宜しいでしょうか? またクリック時にすでにテキストボックス1と同じ 名前のワークシートが存在した場合はそのワークシートを Activeにしたいのですがどの様に書き込めば宜しいでしょうか? 重ね重ねですが宜しくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- シートを増やすVBA
フィルタで隠れている場合もある列の値を シート名として増やしていくVBAで以下のようなものをつくりました (値は重複している場合もある) 雛型シートがありそれをシート名だけ増やしていくというものです Sub シートを増やす() Dim target As Range Dim h As Range On Error Resume Next Set target = Worksheets("一覧シート").Range("E10:E" & Worksheets("一覧シート").Range("E65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible) If target Is Nothing Then Exit Sub 'シートを増やしていく For Each h In target On Error GoTo errhandle Worksheets(h.Value).Select On Error GoTo 0 Next Sheets("一覧シート").Select Exit Sub errhandle: Worksheets("雛型").Copy after:=Worksheets(Worksheets.Count) ActiveSheet.Name = h.Value Resume End Sub そうすると、実行エラー1004 ”シートの名前をほかのシート、Visual Basicで参照されるオブジェクトライブラリまたはワークシートと同じ名前に変更することはできません。” というエラーがたまにおきます(シート名が数字の場合におきるようです) 解決方法及び理由をご教授ください
- ベストアンサー
- オフィス系ソフト
お礼
ありがとうございます。 Do Until~Loop はちょうど勉強していたところでしたので、とっても役に立ちました。 本当にありがとうございました。