エクセルVBAでのシート取得に関する質問

このQ&Aのポイント
  • エクセルVBAを使用してブック内の指定されたシートを取得する方法について質問です。
  • ブック内には4枚のシートがあり、シート名は21、22、23、24です。
  • シート24のU6セルに格納されたシート名を取得し、そのシートを表示したいですが、うまくいきません。助けてください。
回答を見る
  • ベストアンサー

エクセルVBAでの シート取得 に関する質問です。

エクセル2007を使用しています。 ブック内に4枚のシートがあります。シート名は 21 22 23 24 です。(年度をシート名にしています。 24 のシート名のU6セルにコンボボックスから取り出したシート名(例えば23)が格納してあります。そこでコマンドボタンをクリックした時にシート名 23 のシートを取得したいのですができません。VBAの記述は下記のとおりです。もうこれだけで3日も悩んでいます。どなたか助けてください。 Private Sub CommandButton1_Click() Dim N As String N = Range("U6").Value Sheets("N").Select End Sub

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

  • ベストアンサー
noname#212067
noname#212067
回答No.2

はじめまして、こんにちは 「Sheets("N").Select」では、シート名 Nをセレクトして下さいと なってしまいますので 「Sheets(N).Select」と直してみましょう ダブルクォーテションで囲むと変数ではなく、文字列指定になってしまいます。

seiji1009
質問者

お礼

早速の回答ありがとうございます。これでやっと次の段階に進めます。 本当に助かりました。この3日間悩んだのが悔やまれます。 また、今後ともよろしくお願いいたします。

その他の回答 (1)

  • nao-y
  • ベストアンサー率58% (111/190)
回答No.1

> Sheets("N").Select これだと、「N」という名前のシートを選択しようとしてしまいます。 変数Nの中身を参照させたいなら、 Sheets(N).Select で、いいはずです。

seiji1009
質問者

お礼

ありがとうございます。完璧です。できました。今からやっと3日ぶりに次のコマンドを入力し、仕事ができます。こんなに自分がVBAに無知なのかを思いしらされました。 本当に早速の回答ありがとうございました。これからもよろしくお願いいたします。

関連するQ&A

  • エクセルVBAに関する質問です(オートフィルター)

    下記のようにコマンドボタンをクリックしたら、Nのシートを選択し、B列(Field=2)をO(顧客名)でオートフィルターをかけています。 これでできたと思ったら、オートフィルターをかけ、データがない場合の処理を忘れており、データがない場合は、メッセージボックスで データがありません と表示したいと考えています。 そこで (If Then Else Endif) SubTotal 等を用いればできるかなと思うのですが、VBA素人の私にはできません。どなたかご教示お願いいたします。 Private Sub CommandButton1_Click() Dim N As String N = Range("U6").Value Sheets(N).Select Dim O As String O = Range("V6").Text ActiveSheet.Range("$A$1:$S$154").AutoFilter Field:=2, Criteria1:= _ "=*" & O & "*", Operator:=xlAnd この後印刷をかけています。

  • エクセル VBA シートの選択 

    windows XP でエクセル2000を使っています。 Sub aaa() Sheets("Sheet1").Select Dim a As String a = Cells(2, 4) Sheets(a).Select Range("A1").Select End Sub というマクロだと セルに入っている値のシート名を探してくれます。 ですが Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Intersect(Target, Range("B11:b683")) Is Nothing Then Exit Sub Worksheets("Sheet1").Range("C2").Value = Target.Value Dim b As String b = Range("C2).value (←ここをcellsにしてもダメ) Sheets(b).Select Range("A1").Select End Sub これだとsheets(b)を選びません。Sheets(b).Selectのところが黄色くなります。 何処が間違えているのでしょうか。 全くの素人ですが、仕事で必要に迫られています。 わかりやすく回答・解説くれると助かります。

  • エラーになる理由とならない理由は?

    同じアプリケーション内にBook1.xlsとBook2.xlsを開き、 Book1.xlsのSheet1に アクティブエックスのコマンドボタンを設置して、 Private Sub CommandButton1_Click() Range("a1").Select End Sub としました。 このコードは問題なく実行できますが、 Book1.xlsのコマンドボタンから、 「Book2.xlsのSheet1を選択する」というコードをしたい時に、 Private Sub CommandButton1_Click() Windows("Book2.xls").Activate Range("a1").Select End Sub をすると、 「実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです。」 になります。 しかしなぜかRangeの前にSheets("Sheet1")を入れて Private Sub CommandButton1_Click() Windows("Book2.xls").Activate Sheets("Sheet1").Range("a1").Select End Sub にすると、問題なく実行できます。 Book1.xlsにもBook2.xlsにも「Sheet1」と言う名のシートはあります。 なぜ、Sheets("Sheet1").を入れるとエラーにならないのか教えてください。

  • エクセルVBAの質問 開いているもう一つのブックのシート名をすべて取得する方法

    おはようございます。 現在マクロを実行しているブックのシート名を下のようなコードで取得していますが、これを 開いているもうひとつのブックのシート名を マクロ実行しているシート“しーと1”のJ3セル以降に並べる というように変更したいのですが、下のコードを少し変更して 対応できるでしょうか?教えていただけたら助かります。 Sub シート名() Dim i As Integer Dim mySheetCnt As Integer Dim mySheetNam As String Application.ScreenUpdating = False Columns("J:J").Select Selection.ClearContents Range("J2").Select ActiveCell.FormulaR1C1 = "項目名" mySheetCnt = ThisWorkbook.Sheets.Count For i = 2 To mySheetCnt mySheetNam = Sheets(i).Name Sheets("しーと1").Cells(i, 10) = mySheetNam Next i Application.ScreenUpdating = True MsgBox "シート名更新しました。" End Sub

  • エクセル VBA 表示範囲の簡素化

    よろしくお願いします。 下記構文の簡素化ができないでしょうか。 CommandButtonが30個ほどあります。 ーーーーーーーーーー Private Sub CommandButton1_Click() Dim rng As Range Application.Goto Sheets("基本台紙").Range("A1") Set rng = Range("A1:D7") Rows.Hidden = True rng.EntireRow.Hidden = False Columns.Hidden = True rng.EntireColumn.Hidden = False rng(1).Select Unload Me UserForm1.Show vbModeless End Sub ーーーーーーーーーー Private Sub CommandButton2_Click() Dim rng As Range Application.Goto Sheets("基本台紙").Range("A1") Set rng = Range("A8:B21") Rows.Hidden = True rng.EntireRow.Hidden = False Columns.Hidden = True rng.EntireColumn.Hidden = False rng(1).Select Unload Me UserForm1.Show vbModeless End Sub ーーーーーーーーーー Private Sub CommandButton3_Click() Dim rng As Range Application.Goto Sheets("基本台紙").Range("A1") Set rng = Range("C8:D21") Rows.Hidden = True rng.EntireRow.Hidden = False Columns.Hidden = True rng.EntireColumn.Hidden = False rng(1).Select Unload Me UserForm1.Show vbModeless End Sub

  • EXCEL VBA におけるブック終了後の値の保存方法について

    EXCEL VBAについて質問があります。もしかしたら初歩的なことかもしれませんがよろしくお願いいたします。 まず、 Sub Test() Dim i As String i = InputBox("好きな果物を入力してください") Sheets("Sheet1").Range("A1").Value = i End Sub を実行し、ブックを保存して終了する。 ブックを開く Private Sub Workbook_Open() Dim k As String k = Sheets("Sheet1").Range("A1").Value If k = "みかん" Then MsgBox ("a") Else: MsgBox ("b") End If End Sub この処理を Sheets("Sheet1").Range("A1").Value = i というシート上のセルに値を保存するという方法を取らずに iの値をブック終了後もプロシージャ内に持っておくというのは可能なのでしょうか。 Publicで宣言してもブックを一度閉じると やっぱりiの値は保存されませんでした。 どうぞよろしくお願いいたします。

  • Excel VBA インデックスが有効範囲にない

      よろしくお願いします。 Excel VBA 初心のものです。 プログラムを作ってみたのですが、 「インデックスが有効範囲にありません」となってその先に進めません。 ソースですが ------------------------------------------------------ Private Sub CommandButton1_Click() Dim buf As String, cnt As Long Dim TMP As Variant Const Path As String = "D:\Excel\sample\" buf = Dir(Path & "*.xls*") Set TMP = Workbooks(buf).Sheets("testdata").Range("A1").Value Do While buf <> "" cnt = cnt + 1 Cells(cnt, 1) = buf Cells(cnt, 2) = FileDateTime(Path & buf) Cells(cnt, 3) = TMP buf = Dir() Loop End Sub ------------------------------------------------------ エラーになる箇所は Set TMP = Workbooks(buf).Sheets("testdata").Range("A1").Value のところです。 このプログラムで何をしたいかと言いますと DドライブのExcel>sample というフォルダの中にある ・すべてのエクセルブック名(ファイル数は3個)と、 ・そのブックの作成日時と、 ・testdataというシート(各ブックに必ずあるシートです)のセルA1に入っている値 を実行ファイルのSheet1に書き出す、 というものです。 プログラムの実行ファイルはExcelフォルダ直下にあります。 どこが問題でエラーになっているのか分かりません。 ご指南よろしくお願いします。   

  • エクセルのシートに連番をつけたい

    エクセル2010を使用しています。 シートが100個あったとして、 下のコードで1~100番までは コマンドボタンを押すことで、シート名を 変えることができました。 ところがコードの 1 To・・・を 101 To・・・に変えても101~200番には ならないのです。 私がコードを書く時はてっきりこれで大丈夫だと 思っておりましたが・・・意味をはきちがえているみたいです。 どなたか数値を変えれば 何番でも対応できるコードを解説付きでお教えください。 Private Sub CommandButton3_Click() Dim i As Long For i = 1 To Sheets.Count Sheets(i).Name = i Next End Sub

  • EXCELのVBAですが。

    EXCELのVBAですが。 Sub macro1() Dim mycnt As Integer Dim sheet_name1 As String Sheets("kekka").Select Range("A1").Select Sheets("shiji").Select mycnt = Range("B1").Value sheet_name1 = Range("c" & mycnt) Sheets("kekka").Select Sheets("kekka").name = sheet_name1 Sheets("kansuke").Select Sheets("kansuke").Copy Before:=Workbooks("2007年報告.xls").Sheets(3) End Sub (やりたいこと) B1に入っている数値でC1からC10に入っているあるシートの名前(たとえばkansukeとする)を取り、その名前で kekkaというシート名をkansukeという名前に変える。 名前を変えたkansukeというシートを別の2007年報告というbookにコピーを転送する。 (質問)上のコードで実はkansukeと書いてあるところは,B1の値次第で当然いろいろに 変化するため、そのシート名にとらわれない書き方をしたいのですがどう記述すればいいのか わかりません。以上お願いします。

  • EXCEL 別シートのコピー(3)

    こんにちは。 こちらで以前こちらで質問をさせていただき、EXCELの別ブックのシートからコピーをしています。 元のブックのコピーを作り、そこに入力してもらい、元のブックにコピーをしています。(同じフォルダに入れて) Private Sub CommandButton1_Click() Dim myBook As Workbook Set myBook = Workbooks.Open(ThisWorkbook.Path & "\コピー元ブック.xls")  with workbooks("コピー元ブック.xls").worksheets("シート名").usedrange workbooks("貼り付け先ブック.xls").worksheets("シート名").range(.address).value = .value end with end sub ここでブックがない場合、そのブックを飛ばしてあるブックだけコピーしたい場合は、どうしたらいいでしょうか。いろいろやってみましたが、コピーできませんでした。 教えてください。

専門家に質問してみよう