• ベストアンサー

シート名が変化するシートをマクロで選択する方法は?

1.シート名「フォーマット」にはデータ入力用定型フォーマットがある。 2.データを入力する際は「フォーマット」シートは残しておき、「フォーマット」シートをコピーしてシート名を「1000」に変更する。   次回データ入力する際は同様にシートコピー後、シート名「1001」「1002」という具合に変更して使用する。 3.シート「1000」をアクティブにし、マクロ登録をしてある図形ボタンをクリックして、マクロ実行。  このマクロは別途作成済で、事前に用意しておいたシート「作業用」にシート「1000」のデータを貼り付け、データ変換処理を行います。 4.変換処理後のデータをシート「1000」に貼り付ける。 という一連の流れの中で、「フォーマット」シートをコピーして使用する関係で、シート名が変化します。 上記4の段階でシート「1000」を選択するためにはどのようなマクロ記述をすればよいでしょうか?

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.5

No.4です。 外れていなくて良かった。 「hogehoge」は、メタ構文変数と呼ばれるもののひとつで、要するに「仮の名前」です。 hogeやhogehogeが何故かよく使われています。 この場合、作成するマクロの名前をhogehogeと仮定しています。 作業用シートから引数で指定されたシートに値を貼り付けるマクロの例を挙げておきます。 この例の場合、「作業用」シートのC1セルの値を引数で指定されたシートのC1セルに値だけ貼り付けています。No.4で示したSampleと組み合わせてお試しください。 Sub hogehoge(sSheetname as String)  Sheets("作業用").Range("C1").Copy  Sheets(sSheetname).Range("C1").Select  Selection.Pastespecial Paste:=xlValues End Sub

duelist707
質問者

お礼

早々に追加ご回答いただき、ありがとうございます。 教えていただいた方法で無事に目的のマクロを完成することができました! つたない説明だったにもかかわらず、私の意図する所をくみ取って、的確にズバリご回答いただいて本当に感謝感謝です。 mt2008さん、ありがとうございました。

その他の回答 (5)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.6

#1です。 考え方を述べただけで、そのまま使えるコードを呈示した訳ではありません。「シート名」を記録しておく例も呈示されていますが、ここではオブジェクトとしてのシートを記録?しています。 複写したシート上のボタンから実行するマクロに少しつけ加えて、 Sub test() Dim sh As Worksheet Set sh = ActiveSheet sh.Range("a1").Copy Sheets("作業用").Range("a1") '作業用シートでの秘密の処理を記述 Sheets("作業用").Range("a2").Copy sh.Range("a2") End Sub とすればよろしいかと。 Copyの所も簡単に記してありますので、値複写がご希望の場合などはアレンジなさってください。

duelist707
質問者

お礼

追加のご回答をいただき、ありがとうございます。 おかげさまでNo.5でmt2008さんがご回答いただいた内容で無事完成することができました。 mitarashiさんの方法もほぼ同じようですね。 色々と勉強になりました。どうもありがとうございました。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.4

質問を取り違えていたらごめんなさい。 データを貼り付ける処理は、「作業用」シートから引数で指定されたシートにデータを貼り付けるマクロを作っておいて、3で起動するマクロを以下の様なマクロに変更し、つくって置いたマクロにシート名を渡すってのはどうでしょう? Sub Sample() Dim sSheetname As String sSheetname = ActiveSheet.Name 'ボタンが押されたシート名を記憶 Call Macro3 'いままで3で呼ばれていたマクロ Call hogehoge(sSheetname) '「作業用」シートからこのシートにデータを貼り付けるマクロ End Sub

duelist707
質問者

お礼

ご回答ありがとうございます。 書いて頂いた、ボタンが押されたシート名を記憶→いままで3で呼ばれていたマクロ→「作業用」シートからこのシートにデータを貼り付けるマクロ、という流れで合っていると思います。 しかし、私もまだまだ素人なもので疑問ばかりですみませんが、「引数で指定されたシートに~」というところは具体的にどのような記述になるのでしょうか? また、hogehogeの部分はこのままでも大丈夫なのでしょうか? 初めて見るものだったので、どんな意味があるのかもよくわかりませんでした。ついでに教えていただけるとありがたいです。 今のところ、期待する答えに最も近い気がしますので、ぜひぜひまた追加で教えてください。 よろしくお願いします。

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

質問文はもう少し要点を絞って表現できないのかな。 シートの指定は、VBAでは、下記しかない (1)名前を指定 Sheets("名前") (2)位置を指定 Sheets(2)のように (3)Activeシート (4)previousなど ーー この中で位置は不安定(操作者が質問者以外だと動かす恐れが有る)。 名前が都度変わるなら、どうしたら確実に捉えられるかは、質問者しかわからない。その辺は知恵を出して、守れるルール!を質問者が決めて、こうしたいが、コードは?と質問すべきだ。これは質問者の問題で、実行可能なことのタイプは質問者が決める(知っている)ことなんですよ。そしてそのルールを守ることも。 本当は自動でやらないで、その都度処理するシート名を操作者に指定させるのが本筋。 ーーー コピーした名前は同一ではありえないし、だんだん増えて付番されるなら、最高値の番号のシートを処理するのはどうだろう。 ーー 全角数字でシート名が増やされるものとする。半角の場合は下記コードを少し変えればよい。 その際数字として考えて最大のシート名を捉える例。 Sub test01() Dim sh As Worksheet fst = "y" For Each sh In Worksheets If IsNumeric(sh.Name) = True Then If fst = "y" Then n = StrConv(sh.Name, 8) ms = Sheets(1).Name fst = "N" End If n = StrConv(sh.Name, 8) If m < n Then m = n ms = sh.Name End If End If Next MsgBox ms End Sub

duelist707
質問者

お礼

ご回答ありがとうございます。 説明が下手でうまくお伝えできず、申し訳ありません。 下の回答の方もご参照いただきたいのですが、シート名は入力者が指定します。 また、決して連番という訳でもなく、シート名の数字が最も大きいシートを選択するという訳でもありません。 例えば、1000→1001→1002と連番でシート名を付けたが、1000に戻ってマクロ実行する、ということも考えられます。 ですから、「マクロ実行した時のシート名の所に戻ってくる」際のシートの選択方法がわからないのです。 ぜひまた追加で教えてください。 よろしくお願いします。

  • _Kyle
  • ベストアンサー率78% (109/139)
回答No.2

ご質問の趣旨を取り違えていましたらすみません。 「1000」,「1001」,「1002」……というふうに、 入力処理の都度シートを増やしていくブックについて、 「シート名の数字が最も大きいシートを選択するには?」 ということかと思ったんですが…。 ------------------------------------------------ 動作の概要  ブック中のシートを順に回して、  シート名が数字で、かつその数字が最大であるシートを見つけ、  そのシートをオブジェクト変数myShtに格納する。  さらに、そのシートを選択し、シート名を表示する。 Sub Sample()  For Each tpSht In Worksheets   If IsNumeric(tpSht.Name) Then    If CLng(tpSht.Name) > myNam Then     myNam = tpSht.Name    End If   End If  Next tpSht  Set mySht = Worksheets(myNam)  mySht.Select  MsgBox "最新のシートは" & myNam & "です" End Sub ------------------------------------------------ あるいは(処理の流れから想像するに) 最新のシートは「フォーマット」シートの右隣にありそうに思われるので、 単に「フォーマット」シートの右のシートを選択すれば良いのかも。 動作の概要  「フォーマット」シートの右にあるシートをオブジェクト変数myShtに格納する。  さらに、そのシートを選択し、シート名を表示する。 Sub Sample2()  Set mySht = Worksheets("フォーマット").Next  mySht.Select  MsgBox "最新のシートは" & mySht.Name & "です" End Sub 以上ご参考まで。

duelist707
質問者

お礼

ご回答ありがとうございます。 下でも回答していますが、「シート名の数字が最も大きいシートを選択するには?」という訳ではありません。 ご説明するのも難しく、やりたいことをご理解いただくには何回かのやりとりが必要かとも思っています。 説明が下手で本当に申し訳ありません。 下と同じ説明になりますが・・・ シートコピー後のシート名は手入力で、しかも入力者によって違うことになるのですが、 基本的には”4桁数字”で、頭1桁目で入力者を分けることとして、 入力者Aは「1000→1001→1002・・・」、 入力者Bは「2000→2001→2002・・・」、 入力者Cは「3000→3100→3200→3101→3001・・・」、 だったり不規則で、必ずしも1ずつ増える名前の付け方でない入力者もいる、 という想定をしています。 また、流れ3で用意してある別のマクロを実行するとシート「作業用」で一旦データ変換されたものが出来上がります。 それを流れ3で実行した時のシート名(前述のように固定ではありません)の所に戻ってきて貼り付けしたい、 ということになります。 この際のシートの選択方法がわからなかったので、ご質問させていただいた次第です。 ぜひまた追加で教えてください。 よろしくお願いします。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

こういう事でしょうか? Sub test() Dim sh As Worksheet Sheets("format").Copy Before:=Sheets(1) Set sh = ActiveSheet sh.Name = "1000" sh.Range("a1").Copy Sheets("作業用").Range("a1") Sheets("作業用").Range("a2").Copy sh.Range("a2") End Sub

duelist707
質問者

お礼

ご回答ありがとうございます。 テストしてみましたが、これだとシート「format」から1回目のコピーをした時に コピーしたシート名が「1000」に自動的になってしまいます。 また、2回目にシート名「1001」にしたい時には対応できないようです。 シートコピー後のシート名は手入力で、しかも入力者によって違うことになるのですが、 基本的には”4桁数字”で、頭1桁目で入力者を分けることとして、 入力者Aは「1000→1001→1002・・・」、 入力者Bは「2000→2001→2002・・・」、 入力者Cは「3000→3100→3200→3101→3001・・・」、 だったり不規則で、必ずしも1ずつ増える名前の付け方でない入力者もいる、 という想定をしています。 答えに近いかと一瞬思えたのですが、もう少しという感じです。 ぜひまた追加で教えてください。 よろしくお願いします。

関連するQ&A

  • EXCELでマクロを使わずに図形の自動入力

    シート1に定型表を作成しシート2に各データー、シート3に図形データをいれ シート1で入力規則で作成した品種を選択するとデータが変更する所までは できたのですが、図形の自動入力方法がわかりません。できればマクロを 使用せずにと思っています。どなたかご指導お願いします。

  • 別シートにコピペするマクロの作り方?

    シートAのデータをコピーして、 そのデータを別シートに貼り付ける…というマクロを使っています。 貼り付ける先のシートには、どんどんデータがたまっていく倉庫のような役割です。 私がくんだマクロは、次のような手順で処理をします。 1.まず、そのシートのA1を選択し、 2.《CTRL+下》のようなコマンドで、「データが初めて空白になるセル」まで移動します。 3.そして、そこに「はりつけ」。 4.貼りつけが終わったら、もともといたシートに戻ってくる。 ・・・そういうマクロなのですが、あまりに洗練されていないというか、 ボタンをおすたびに、コンピューターの画面が切り替わって、 「ああ。頑張って作業をしてくれているな」 ということが、わかるマクロです。 ・・・ たしか、こうした一連の作業を、もっと高速処理できるマクロの組み方があったように思うのですが、どのようなプログラムをくんだらよいでしょうか?

  • シートコピーと値の転記 シート名変更マクロを

    エクセル2010で マクロのご教授をお願いいたします。 BOOK1の Sheet1 A1~A10に 数値1000が入力されているとして Sheet1のシートのコピーを作成 Sheet1にもどり A1~A3の値だけコピーして 作業列C1に 値を貼り付け A1~A10 をクリアーにしたのちに  ※↓が うまくいきません。 A1の値→ A8 A2の値→ A9 A3の値→ A10 に入力 させるマクロは どうなるでしょうか? マクロの記録で いろいろと やってみましたが どうも ※の部分が うまくいきません どう考えてもエクセルに対しての 理解不足だと思われますが、ご教授のほどお願いします。 おこなった自動マクロの記録は↓です。 マクロの記録開始する 名前 シートコピー Sheet1を右クリックして移動またコピー コピーを作成にチェックをいれ OK コピーシートが作成される。 Sheet1をクリックしなおして A1からA3をコピー  作業列として C1に 形式を選択して貼り付け 値 A1~A10を delete でクリア C1~C3を選択 コピー A8に 形式を選択して貼り付け 値 マクロの記録終了。 あと Sheet1をコピーするさいに シート名を前日の日付に自動的に変更できればと いいなと 考えておりますが できるのでしょうか? 例えば、本日でいえば シート名→ 0112 のような シート名を変更できればすてきだと おもいます。 どうぞ よろしくお願いします。

  • 一時的にファイル名、シート名を変えて処理することは出来ますか?

    VBAを勉強中で、分からないので教えてください。 2つのWorkbook間でCopy、Pasteを繰り返し、必要なデータ を一覧に書込みするマクロを作成する時 Excelデータ(同じフォーマットでセルに入っているデータが少し ずつ違う)で、異なるファイル名、異なるシート名になってしまって いるものをマクロで処理をしたいのですが、VBAで書き込む時 にはWorkbooks("○○").Worksheets("○○")と指定しなくて は動作してくれないので、どのように指定したらいいか困っています。 「直前にアクティブだったWorkbook指定する」「先頭に位置する sheetを指定する」なんてコードがあれば、一番いいのですが、 そういうコードはあるのかもわかりません。 最終的には"あるセル"に入っているファイル名で保存してしまう ので、一時的に仮ファイル名、仮シート名に変えて、後に削除 して処理をすればいいかなとが思うのですが、どうやって処理 したらいいのかわかりません。 やりたい事をうまく説明出来ているかわかりませんが、ファイル名、 シート名が違う元のデータから、一覧表へ書き込むマクロを組み たいのです。その際の元データの指定方法を知りたい or 一時的 に名前を変えて処理する方法を知りたいです。 一覧表へ書込みをした後にメールで添付してその元データ (”あるセル”にファイル名変更したもの)を送り返したいのですが、 メールへ添付する事までマクロで出来ると助かります。マクロで そこまで出来ますか?これも合わせて教えていただけたらと思います。 つたない説明ですみませんが、よろしくお願いします。

  • EXCELマクロ シートの追加、シート名の変更

    おはようございます。 1つのブックで1ヶ月分のシートをつくるマクロを考えています。 月次処理シートのA列に例えば8月であれば、 0801 0802 0803・・・と入力。(もしくは0801から0831までをマクロで自動表示) シートを1ヶ月分自動で生成するマクロを実行して、シート名を0801、0802、・・・とそれぞれ自動で変更。 1ヶ月分のブックの完成としたいのですが、どういうマクロを組めばよいでしょうか。

  • エクセル マクロでシート名変更

    Excelで、作成してあるフォーマットに新しく数値をコピーして完成した表を別のブックに移動して保存しようと考えています。その際、シートのA1セルの値を自動的にワークシート名に持ってきたいのですが、やり方が分からず困っています。 シート名のところ以外は、なんとなくマクロの記録を使ってできそうなのですが、A1セルの値を自動的にシート名にすることができずに引っかかっています。 いい方法があれば教えてください。 よろしくお願いいたします。

  • マクロ シート名変更

    マクロ シート名変更 Sheet1,Sheet2,Sheet3の名前を、 Sheet1のA1~A3に入力してある名前にしたいときどうすればいいでしょうか。 そして、 次に、A1~A3の入力を変えたときにSheet1,2,3の名前も 変わるにはどうやればいいんでしょうか。 お願いします...

  • シート名変更のマクロ

    QNo.4400605『エクセルでシート数を指定して挿入するマクロはどうやって作ったらいいでしょうか。例えばA1セルに挿入したいシートの数を入力するとその数のシートが作成されるというようなマクロを作りたいのですが』という質問をしてそれについては解決しましたが、作成されたシートの名前を1~40のような数字に変更するマクロが分かりません。作成するシートの枚数は決まってなく、25シートであったり、40シートだったりします。A1:A40に1~40と変更後のシート名を入力して、それをシート名に反映させるマクロは作れたのですが、毎回シート枚数が変わるので「インデックスが有効範囲にありません」と出てしまいます。型としては、元シートがあり、そこでシート数を指定しシートを挿入し、そのできたシートに数字の名前をつけたいと考えています。長々なりましたが教えて下さい。

  • エクセルマクロ シート名の変更方法

    エクセル2000を使用しています。 シート名「1月」~「12月」の12枚のシートと、これらとは別の1枚のシート(仮に、シート名:sheet13とします)があります。 たとえば、sheet13のA1セルに「4」(開始月)を入力するとシート名「1月」~「12月」のシート名が「4月」~「3月」に変更されるマクロを組みたいのですが、皆目見当がつきません。シート名が重複するので一旦ぜんぜん違う名前に変更しておいて、その後正しいシート名をつける。という手順だとは思うのですが、具体的なソースが良くわかりません。アドバイスよろしくお願いします。

  • エクセル2000 マクロ

    エクセル2000を使用しています。マクロを使って定型の入力フォームへの入力を素早く、正確に行えるようにしたいと思っています。 「申請書」と「標準事務用品」の2種のシートに分かれており、「申請書」が定型の入力フォーム、「標準事務用品」は入力フォームに反映させたいデータが一覧になっています。 「標準事務用品」のデータの一覧は5つの項目があり、左から1.品物 2.商品名 3.品番 4.メーカー名 5.申請 となっています。 5.申請の列はオプションボタンを1行ごとに1つ設けてあり、オプションボタンがオン(True)の時に、同じ行の1~4の項目のデータを「申請書」シートの入力フォームの任意のセルへコピーしたいです。 何かよいマクロの記述方法はありますでしょうか。

専門家に質問してみよう