• ベストアンサー

ExcelのVBAで、ソース自体が書かれたシート名

ExcelのVBAで、ソース自体が書かれたシート名を取得したいと考えています。 やりたいことは、シートAからシートBに切り替えたときにシートAを削除したい。そこでシートAにworksheet_deactivateを追加して削除文を記載したのですが、activesheetで取得できるのはシートB名のためシートBが削除されてしまいます。 ソース自体はオリジナルシートがあり、シートAはオリジナルシートからコピーしたものです。 オリジナルシートは他シート名でもコピーすることがあるため、ソースに固定シート名は使えません。 なにか方法はないでしょうか?

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

ご質問の直接の回答としては >ソース自体が書かれたシート名を取得したい 基本的にはMeによって「ソースが書かれたシート」を取得します。 実際に試してみると色々と手を尽くす必要がありそうですが,原紙(Original)シートに例えば下記のように仕込んでみます private sub Worksheet_Deactivate()  if me.name = "Original" then exit sub  application.screenupdating = false  me.move  activeworkbook.close False end sub

関連するQ&A

  • Excel VBA 全sheet名の取得

    1つのbookに対して、存在する全てのsheet名を一括で取得して、"まとめ"用のsheetに表示させる。という処理をしたいのですが、中々うまくいきません。 条件としましては… ・"まとめ"sheetは既に作成済 ・sheet数は複数ある ・まとめsheetの名前も一番最後に表示されると思いますが…!? 今回は処理を考慮しません。 まとめ sheetには セルA1,A2,A3…という感じで表示させてたい。で、以下がソースになります。 Sub 全sheet名_取得() Dim ws As Worksheet Dim str As String i = 1 For Each ws In ActiveWorkbook.Sheets str = ActiveSheet.Name Worksheets("まとめ").Range("A" & i) = str i = i + 1 Next End Sub Webの解説を色々と参考にはしてみたものの中々上手く処理出来ません。大変雑な処理になってしまい…、他にこんな方法もあるという場合はご教授ください。アドバイスよろしくお願い致します。

  • VBAでシートコピー後、シート名が重複している時の処理

    今日からVBAを勉強し始めました初心者です。会社である作業をしており、VBAでの作業がうまくいかなくて困っております。 「実績」というシートを11/5に作ったとします。 このシートを、11/9にマクロを実行した時に、   ・11/5のシートをコピーし複製を作る(この時点ではシート名は「実績(2)」)   ・この時、シート名は「11-05」となるように設定済み    (実績シートの「G1」セルから、日付を取得しファイル名とする) としています。 この時、まれに同じ日に間違ってマクロを動かす為、同じシート名となりエラーが出てしまいます。 利用者が不慣れなため、エラーの対処方法を教えることでは対処が難しい状態で、できればマクロで対応しようと思っています。 以下、シート名が重複しない場合のみ利用可能なデータです。 '前回作成した「実績」のコピー&リネーム Dim mySheet As Worksheet Set mySheet = ActiveWorkbook.Worksheets("実績") mySheet.Copy after:=Worksheets("実績")   '実績sheetの後ろにコピー ActiveSheet.Name = Format(Range("G1").Value, "m-dd") ' シート名を変更する 他の質問を検索しましたが、コピーしたファイルをリネームし、 そのリネーム結果が重複している場合の記述方法がよくかわりませんでした。 重複している場合は、できればメッセージボックスで「yesno」の選択で上書きの選択ができればと思っています。 (VBAでは一度削除してから新規に作るようですが、上の重複のからみで、よくわからなくなっています) よろしくお願いします。

  • エクセルVBAで、シートをコピーした際、コピーされた新しいシートのほう

    エクセルVBAで、シートをコピーした際、コピーされた新しいシートのほうを指定する言葉を知りたい。 コマンドボタンにて、(1)内訳用シートをコピーで増やす。(2)新しいシートの番号を連番になるよう1増やす。(3)新しいシートのほうは入力しやすいよう、入力欄を消去する。シート名も1.2.3...とふえていくようにしたい。 新しくコピーされたほうのシートを指定したい場合はどのようなVBA用語になりますか? いまは、元のシート指定方法しかわからないため、元シートの前にコピー作成し、元シートのNoを1増やし、データ消去で対応していますが、これだと、シート名に表示される内訳(1)(2)・・という番号になるので、できれば、コピーしたほうのシートを指定して、Noを1増やし、データ消去できれば解決するとおもうので。。いま、使ってるVBAはこんな式です。 ちなみにK6はシートNo、("B10:H30")("J10:K30")は入力欄です。 Private Sub CommandButton1_Click() ActiveSheet.Copy Before:=ActiveSheet Range("K6").Value = Range("K6").Value + 1 Range("B10:H30").ClearContents Range("J10:K30").ClearContents ActiveSheet.Select ActiveSheet.Name = Range("K6").Value End Sub

  • シート名が変わる場合のVBAの設定の仕方

    VBAを勉強しながらエクセルで顧客管理シートを作っています。 全顧客の売上データが入ったシートが1枚あり、そのデータを各顧客シートにあるコマンドボタンを クリックすることにより、該当する顧客のデータをその各顧客シートに表示させるようにしたいと 考えています。 顧客が増えたりするとシートを増やすのですが、VBAの参照先シート名が固定されているため、 汎用的ではありません。 そこで顧客シートのオリジナルを作っておき、新しい顧客ができた場合はそれをコピーして使用する ようにしたいと思います。 シート名が変更になった場合でもVBAを書き直したりすることがないようにするにはどのようにしたら よいでしょうか? Excelのシート構成は ”売上データ”シート:ファイル名固定 ”○○会社”シート:ファイル名任意 ”△○会社”シート:ファイル名任意 よろしくお願いいたします。

  • エクセル:イベントが書かれたシート名を取得したい

    シート[Sheet1]に値が入力された時、  (1)その入力された値(というか"Target")  (2)Targetが入力されたシート名 を持って、SheetInputというプロシージャへ飛ぶ、というコードをSheet1に書きました。 (シートを右クリックして「コードの表示」を選択して出てくるところに) Private Sub Worksheet_Change(ByVal Target As Range) Dim SName As String SName = ActiveSheet.name SheetInput Target, SName  '(1)Target、(2)SName End Sub 「シート[Sheet1]に値が入力された時」に動き出すイベントなのだから、 (2)は必ず「Sheet1」ですが、シート名が変わってもこのコードをそのまま使えるように、 SName = ActiveSheet.name と書いていました。 しかし、 別のマクロ上で「Sheet1に値を書き込む」と書いた結果としてこのSheet1のWorksheet_Changeイベントが動いた場合は、 SNameが「Sheet1」にならないことがあります。 それでもSName = "Sheet1"とは書きたくなく、 かつ、常に「このWorksheet_Changeイベントが書かれているシート名」を変数SNameに取得したいのですが、 このイベントが書かれているシート名を取得する関数はあるのでしょうか。 (伝わりますでしょうか?)

  • VBAでのワークシートコピー制御について

    エクセル97でのVBAについてですが AというブックのデータをBというブックにコピーする時にシート名をブックAのA1の文字を使用しているのですが この時にコピーした場合にシート名がいままで使用したことのない文字の場合にはうまくいくのですが、スデに取得しているシート名の場合に実行時エラーが出てしまいます  出来ればスデに取得しているシート名の場合にはそのシートに上書きして、いままで取得していない場合には 新規にシートを新たにつくってそこにデータをコピーできるようなコードがわからなくて困っています だれかたすけて下さい

  • EXCEL2007 VBA アクティブでないワークシートの名前を取得したい

    Sheet1とSheet2の【A1セル】【B1セル】には以下の処理が入っています。また2つのシートにはVBAを使って、再計算がされるたびに自身のシート名を表示するメッセージボックスを出力する処理を記述しています。 【A1セル】  リアルタイムで値が送られてくる。 【B1セル】  A1セルの値を使った式 【VBA】  Private Sub Worksheet_Calculate()   MsgBox **************  End Sub ここからが質問なんですが、Sheet3をアクティブシートにしている場合、VBAの「*****」の部分に何と記述すれば、再計算されたシート名を取得できますか?

  • エクセルにて シート名を取得し、数式に活用するには?

    1月というシート名と、2月というシート名があります。 2月のシートのセルB1には、='1月'!A1という式が入っています。 月が3月に変わった時に、2月のシートをコピーして、 シート名を3月と書き換えると、3月のシートのセルB1の式が ='2月'!A1と自動でなるようにしたいのです。 VBAを使わずに実現できる方法が有りますか? 3月のシートのセルB1の式を='2月'!A1に自動で変えたいと 言いましたが、実際には ='(シート名の数字を取得-1)月'!A1 といった数式にしたいのですが、可能でしょうか?

  • VBA アクティブなセルのシート名を取得したい

    エクセル2010使用です。 VBAで、アクティブなセルのあるシート名を取得する方法を教えてください。  マクロ.xls (マクロシートA1) ←今回のマクロを書き込んだファイル  参照.xls (参照シートA1)  入力.xls (入力シートF3) この3つのエクセルファイルを開きます。 ( )内はそれぞれの前面にあるシート名と選択されたセルです。 入力シートのF3にカーソルをおいて下記マクロを実行すると   MsgBox ActiveSheet.Name & ActiveCell.Address 「マクロシート F3」と返されます・・・ ほしい結果は「入力シート F3」なんです。 このような場合にアクティブセルのあるシート名を取得する方法があれば教えてください。 よろしくお願いいたします。

  • エクセルVBAの貼付けについて

    エクセルVBAの貼付けについて シートAとBがあって、シートBの1~7列をコピーし、シートAの最終行に貼り付ける方法を教えて下さい。 下記のように書いてみたのですがダメでした。 Sheets("B").Select Rows("1:7").Select Selection.Copy Sheets("A").Select With Range("A1").End(xlDown).Offset(1, 0) .ActiveSheet.Paste End With

専門家に質問してみよう