• ベストアンサー

EXCEL マクロ リストボックスよりシート名を選択してシートを選択

こんばんは. エクセルを使って備品の管理システムを構築したいと考えております. マクロを使います. VBAは初心者です. ・備品を20種類ほどに分類し,シートも同様に20作りました. ・ウィンドウを2つに分割し,上下に並べています. ・上ウィンドウの最初のシート(シート名:備品一覧)のB2セルにリストボックスを設け,そのリストで20種の備品の中から一つを選択できるようにしています. ・リストボックスの側にマクロ対応のボタンを設置しております やりたいこととしては・・・ 『上ウィンドウのリストボックスで備品を選択し,ボタンをクリックすることによって,下ウィンドウでその選択した備品名のシートに移動する』 です. 私が組んでみたマクロは下記です. ---------------- Sub 備品を選択     Dim sheetname As String 'リストボックスからシート名を取得する sheetname = Range("B2").Value '下ウィンドウをアクティブにしてシートを選択する Windows(2).Activate Worksheets("sheetname").Select End Sub ------------------ エラーは,『Worksheets("sheetname").Select』のところで 【実行値エラー'9' インデックスが有効範囲にありません.】 参考書やグーグルで調べてもわかりませんでした. ご教授いただければ幸いです. よろしくお願い致します.

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

  • ベストアンサー
  • Apr2nd
  • ベストアンサー率69% (36/52)
回答No.1

この辺の問題ではないでしょうか?   ×Worksheets("sheetname").Select   ○Worksheets(sheetname).Select

fujigany
質問者

補足

>Apr2nd様 ご回答ありがとうございます. まさしくその通りでした. 変数には””は必要ないんですね. これからもっと勉強していきたいと思います. どうもありがとうございました.

その他の回答 (4)

  • kiki_s
  • ベストアンサー率59% (147/248)
回答No.5

すでに回答は出ていますが・・・ >エラーは,『Worksheets("sheetname").Select』のところで 「"」で「sheetname」を囲っているのが原因です。 変数の場合は、「"」を付けません。 Worksheets("sheetname").Select 上記は「sheetname」という名前のシートを選択する事になります。 Worksheets(sheetname).Select 上記は、Range("B2").Valueで取得したセルの文字のシートを選択する事になります。

fujigany
質問者

補足

>kjkj_s様 ご回答ありがとうございます. ご丁寧な説明ありがとうございました.

  • Dred
  • ベストアンサー率36% (4/11)
回答No.4

基本的なことですが sheetnameという名前のシートをセレクト   Worksheets("sheetname").Select sheetnameという変数に入っているシートをセレクト   Worksheets(sheetname).Select という違いがあります。

fujigany
質問者

補足

>Dred様 ご回答ありがとうございます. シート名には””が必要で,変数には””は必要ないんですね. これからもっと勉強していきたいと思います. ありがとうございました.

  • izmlz
  • ベストアンサー率55% (67/120)
回答No.3

直接の回答ではありませんが、シート一覧を表示そしてシートを選択するとそのシートに移動するツールバーをマクロで作成するのはいかがでしょうか?詳しくは↓をご覧ください。サンプルファイルもあります。 エクセル技道場-マクロでツールバー作成 http://www2.odn.ne.jp/excel/waza/toolbar.html#SEC18 ↓は↑からの抜粋です。 ============================================================ 【エクセル技道場】No.005で、見出しスクロールボタンを右クリックでシート一覧が表示され、シート名をクリックすると当該シートがアクティブになることをご紹介いたしました。 ただし、15枚以上のシートがある場合には、見出しスクロールボタンを右クリックすると[シートの選択...]というメニューが出てくるので、それをクリックして[シートの選択]ダイアログボックスでアクティブにしたいシート名をクリックして、エンターを押す必要があります。 これが結構面倒くさいという人がいるので、シート一覧を表示するツールバーを作成するマクロを作成しました。 ============================================================

参考URL:
http://www2.odn.ne.jp/excel/waza/toolbar.html#SEC18
fujigany
質問者

補足

>izmlz様 ご回答ありがとうございます. なるほど,そういった方法もあるのですね. エクセル技道場は大変参考になりますね! 今後利用させていただきます. どうもありがとうございました.

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

何か難しいことをやっているようで良くわからんが Sheet1のF1:G6に E列    F列 工事用品 Sheet2 ハウス用品 Sheet2 インテリア Sheet2 基礎用品  Sheet3 塗装用品  Sheet4 屋根用品  Sheet4 こういう対応表が要るのでしょう。質問には書いてないようだが。 Sheet1にコントロールツールボックスのリストボックスを1つ張り付け プロパティで Boundcolumn 2 ColumnCount 2 Linkedcell A1 listFillRange E1:F6 設定。 デザインモードでリストボックスをダブルクリック Private Sub ListBox1_Click()ーEndSubが出てくるから Private Sub ListBox1_Click() sn = Range("a1") Worksheets(sn).Select End Sub を作る。 デザインモードを脱する。 シートで「塗装用品」をクリックすると「Sheet4」のシートが 開く === 参考になれば足しにしてください。 VBやフォームの上にコントロールを載せるのとちょっと違うから注意。

fujigany
質問者

補足

>imogasi様 ご回答ありがとうございます. 私の質問の仕方が不十分でしたね. 大変申し訳ございませんでした. imogasi様のご回答は後学のため参考にさせていただきます. ありがとうございました.

関連するQ&A

  • エクセル リストボックスをボタンで選択するマクロ。

    VBA初心者なので教えていただけるとありがたいです。 現在、sheet1にリストボックスを貼り付けています。 そのリストボックスで選択した値を、sheet2のA1セルに貼り付けるようなマクロを作ってみました。 リストボックスのリストは、下のような感じになっています。 空白 ああああ いいいい うううう これとは別にボタンを作成し、ボタンを押すとこのリストボックスの空白(一番上のリスト)を選択するようにしたいのですが、このようなことはできるのでしょうか? なぜこのようなことがしたいのかは、説明が長くなりそうなので省略させていただきます。 どなたか教えていただけるとありがたいです。

  • シートを選択するマクロ

    いつもお世話になってます。 マクロ初心者です。 製作工程の仕様書のテンプレートを作成しているところです。 各項目に「有・無」とチェックボックスがあり、「有」を選択すると該当のシートに飛ぶようにしたいです。 (例えば、写真撮影を有にすると写真撮影の要領書のシートにとぶ…みたいな) Private Sub チェックボックス_Click() Sub ワークシートを選択() Worksheets("Sheet2").Select End Sub 上記のようなのを入れてみましたが上手くいきません。 どのようにすれば出来るでしょうか? 教えて下さい。よろしくお願いします。

  • リストボックスからシートを選びアクティブにしたい

    Excel2007でマクロ作成の初心者です。 リストボックスで選択した、リスト項目のワークシートを表示したいのですが、 「インデックスが有効範囲にありません」というエラーがでます。 どうしたらよろしいでしょうか? よろしくお願いします。 ’-------------------------------- Private Sub 顧客リスト_Click() With 顧客リスト Worksheets(.list(.ListIndex - 0)).Activate’----ここでエラー発生します End With End Sub ----------------------------- Private Sub UserForm_Initialize() Workbooks("請求.xls").Activate Dim i As Integer Const EXCEPT_NAME = "経理●一覧●基本●" For i = 1 To Worksheets.Count If InStr(EXCEPT_NAME, Worksheets(i).Name & "●") = 0 Then 顧客リスト.AddItem i & " " & Worksheets(i).Name End If Next i End Sub ’---------------------------

  • excelのマクロでrangeの選択がうまくいきません。

    excelのマクロでrangeの選択がうまくいきません。 以下のマクロをsheet2に書きました。testcopyは動きますが、testcopy2は動きません。なぜなのでしょうか。どうすればいいのでしょうか。それ以外のマクロの部分との関係から、cellsを使い、数字を使ってrangeの処理をしたいのです。よろしくお願いします。 Sub testcopy() Worksheets("sheet1").Range("B3:C10").Copy Worksheets("sheet2").Range("e5").Select ActiveSheet.Paste End Sub Sub testcopy2() Worksheets("sheet1").Range(Cells(3, 2), Cells(10, 3)).Copy Worksheets("sheet2").Range("e5").Select ActiveSheet.Paste End Sub

  • フォームでユーザが入力したシート名を選択したい

    初歩的な質問ですいません。教えてください! 「sheetnameinput」フォーム Private Sub NextButton2_Click() sheetname = sheetname.Text このようにフォームを作成し、ユーザにシート名を入力させて、マクロの中でそのシート名を指定(選択)したいと思っています。 続きとして Dim sn As Variant Set sn = sheetnameinput.sheetname Sheets("sn").Select と作成してみたのですが 「インデックスが有効範囲にありません(エラー9)」 のメッセージが出てしまいます。 確かにその名前のシートはエクセル内に存在しているのですが、なぜエラーとなるのでしょう?そもそも指定の仕方が間違っているのでしょうか? みなさん、教えてください。

  • Excel マクロ リストボックス複数選択

    いろいろ拝見させていただいているのですが 理解が低いのが原因で困っています。 データのシートがあります。 ・B列には、起点となる人の名前が記載(300名ほど) ・データの入っている列は、A:CE データシートでB列にてオートフィルタをかけ 抽出シートに転記したい。 抽出シートでは、ユーザーフォームを組みました。 オプションボタン1 単一選択 オプションボタン2 複数選択 オプションボタン3 拡張選択 リストボックス(2・3に対して) コマンドボタン   終了 とした場合、単一選択はできたのですが 複数選択の場合 該当数が「0」の表記となってしまい、うまくいきません。 同じような質問が…というお返事があることを承知でお伺いしています。 いただいた回答を基に、勉強をしていきたいと思っていますので なにとぞよろしくお願い申し上げます。 Private Sub UserForm_Initialize() ListBox1.ColumnCount = 1 'リストボックスの列は1 ListBox1.BoundColumn = 0 'ListIndexの値(行数)を使用する ListBox1.MultiSelect = 0 '最初は単一選択状態にする ListBox1.RowSource = 'リストのソース ListBox1.ColumnHeads = True '列見出し表示 OptionButton1.Value = -1 'オプションボタン1を選択状態にする End Sub Private Sub OptionButton1_Click() ListBox1.MultiSelect = fmMultiSelectSingle '単一選択状態にする End Sub Private Sub OptionButton2_Click() ListBox1.MultiSelect = fmMultiSelectMulti '複数選択状態にする End Sub Private Sub OptionButton3_Click() ListBox1.MultiSelect = fmMultiSelectExtended '拡張(連続)選択状態にする End Sub Private Sub ListBox1_Click() 'リストボックスがクリックされたとき(単一選択) Dim 条件 As String 条件 = UserForm1.ListBox1.Text '氏名 With Worksheets("データ") .Range("A1").AutoFilter _ field:=2, Criteria1:=条件 .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _ Worksheets("抽出").Range("A1") .Range("A1").AutoFilter End With End Sub Private Sub CommandButton1_Click() '選択終了ボタンがクリックされたとき(複数・拡張選択) Dim 条件 As String Dim lastRow As Long With ListBox1 If .ListIndex = -1 Then Exit Sub '何も選択されていない For 条件 = 0 To .ListCount - 1 If .Selected(条件) Then '行選択あり With Worksheets("データ") .Range("A1").AutoFilter _ field:=2, Criteria1:=条件 .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _ Worksheets("抽出").Range("A1") .Range("A1").AutoFilter End With End If Next End With End Sub Private Sub UserForm_Deactivate() Unload UserForm1 '×ボタンを押したら、ユーザーフォームのunloadをする End Sub

  • エクセルのマクロでシートの選択について

    よろしくお願いします WinXP SP3でEXCEL 2003を使用しています ブック名がtest.xls シートが("目次", "1", "2", "3", "4", "5") とあります ここでは仮に"5"までシートがありますが本来は変数であり、n + 1のように扱いたいです 以下のマクロで"目次"以外の全てのシートを選択しました ~~~~~ Sub Macro1() Dim i As Integer i = 2 Sheets(i).Select For i = i To 6 Sheets(i).Select False Next i End Sub ~~~~~ このマクロですとArrayを使わずとも、"目次"以外のシートを選択できますが For i = i To 6 の6を7以上にするとエラー終了します そこで以下の条件にてシートの選択を行いたいのですが方法がわからず困っております 1・シートの数が多くても"目次"以外のシートを全て選択したいです 2・iがシートの数を超えた場合はエラー終了せず、マクロを終了させたいです 3・Sheets(Array( "1", "2", "3", "4", "5")).Select のようなマクロは組みたくないです 大変恐縮ですが、教えていただけますでしょうか できればマクロをVBEにコピー&ペーストするだけで実行できるような 状態にしていただきますと非常に幸いです 何卒、よろしくお願いいたします

  • エクセルのVBAでシート名が重なるときの処理 

    お世話になります。 エクセルのVBAにてリストボックスで選択した単語をシート名に 反映させるマクロを作成しました。 が、一度シート名を作ると2回目に同じ単語を選択すると、 デバック?画面になってしまいます。 『同じ名前のシート名は作れません・・・』 希望としては、同じ名前が出たら自動に連番が割り振られる ようなものを希望しています。 マクロの記録で確認しても、やはり同じデバック要画面がでます。 別シートにシート名を反映させて、同じ名前がヒットしたら 文字列を追加して、そのシートに反映し続ける・・・ ようなことは考えられますが、どうも不細工で気が向きません。 もっとスマートな考えがあれば教えていただきたく よろしくお願いします。 参考に作ったVBAを下記します。 これだと、途中でシートを削除してしまうと デバック画面が発生してしまいます。 (マクロの切り抜きなので、  リストで選択したものが反映されるマクロではありません) Dim シート名 As String Dim n As Integer Sheets("伝票マスター").Select Worksheets("伝票マスター").Copy before:=Worksheets("伝票マスター") n = Sheets.Count Sheets("伝票マスター (2)").Select ActiveSheet.Name = "伝票" & n - 1 Range("D2") = n - 1 Range("D1").Select 、

  • リストボックスから選択したシートを削除したい

    Excel2007でマクロ作成の初心者です。 リストボックスの選択項目のワークシートを削除したいのですが、 「インデックスが有効範囲にありません。」のエラーが発生し、 先に進めません。どうしたらよろしいでしょうか? ’--------------------- Private Sub 顧客削除_Click() Application.ScreenUpdating = False Unload Me Unload DS請求フォーム Dim i As Integer With 顧客リスト For i = 0 To .ListCount - 1 If .Selected(i) Then ' Worksheets(.list(.ListIndex)).Delete Worksheets(Split(.list(.ListIndex - 0), " ")(1)).Activate '←ここでエラー発生 ActiveSheet.Delete End If Next i End With MsgBox "選択の顧客を削除しました。" End Sub ’------------------------- Private Sub UserForm_Initialize() Workbooks("請求.xls").Activate Dim i As Integer Const EXCEPT_NAME = "経理●一覧●基本●" For i = 1 To Worksheets.Count If InStr(EXCEPT_NAME, Worksheets(i).Name & "●") = 0 Then 顧客リスト.AddItem i & " " & Worksheets(i).Name End If Next i End Sub ’----------------------

  • ユーザフォームのリストボックス

    お世話になります。 ユーザフォームのリストボックス内の下記2個のどちらかを選択し Private Sub UserForm_Initialize() ListBox1.AddItem ("印刷プレビュー") ListBox1.AddItem ("印刷") End Sub CommandButton1をクリックして Worksheets("Sheet1").PrintOut か Worksheets("Sheet1").PrintPreview を実行したいのですが どうやってリストボックスとコマンドボタンを 連動できるようにすればいいのでしょうか コマンドボタンのみだったら出来るのですが、 リストボックスを使うとうまくいきません。 ご教授よろしくお願いいたします。

専門家に質問してみよう