• ベストアンサー

別のブックを開く時にシートを指定したい

今開いているブックから別のブックを開くマクロはわかるのですが、これから開くブック内のシートも指定したいのです。シート名はすべて数字3桁で登録してあるので開きたいシートの数字をC1のセルに入れておいて(この数字は随時変更される)開きたいのですがうまくいきません。例えばC1に「112」が入っている時Sheets(112).SelectではうまくいきますがSheets(C1).Selectではエラーになってしまいます、良い方法を教えて下さい。

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

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

>開きたいシートの数字をC1のセルに入れておいて どのブックのどのシートのセルC1か指定しないとダメです。 たまたま仮定値で救われている場合があるにしても、2つ以上のブックやシートが出てくるときは、意識の上では、いつもこのコードでよいのか(正しく指定されているか)、注意しないと。 ーー Sheets()のカッコ内は、文字列のシート名を入れます。 ただし数字を入れるとインデックス値の指定になります。 セルの値がもし数値になっていたら、そのままもってくると、意図と違ってしまうかも知れない。 またC1セルの、セルの値はC1でなく、Range(”C1”).Valueで取ります。これ常識。

kentok
質問者

お礼

ありがとうございます。そうなんですね文字か数値かというのはけっこうわかりづらくて、もう一度コードを見直してみます。

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

その他の回答 (7)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.7

「マクロの記録」すると Workbooks.Open FileName:="D:\ExcelBook\A.xls" Sheets("Sheet1").Select といったコードが得られます。 これは Workbooks.Open(FileName:="D:\ExcelBook\A.xls").Sheets("Sheet1").Select と、いうように1行にまとめられます。

kentok
質問者

お礼

ありがとうございます。このつなぎ方は最近覚えました。理解するまでにだいぶ時間がかかりましたが。

全文を見る
すると、全ての回答が全文表示されます。
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.6

Sheets(Range("C1").Value).Select で >マクロ画面でカーソルを当てるとEmpty値と表示されました。 ということは アクティブブックのアクティブシートのRange("C1")のValueがEmptyだということです。 Sheets(Range("C1").Value)の上位オブジェクトが省略されている場合、 コードが実行されるときにアクティブな上位オブジェクトを指定していることになります。 コード実行時に、Excelで開いているシート名とセルC1の値がどうなっているか確認してください。 対処方法としては、 ”開きたいシートの数字をC1のセルに入れておいて”あるシート名、(場合によってはブック名も)を記述してください。

kentok
質問者

お礼

わかりました、コード自体が合っていてもコードの順番が違っていて目的のシート(ブック)から値を持ってきていないのですね。以前同じような問題を抱えたことを思い出しました。きっとうまくいくと思うのでじっくりやってみます。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.5

指定したいシートを含むBookと、指定する値のシートを含むBookが違うのでしょうから、 きちんとBookから指定しましょう。 と思いますけど。

kentok
質問者

お礼

ありがとうございます。そこがポイントだったのですね。

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

おっとぉ! ダブりましたね、No1,2さん失礼致しました。

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

> Sheets(C1).Select はC1の変数に入っている数値番目のシートをSelectしなさい。 の意味になります。 C1セルで指定したシート名をSelectするなら、 Sheets(Range("C1")).Select とします。 マクロを組む場合は、先頭に Option Explicit を定義すると良いですよ。

全文を見る
すると、全ての回答が全文表示されます。
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

ヒントはANo.1で差し上げています。 Sheets(Range("C1").Value).Select

kentok
質問者

お礼

ありがとうございました。ただこれではうまくいきませんでした。 マクロ画面でカーソルを当てるとEmpty値と表示されました。

全文を見る
すると、全ての回答が全文表示されます。
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

セルC1のValueをSheetsのインデックスに入れてみてください。 >例えばC1に「112」が入っている時Sheets(112).Selectではうまくいきます たまたま上手くいっているだけだと思います。 シート見出しが左から112番目のシート名が、112であるというように インデックスとシート名が一致している場合ではないでしょうか。

kentok
質問者

お礼

少し違っていましたSheets("112").Selectとやるとうまくいくのです。ただその都度マクロを開いて数字を打ち込むわけに行かないのでC1 の値が自動的に入ってくれる方法があると良いのですが

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

関連するQ&A

  • シートを別のブックに移動させたいのですが、

    シートを別のブックに移動させたいのですが、 マクロで作成するとこうなりました。 Workbooks.Open Filename:= _ "C:\Documents and Settings\YUUKORON\My Documents\YYYY.xls" Windows("GGGG.xls").Activate Sheets("2010.4YY").Select Sheets("2010.4YY").Move Before:=Workbooks("YYYY.xls").Sheets(1) が、移動先のブック名が移動させたいシートのセルF1に入力されているので、ブック名YYYYをどのようにすればよいのか教えてください。  Workbooks.Open Filename:= _   "C:\Documents and Settings\YUMIKO\My Documents\" & Range("F1").Value & ".xls" Windows("GGGG.xls").Activate Sheets("2010.4YY").Select  Sheets("2010.4YY").Move Before:=Workbooks("YYYY.xls").Sheets(1) 試してみた方法 Sheets("2010.4YY").Move Before:=Workbooks("("2010.4YY").Range("F1").Value.xls").Sheets(1)  Sheets("2010.4YY").Move Before:=Workbooks _ ("C:\Documents and Settings\YUMIKO\My Documents\" & Range("F1").Value & ".xls").Sheets(1) どれもダメでした。 あと、今は、Sheet(1)の前となっていますが、常にブックの先頭に移動させることはできるのでしょうか? シート名は、2010.5YY、2010.6YY というふうに毎月増えていく予定です。 初心者です。よろしくお願いします。

  • 同じブックに存在するシ-ト(X)の指定セル(A1:C10)を別のシート

    同じブックに存在するシ-ト(X)の指定セル(A1:C10)を別のシート(Z)のA2セルへコピーしたいのですが、マクロの記録で入手したコードをコマンドボタンで実行するとエラーになってしまい、先へ進めません。 Private Sub CommandButton1_Click() Sheets("X").Select Range("A1:C10").Select ← この部分が黄色! Selection.Copy Sheets("Z").Select Range("A2").Select ActiveSheet.Paste End Sub 正しく動作させる方法を教えて下さい。 よろしくお願いします。

  • シートのコード(マクロ)で別のシートを指定することはできますか?

    環境はWINDOWS XP, EXCEL 2003 です。 VBAについて、初歩的な質問ですみません。 コードを書けるモジュールには Microsoft Excel Objects と標準モジュールとありますが、シートのコードでは、別のシート上のセルをオブジェクトとして指定することはできないのでしょうか? 今開いていて、ボタンのあるシートを、Sheet1 (基本画面)、読み込みたいデータがあるシート(同じブック内)をSheet3 (計算用)、とします。 基本画面のセルA1に日付を入力してから、「データ選択」ボタン(コントロールツールボックスで標準で出てくるボタンです)を押すと以下のマクロが動くようにしたため、このコードはSheet1のモジュールに書きました。 このマクロの前半に、日付が、計算用のC3に事前に書き込まれている日付と一致しているかどうかを判定させ、一致しない時は中断するようにさせたのです。マクロ後半は本題と関係ないと思うので省きます。 Private Sub データ選択_Click() '前半で下準備ができているか、チェック Hidzuke = Range("A1").Value Sheets("計算用").Select Atai = Range("C3").Value Sheets("基本画面").Select If Atai <> Hidzuke _ Then Range("A2").Value = "下準備ボタンを先に押してください" Exit Sub End If '以下、省略 End Sub すると、Range("C3").Value は、Sheets("計算用") の"C3"ではなく、 Sheets("基本画面") の方の"C3"を対象として読み込んでしまいました。私はシートのコードを書くことはあまり多くなく、標準モジュールと同じ感覚で、Sheets("計算用") の"C3"の値を読んだつもりだったのですが、シートのコードと標準モジュールでは、どのような違いに注意したら良いのでしょうか。 さらに不思議なことに、この"C3"を"C7"などに変えると、Ataiの中身が "準備完了" などの文字列になったのです。しかしこの"準備完了"という文字列は、現在のブックにはどこにもありません。今のファイルの前の前ぐらいまで、確かに、 Sheets("基本画面") の"C7"には、"準備完了" と書き込んでいました。なぜ、昔のセルの中身(値)がゴーストのように残ってしまうのでしょうか・・・。 ツリーで、標準モジュールは標準モジュールで、シート専用マクロはExcel Objects で、はっきりわかれていますから、私はここの違いから理解できていなくてこんな馬鹿な質問をしてしまうのだと思います。他のシートのセルをオブジェクトとして指定したければ、モジュールが増えて多少猥雑になってでも、Call などで標準モジュールを呼び出すしかありませんか? よろしくお願いします。

  • 別ブックのシート名称一覧を作成したい

    excel2016 自ブックの中でシート名一覧作成というマクロはwebにあったのですが、 他ブックのシート名一覧を自ブックへ作成というのを どの様に対応したらよいのかがわかりません。 やりたい内容は、 ①自ブックを開く(シート収集するファイル) ②file_openマクロ実行  c:\workにあるfile.xlsmのブックを開く(file.xlsmが他ブック) ③file.xlsmの全シート名称一覧を  自ブックのsheet1シートのA1セルから下へシート名称記載させる。  file.xlsmに登録されているシート名称は日付と時刻と時刻  202110070830 202110071700  … みたいな12桁のシート名称になっている ③自ブックsheet1のB1からB列最終行(A列にデータがある最終行)  まで必要なセルに1を設定 ④自ブックB列でセルに1があれば、他ブックの対象シートを自ブック  へコピー 以上①~④をマクロで対応したいのですが ③の内容がわからないのでベタでマクロ教えていただきたく、よろしくお願いします。

  • 別のブックから、特定のシートを指定して他のブックを開くには

    マクロ初心者です。 A.xlsと、B.xlsという2つのブックがあります。 B.xlsはこの時、閉じた状態です。 Aには1つのシートのみがあって、Bには日毎に追加されていく不特定数のシートがあります。 Aのブックのシート内のセル番地A1に、「aaa」と入力した場合、B内の「aaa」という名前のシート名を指定してB.xlsを開くマクロはどう書いたら良いのでしょうか。 頼りきりの質問になってしまって申しわけございません。 何卒宜しくお願い申し上げます。

  • Excelでシートをコピーする時に「シート名が長すぎます」と表示される

    環境 OS : Win2000 SP4 Office : Excel 2000 SP1 表題の通りでシート名「P.05-2_BK(-2)」を同じブック内でコピーしようとすると「シート名が長すぎます」とメッセージが出てコピーできません。 MSのサイトではシート名は半角31文字までOKと書いてあるのですが・・・ マクロでは大丈夫かな?と思い Sub Macro1() Sheets("P.05-2_BK(-2)").Select Sheets("P.05-2_BK(-2)").Copy After:=Sheets(24) End Sub と言うマクロを実行してみましたが、2行目で同じエラーが出ます。 また、ブックが悪いのかと思い、シートを新しいブックにコピーして、その新しいブック内でコピーしようとしても同様にエラーが出てコピーできません。 何故なんでしょう??

  • シートを別のブックに複数自動コピー

    初質問です。よろしくお願いします。 マクロを使って、あるブックのシート(20から50枚程度)を、別の貼り付け先のブックに自動的にコピーしようとすると、10回をすぎたあたり(必ずしも一定せず)で 「実行時エラー'1004': WorksheetクラスのCopyメソッドが失敗しました。」 というエラーと共にマクロが止まり、デバッグしようとすると 「ActiveSheet.Copy After:=Workbooks("貼り付け先ブック.xls").Sheets("○○シート")」 のところで止まっています。 マクロの記述内容は以下の通りです。 Sheets("貼り付け元シート").Activate ActiveSheet.Copy After:=Workbooks("貼り付け先ブック.xls").Sheets("○○シート") Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Application.CutCopyMode = False Range("A1").Select Windows("貼り付け元ブック.xls").Activate ・・・以下貼り付け元シートを変えつつ複数回繰り返し これができる様になれば非常にラクになるので、ぜひご教授願います。

  • エクセル マクロで別のブックに貼り付けたい!

    作成したシートを別のブック(既存)にマクロを使って貼り付けたい のですが、いろいろ調べた結果以下のようにはすることができました。 ---------------------------------------------------------------- Sub SaveSheet() Dim sFileName As String 'ファイル名の設定 sFileName = "C:\a\test.xls" 'シートをコピーして新規ブックを作成 Sheets(Array("Sheet1", "Sheet2")).Copy '作成したブックの保存 ActiveWorkbook.SaveAs sFileName End Sub ---------------------------------------------------------------- これはとあるサイトで見つけたもので、私自身が作成したものでは ありません。 このマクロの問題は、 ○あらたにブック(シート)が作成されること (マクロ実行時は上書きになるので、変更できなくても使えないわけ ではない) ○元データはシート丸ごとであり、セル範囲を選択できない。 ○貼り付けるシートにおいても、任意の場所を起点とできない。 ということです。 整理しますと、『作成したシートの任意のセル範囲を、別に存在する ブックに、任意のセルを起点として貼り付けたい』 ということです。 どうかよろしくお願いします。m(_ _)m

  • VBA 複数シートをまとめて別ブックに移動させる

    Winは10、Excelは2016を使用しています。 複数シートをまとめて別ブック(新ブック)に移動させて、名前を付けて保存したいのですが、私の知識、理解が追い付かずに困っています。 シート名ではなく、シート番号で指定したいです。 移動させたいのは、左から3番目~27番目までのシートです。 Sub 移動 () Dim arr(2 To 26) As Integer Sheets(Arrar(arr)).Select Selection.Worksheets.Move '(保存場所選択と名前は手動でやります。) 'マクロが付いている移動元のブックは変更を保存せずに終了したいです。 おかしいところだらけですが、上記のおかしいところ、修正方法、追記文構文を教えて下さい。 よろしくお願い致します。

  • エクセル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

対衝撃荷重の強度設計
このQ&Aのポイント
  • 3ms間4000Nの衝撃荷重に対して、梁の強度設計をどう考えればいいですか
  • 梁がせん断しないと目指しているが、普通に考えれば、4000Nでかける場合に曲がった梁の外周の引張応力を0.2%耐力応力を超えないようだけにすればOKですか。 それは塑性変形させない考え方ですか
  • 塑性変形してもOK、せん断さえしなければっていう設計ありますか
回答を見る

専門家に質問してみよう