[[20170804035844]] 『セルA1記入値のシ−トを呼出してセルB1記入値』(桜の園) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セルA1記入値のシ−トを呼出してセルB1記入値のシ−ト名でコピ−&保存する。』(桜の園)

お世話になります。
毎月の在庫リストにエクセルシ−トを各月1枚あて使用し、1612 1707という年+月値の4桁名前を付けて保存しています。
毎月のチェック時に必要なシ−ト名を直截マウスでクリックして検証1612 検証1707という名前でコピ−して検証作業を行って保存する形で原本シ−ト自体への変更は行っておりません。
之を新規に 検証というシ−ト名のシ−トを作成し セルA1に検証するシ−ト名を入力し、当該シ−トが実際にブック内に在ればシ−トコピ−を行って当該シ−トをシ−ト検証のB1セルに記入したシ−ト名に変更して、アクティブシ−トとして表示し作業終了後に当該B1セル名で保存する手順をマクロで処理したいのですが、対象となる検証必要なシ−ト名が毎月替わるため、どのように記載すれば宜しいのか全く解りません。
御手数を掛けて申し訳ないのですが 出来れば必要なマクロ文自体を直截ご教示いただけますよう 御願いいたします。 拝

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 日本語が分かりにくいです。

 「検証」シ−トの「A1」と「B1」に何を記入するのか、
 具体例を2回分(今月分と来月分)書いてください。

(半平太) 2017/08/04(金) 08:05


御指摘ありがとうございます。

今月の シ−ト名 検証 の

A1には 今回検証作業を行う元デ−タ−シ−ト名 の 1707

ブック内に シ−ト名 1707 があれば 1707 を コピ−して シ−ト名を B1セル に記入してある
検証1707 に変更したい という形です。

A1には 1707 B1には 検証1707 という文字列が記入されています。

来月 は A1には1708 B1には検証1708 と 記入して作業予定となります。

宜しく御願いいたします。
(桜の園) 2017/08/04(金) 09:00


 いつも「検証」をA1の「1707」の前に付けるなら、A1の「1707」だけで済むと思うのですが、
 B1にわざわざ「検証1707」と入れると言う事は、「検証1707」とは限らないと言うことなんですか?
 例えば、「再検証1707」とかとすることもあり?

 その場合でも、いつもA1セル(例:1707)が後に付くなら、B1は「検証/再検証」だけ入れればいいと思うのですが、
 わざわざ「検証1707」と入れると言うことは、A1セルの通りとは限らないと言うことなんですか?
 例えば、A1セルが「1707」でもB1は「検証1707-2」などと入れることもあり?

 以上、2件の疑問に対して、私が考えた例が無いなら、A1セルに「1707」と入力するだけで済むのではありませんか?

(半平太) 2017/08/04(金) 09:33


お世話になります。
前提として1ブック内に 1601 1602 1612 1701 1707 という形で毎月1枚づつの在庫明細が原始デ−タ−として格納されています。

原始デ−タ−を直截修正せずにA1セルに記入したシ−ト名の該当シ−トをコピ−して当該コピ−したシ−ト名をB1セルに記入したシ−ト名に変更して保存するという作業になります。

従って 毎月1枚の在庫明細があるため呼び出して作業するシ−ト数は1年に12枚+検証済のシ−ト12枚の最低24枚となります。

検証が終了したシ−ト(例えば検証1707)を再修正する場合にはA1セルには 検証1707 と記入して B1セルには再検証1707 というような名称で保存すれば 何時でも原始デ−タ−には手を付けずに修正を可能にしたいのです。

単純にはセルA1へ記入したシ−ト名のシ−トを呼出して コピ−を行い コピ−したシ−ト名をセルB1に記入した名前に変更して 保存する という形マクロ文を 教えていただきたいという形でございます。

質問文の記載が不明朗で申し訳ございませんでした。

(桜の園) 2017/08/04(金) 12:39


 そう言う事情でしたら、以下のマクロで。

 「検証」シートの「シートモジュール」に貼り付けてください。「標準モジュール」ではないです ← (重要)

 Sub copyYYMMsheet()
     Dim wsName As String
     Dim errNum

     wsName = CStr(Range("A1").Value)

     On Error Resume Next
     Worksheets(wsName).Select
     errNum = Err.Number
     On Error GoTo 0

     If errNum = 9 Then
         MsgBox "A1セルに入力されたシート名は存在しません"
         Exit Sub
     End If

     Worksheets(wsName).Copy after:=Me
     ActiveSheet.Name = CStr(Range("B1").Value)

 End Sub

(半平太) 2017/08/04(金) 13:07


私も、半平太さん同様のコードを思い浮かべたのですが、シートコピーしてリネームするだけなら、手作業でも数秒だし、本当にこの作業をマクロ化したいのだろうか?、と疑問に思いました。 実はコピー元は複数ブックあって…、とかあったりしませんかね?
(???) 2017/08/04(金) 13:24

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

シ−トモジュ−ルに貼り付けて実行致しましたら 最終行から3行目で Me が不明ですとなり ストップ致しました。

この部分が動けば コピ−されたシ−トが アクティブシ−トとして表示されますでしょうか?

またコピ−元ブックは1個 です。

恐縮ですが 今一度 お教えください。

(桜の園) 2017/08/04(金) 17:16


本当にシートモジュールに貼りましたか? Me とは、自シートを表すオブジェクトなので、シートモジュールには必ず存在するものです。 標準モジュールに貼っていたりしませんか?

または、Meの後ろにコピーしている最後の2行を、以下のように先頭シート明示に変えると、どうなりますか?

     Worksheets(wsName).Copy after:=Sheets(1)
     ActiveSheet.Name = CStr(Sheets(1).Range("B1").Value)
(???) 2017/08/04(金) 17:50

多々御指導ありがとうございました。

御指摘のように標準モジュ−ルのModule1にマクロ文を記入していたため当該部分に貼付しておりました。

Dim str As String

 str = Worksheets("検証").Range("A1")
 Worksheets(str).Select
Worksheets(str).Copy After:=Worksheets(Worksheets.Count) のような形で 必要なシ−ト名称を記載したセル値 を str という御説明部分に当てはめましたら 綺麗にシ−トをコピ−出来ました。

御陰様で月曜日までに記入数値の重複脱漏など必要なチェックが出来そうです

本当に御多用中にも拘わらず初心者の身勝手な質問に親切な対応を頂戴致しました。

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


(桜の園) 2017/08/04(金) 18:17


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.