• ベストアンサー

シート名の取得について

お世話になります。 以下の様な記述で、追加したシート名を 取得したいのですが、 元々「sheet1」しかない所に追加しており、 追加されたシートは「sheet2」で、 アクティブにもなっているのですが、 コードネームを取得すると、何度やっても 「sheet1」になってしまいます。 どこがおかしいのか分からなく、 ご教示お願い致します。 Sub MACRO() Dim newsheet As Worksheet Dim mysheet As String Dim myrngf As Range Workbooks.Open Filename:="C:\使用量.xls" Set newsheet = Worksheets.Add mysheet = ActiveSheet.CodeName Set myrngf = Workbooks("使用量.xls").Sheets(mysheet).Range("a:a") ~処理内容~ Range("a:b").Columns.AutoFit End Sub

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

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

mysheet = ActiveSheet.CodeName の下に MsgBox mysheet MsgBox ActiveSheet.CodeName MsgBox ActiveSheet.Name の3行を入れてみましょう。 使用量.xlsに元からあるSheet1が以下 Nameプロパティ="Sheet1"(元々Sheet3として作り、名前をSheet1に変更) CodeNameプロパティ="Sheet3" のようになっている場合に、Addでシートを足すと、足されたシートは Nameプロパティ="Sheet2" CodeNameプロパティ="Sheet1" となります。 すると、足されたシート名のつもりでCodeNameを参照すると"Sheet1"が返される為 mysheet = ActiveSheet.CodeName の行で、mysheetの内容は"Sheet1"になります。 当然ながら Set myrngf = Workbooks("使用量.xls").Sheets(mysheet).Range("a:a") は Set myrngf = Workbooks("使用量.xls").Sheets("Sheet1").Range("a:a") と同じ意味になります。 つまり mysheet = ActiveSheet.CodeName ではなく mysheet = ActiveSheet.Name と書かなければなりません。

miruchoko
質問者

お礼

ご丁寧にありがとうございました。

その他の回答 (1)

  • higekuman
  • ベストアンサー率19% (195/979)
回答No.1

CodeName と Name は違うものですが、それはご存知でしょうか?

miruchoko
質問者

お礼

ありがとうございました。

関連するQ&A

  • シートの複写・名前の変更・移動を同時にしたい

    winXP excel2003でマクロ作成の初心者です。 シートを複写して、名前を変更までできましたが、ダイアログをキャンセルしても、newSheetができてしまいます。キャンセルしたらnewSheetができないようにしたいです。それとシート名を変更したシートを、必ず後ろから5番目の(固定)に、移動したいです。どうコードを書いたらよろしいでしょうか? Sub シート複写とシート名の変更とシート移動() Dim mySheet As Worksheet Set mySheet = ActiveWorkbook.Worksheets("1.○○会社") mySheet.Copy Before:=Worksheets("1.○○会社") ActiveSheet.Name = "newSheet" Application.Dialogs(xlDialogWorkbookName).Show End Sub

  • VBAのオブジェクト変数について

    人に教えなければいけないことなので、、、 困っています。 あるVBAのテキストを見て、そのテキストをそのまま入力しても実行できません。 (条件としては、Book1.xlsとBook2.xlsというファイルを開いた状態で、Book1.xlsのほうに、以下のモジュールを入力します。) Sub Set1() Dim myBook As Workbook Dim mySheet As Worksheet Dim myCell As Range Set myWBook = Workbooks("Book2.xls") Set myWSheet = Worksheets("Sheet2") Set myCell = Range("A1:D10") myWBook.Activate myWSheet.Activate myCell.Value = "ABC" End Sub これを実行すると、アクティブな状態のファイルにしか、値"ABC"が入ってこないのです。テキストでは、Book2.xlsのSheet2のA1:D10に値"ABC"が入ってくると言っていますが、Book1.xlsに値が入ってしまったりします。 長くなってしまってすみません。 もちろん、他の方法で実現することができるのはわかるのですが、なぜこのコードが実行できないのかがわかりません。 理由を教えていただけたら・・・と思います。 よろしくお願いいたします。

  • VBAエクセルにて開いてないエクセルシートを開いてるシートに所得

    お世話になります。 「同じフォルダー内にBOOKが2つ有ります。1つ(AK.xls)を立上げて もう1つの(EX.xls)を立上げずに、EX.xls内のSheet1をコピーして AK.xlsのシート(STEP1)に貼り付けようとしています。」 どうしてもエラーが出てしまいます。 何方か、分かる方教えて下さい。 また記述して戴ければもっと助かります。 エラーは”1004”EX.xlsが見つかりません。と出てしまいます。 Sub ST() Dim wsSrc As Worksheet, WS As Worksheet Dim PasteR As Range Dim x As Long Sheets("STEP1").Select Cells.Select Selection.Delete Shift:=xlUp Range("A1").Select   Set wsSrc = ActiveSheet Workbooks.Open "EX.xls" For Each WS In Worksheets x = WS.Range("A1").CurrentRegion.Rows.Count If WS.Index = 1 Then Set PasteR = wsSrc.Range("A1") Else Set PasteR = wsSrc.Range("A65536").End(xlUp).Offset(1) End If WS.Range(WS.Cells(1, 1), WS.Cells(x, 44)).Copy PasteR Set PasteR = Nothing Next ActiveWorkbook.Close False Set wsSrc = Nothing End Sub デバックでは Workbooks.Open "EX.xls"この部分が黄色になります。 是非、回答を宜しくお願い致します。

  • Excel VBAで異なるファイル間のコピー

    異なるファイル間で値のみをコピーしたいです。下記の様な感じです。 hoge1.xlsのA1からA10のセルの値のみをhoge2.xlsのB1からB10へコピーする。 以下の様に書いてみたのですが、数式がコピーされてしまいます。 VBAをやったことがなく、今ネットで30分ほど見て書いてみたので 根本的に理解していません。簡単な書き方を教えていただきたいです。 Sub test() Dim Fname As String Fname = "hoge1.xls" Workbooks.Open Filename:=Fname, ReadOnly:=True Dim range1 As Range Set range1 = Worksheets("Sheet1").Range("A1:A10") range1.Copy Destination:=Workbooks("hoge2.xls").Worksheets("Sheet1").Range("B1:B10") End Sub また、ファイルを開いたり閉じたりは必要なのでしょうか? Workbooks.Open Filename:=Fname, ReadOnly:=True を書かずに、いきなり Set range1 = Workbooks("hoge1.xls").Worksheets("Sheet1").Range("A1:A10") はダメなのでしょうか?? よろしくお願いします。

  • VBA 実行時エラーで、"プロパティまたはメソッド

    ・Sheet1(コード) Private Sub CommandButton1_Click() Call aaa End Sub ・Module1(コード) Sub aaa() Dim wb As Workbook Dim ws As Worksheet Workbooks.Open ("c:\test.xls") Set wb = Workbooks("test.xls") Set ws = wb.Worksheets("Sheet1") wb.ws.Range("A2").Value = "CCC" End Sub wb.ws.Range("A2").Value = "CCC"の部分で 以下の実行エラーが出ます。 ------------------------------------------------------------------------ 実行時エラー'438': オブジェクトは、このプロパティまたはメソッドをサポートしていません。 ------------------------------------------------------------------------ Set wb = Workbooks("test.xls") Set ws = wb.Worksheets("Sheet1") の部分で特にエラーも出ないので、オブジェクトの取得は成功していると 思うのですが、WorkSheetオブジェクトのwsからRangeメソッドを呼ぶことが できません。 動かない原因と対策を教えてください!!

  • マクロ EXCELの範囲をコピーして貼付け

    『End(xlDown).Row』で取得した値を使ってセルの範囲指定&コピーを行い、 新しく追加したシートに貼り付けたいのですがうまくいきません。 Sub attendanceJoin() Dim MaxRow As Integer 'シートの最終行の値 Workbooks("test.xls").Activate Dim NewWorkSheet As Worksheet Set NewWorkSheet = Worksheets.Add() '新しいシートを追加する MaxRow = Worksheets(2).Range("M1").End(xlDown).Row  'A列の最終行を取得 NewWorkSheet.Name = "統合"  '新しく追加したシートの名前を変更 With Workbooks("test.xls") .Worksheets(2).Range("A1:M&MaxRow").Copy   'コピーするセルの範囲を指定    '↑ここでエラー。.Worksheets(2).Range("A1:M38").Copy を指定するイメージです。 .Worksheets("統合").Range("A1").PasteSpecial End With End Sub どなたか間違っている箇所のご教示お願い出来ますでしょうか。 どうぞよろしくお願い致します。

  • エクセルVBA!(COPY) Win2000,offce2000

    単純な質問かもしれませんが、 WorkBooks("test")から 別のWorkBooks("Data").WorkSheets("Sheet1")のデータの数を判定して全てをコピーして、 WorkBooks("test")のWorkSheets("Sheet2")へペーストしたいのですが、うまくいきません ↓のような感じです。 Dim wstest As Worksheet Dim wsData As Worksheet Dim wsNM As String Dim Drow As Long Sub copy() 'DataSheetのSheet名がその都度違うので、取得しました。 wsNM = wsData.Sheets(1).Name Set wsData = Workbooks("Data.xls").Worksheets(wsNM) Set wsTest = Workbooks("Test.xls").WorkSheets("Sheet2") 'データの範囲判定 Drow = wsData.Range("H65536").End(xlUp).Row '/////// ここからが???です /////// wsDataのA1からBAのDrowを範囲を指定して、Copy → wsTestのA1に貼り付けたいのですが、どうしたらよいのでしょうか? コピーしたり、直接書くようにしたりといろいろなコードを書いてみましたがダメでした。 Cellsで範囲をとる方法がわかりません。Rangeなら(A1:BA300)のように取れる範囲もCellsの時はどうしたらよいのでしょうか?(そのまま書けば、Cells(1,1):Cells(Drow,53)みたいな・・・・・) と、悩んでいるより一気にコピーするのもどうかと思いFor~Nextで1行ずつ書いていったらどうかとも考えましたが、うまくいきませんでした。 End Sub ※ Drowは、6000~20000 よろしくお願いします。

  • 別ブック間のすべてのシートのある列を比較

    こんにちは、 エクセルvba超初心者で修行中のものです。 別ブック間のすべてのシートのある列を比較し、同じ値に色を付けるというマクロを 作りたいのですが、 下記のようにシートを限定する→With Workbooks("マクロ1.xls").Sheets("Sheet1") とうまくいくのですが、それぞれのブックのすべてのシートに対して比較をしたいので With Workbooks("マクロ1.xls").worksheets と書くと コンパイルエラー、メソッドまたはデータメンバーが見つかりません と出てきてSet search1 = .Range(.Range("A2"), .Range("A" & Rows.Count).End(xlUp)) このなかの左から二つ目のRangeの色が反転します。 vba に関する勉強不足は重々承知しておりますが、意味が理解できません。 どうすれば、シート全体を検索できるようになるのでしょうか? ぜひお力をお貸しください よろしくお願いいたします。 Sub search() Dim search1 As Range, search2 As Range, s As Range, ss As Range With Workbooks("マクロ1.xls").Sheets("Sheet1") Set search1 = .Range(.Range("A2"), .Range("A" & Rows.Count).End(xlUp)) End With With Workbooks("まくろ2.xls").Sheets("Sheet1") Set search2 = .Range(.Range("i2"), .Range("i" & Rows.Count).End(xlUp)) End With For Each s In search1 For Each ss In search2 If s.Value = ss.Value Then s.Interior.ColorIndex = 6 ss.Interior.ColorIndex = 6 End If Next ss Next s End Sub

  • 新たに作成したシートでunion関数が使えないのですが。

    困っています 例えば Option Explicit Sub sss() Dim allrange As Range Dim cell As Range Set allrange = Union(Range("A1"), Range("A3")) For Each cell In allrange cell = 123 Next cell End Sub '---------------------------------------------------------- Sub ssscr() Dim exlapp As Excel.Application Dim exlwb As Object Dim exlsh As Object Set exlapp = CreateObject("Excel.Application") exlapp.Visible = True Set exlwb = exlapp.Workbooks.Add Set exlsh = exlwb.Worksheets(1) Dim allrange As Range Dim cell As Range Dim rngA1 As Range Dim rngA3 As Range Set rngA1 = exlsh.Range("A1") Set rngA3 = exlsh.Range("A3") Set allrange = Union(rngA1, rngA3) For Each cell In allrange cell = 123 Next cell End Sub 最初のコードだとA1,A3に値が入力されるんですけど 二番目のコードだと新たに出来きたbookに入力されません。 unionのところでエラー起こります。 作成したブックのシートをセレクトしても入力できません。 作成したブックにunion関数を指定したときどうしたらよろしいでしょうか?

  • VBAで別ブックを複数列検索し、隣のセルの値を取得

    book2(master)のセルA1、2、3・・・・の値でbook1(data)の任意の複数列(以下では3列目、8列目としています)を検索し、検索結果の右側のセルの値(以下の例の場合4列目と9列目)をbook2(master)の検索元セルの右側に書き込みたいのですが、実行すると実行時エラー1004アプリケーションまたはオブジェクトの定義エラーです。 と表示されてしまいます。回避方法について教えて頂けますでしょうか また、複数列の検索方法について適切な方法がありましたら教えて頂けますでしょうか 例) master A2”aa” 空欄 ←hoを取得 A3”bb” 空欄 ←3aを取得 A4”cc” 空欄 data(ランダムに配置されています) 1 2 3 4 5 6 7 8 9    ca de      d4 2f    c1 3a      bb 3a    aa ho      7e ee Sub kensaku() Dim book1 As Workbook Dim book2 As Workbook Dim sheet1 As Worksheet Dim sheet2 As Worksheet Dim rng As Range Dim r As Long Set book1 = Workbooks.Open("D:\Book1.xls") Set book2 = Workbooks.Open("D:\Book2.xls") Set sheet1 = book1.Sheets("data") Set sheet2 = book2.Sheets("master") r = 2 Do While sheet2.Range("A" & r).Value <> "" Set rng = sheet1.Range(Columns(3), Columns(8)).Find(sheet2.Range("A" & r).Value, LookAt:=xlWhole) If Not rng Is Nothing Then sheet2.Range("B" & r).Value = rng.Offset(0, 1).Value End If r = r + 1 Loop End Sub

専門家に質問してみよう