• 締切済み

エクセルVBA シート追加に伴うシート名入力

宜しくお願いします。 勤怠管理(タイムカード)の表の扱いに伴って,合理的にしてみたいと思いました。 一番左シートが入力シート(名前/時給など)になっており,それから右のシートが各個人タイムカードになってます(タイムカードの雛形のコピーをしながら増やしていた)。 入力シートに「名前」を追加すると雛形シートが追加になり(シート名が「名前」),また入力シートの「名前」を消すとそのシートがなくなるようなものがあると助かります。 単純なシート追加とかは組めるのですが,それ以上になるとチンプンカンプンで...。

みんなの回答

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

> 「入力シート」での「名前」のタテ(C4が最初の名前でC5,C6...)のセル以外でもクリックするとシートの追加になります。 ninja_macさんが、名前の欄を指定してないんだからどこをダブルクリックしても出来るように書いただけです。 ではとりあえずC4~C100に指定してみます。 > 時給などの諸設定を入力すると、その人のシートの所定のセルに数値が反映する どこのデータをどこに持っていくのか明確じゃないので、名前の右隣のセルにあるデータを新しいシートのA2セルに転記するようにしてみました。 Dim nm Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("C4:C100")) Is Nothing Then Exit Sub If Target.Value <> "" Then Sheets("雛形").Copy After:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = Target.Value Sheets(Sheets.Count).Range("A2").Value = Target.Offset(0, 1).Value Else On Error GoTo line Sheets(nm).Delete End If Cancel = True Exit Sub line: MsgBox "その名前のシートが見つかりません。", vbCritical, "Σ( ̄ロ ̄lll) " End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) nm = Target.Value End Sub

ninja_mac
質問者

お礼

ありがとうございます。 とても勉強になりました。 感謝いたします。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

雛形という名前のシートがあるものとします。 1.標準モジュールではなく、入力シートのシートモジュールに以下のコードを張ってみてください。(入力シートのタグを右クリックで「コードの表示」でシートモジュールが出ます。) 2.入力シートに新しい名前を追加したら、その名前のセルをダブルクリックしてください。⇒新しい名前のシート(雛形をコピーしたもの)が一番右側に追加されます。 3.また入力シートの「名前」を消したら、その直後に消された空白セルでダブルクリックしてください。⇒その名前のシートを削除します。 以下のコードをコピペ↓ Dim nm Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Value <> "" Then Sheets("雛形").Copy After:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = Target.Value Else On Error GoTo line Sheets(nm).Delete End If Cancel = True Exit Sub line: MsgBox "その名前のシートが見つかりません。", vbCritical End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) nm = Target.Value End Sub

ninja_mac
質問者

お礼

ありがとうございます。 目からうろこです。勉強になりました。 もう二点よろしければ、お願いします。 「入力シート」での「名前」のタテ(C4が最初の名前でC5,C6...)のセル以外でもクリックするとシートの追加になります。 1.クリックできる範囲指定 2.時給などの諸設定を入力すると、その人のシートの所定のセルに数値が反映する 自助努力にしないで申し訳ないのですが、宜しくお願いします。

関連するQ&A

  • VBA シート操作

    エクセル2002使ってます。 VBAにて雛型のシートを27枚コピーし、集計用のシートに入力されている名簿の名前の通りにシート名を変更したいと思い、式を組みました。 しかし、雛型のコピーまではできましたが、シート名を上手く変更できません。 シート名を変更したいシートは雛型(2)~雛型(28)の名前で、ブックの一番左から並んでます。 これをシート名変更するにはどうすればいいでしょうか?

  • Excel セル入力データをシート名に反映させるには?

    大変お世話になります。 Excelにて、勤怠表を作成しているのですが、 休日表を作り、そのシート名を「2007年度休日」としています。 そして勤怠表のシート名「山田」(各個人名を入力)の各シートに リンクさせているのですが、シート「2007年度休日」の セルA2 部分に 2007 と入力しているデータを反映させて セルA2を書き換えるごとに シート名も一緒に変更出来ればと思うのですが 出来ますでしょうか? 分かる方、お教えください。宜しくお願い致します。

  • エクセルでシートを追加するマクロについて

    マクロ初心者ですよろしくお願いします エクセルでシート1は名前などの入力用、シート2はフォーム用として作成しております シート1のA1から最大でA20(変動あり)に名前を入力すると名前の数だけシート2のコピーが追加され、シート名も入力した名前に変更する場合のマクロはどうすれば良いのでしょうか? またシート2のB1にも入力した名前を表示させたいです ご教授お願いいたします

  • EXCEL シート名の保護

    EXCEL シート名の保護 雛形となるワークシートを毎月コピーして使っているのですが、よくコピーを忘れて、気がついたら雛形シートに書き込んでしまっているミスが多発しています。 コピーした月毎のシートは、その後シート名をその月にし、マクロを実行するとその月の日付など細かな書式の変更が行われます。 マクロは、シート名がその月になっていないとエラーが出ます。にも関わらず雛形が書き換えられるということは、このミスを犯した人は、シートのコピーは忘れたけれどもシート名の書き換えは忘れなかったということです。(だったら、自分が書き換えようとしているシートの名前を見て気づけよ・・・) そこで、雛形シートのみ、シート名が書き換えられないようにすることは出来るでしょうか? とりあえず、   「ツール」→「保護」→「シートの保護」 を試みたのですが、保護項目を全てチェックしても、シート名の保護は出来ませんでした。 よろしくお願いします。

  • エクセルVBA ワークシート操作について

    エクセル2000 VBAで ワークシートが左から順番に 入力フォーム⇒加工費単価マスタ⇒出荷日報(原紙)と 3個あり4個目に出荷日報(原紙)をコピーしたワークシートを 入力して⇒テキストボックス1 (日付入力します出来れば、日付入力の指定方法⇒テキストボックスの入力制限方法も教えていただきたいです)に入力した名前を ワークシートに付けて保存したいのですが? 翌日は また左から4番目の位置にコピーされ 右に行くほど古い日付の順番にしたいです。 説明が不足していましたら連絡お願いします。

  • エクセルで 1つのシートにデータを入力しておき、

    エクセルで 1つのシートにデータを入力しておき、 別のシートで そのデータを抽出する場合 どのように設定すればいいか教えてください。 たとえば、データのシートには 会員番号、名前、会費残高 が一覧になっており、 会員個人あてに 会費残高表を 送付したいときに、 一人ずつ 入力するのではなく、 会費残高表のひな型を作っておいて、データシートの一覧の人が、順番に印刷できるような・・ 以前、使ったことがある(誰かが作ってくれた)ので、可能と思います。

  • excel vba シートがなければコピーしたい

    excel vba で教えてください sheet名0を雛形に、使用者が1 2 3のsheet名でコピーして利用できるようにしたい。1はあるのでコピーを作らない。2はないのでsheet名0をコピーして作るといったように現在sheet2があるや否やで作成するや否やを判断してsheet copyをしたい。 すべてのsheet を名前をしらべつつ判断したいのです 教えてください

  • エクセルVBA シートの追加と名前の変更

    エクセルに「原本」シートがあり、マクロを実行すると原本シートを5シート(5日分)追加し、 (1)一つ目に追加したシートのB2のセルに「追加する日の日付け」を入力し、 シート名にその日付をyymmdd形式で名前を付け、 (2)二つ目に追加したシートのB2のセルに「追加する日の次の日の日付け」を入力し、 ・・・同様の処理・・・ (6)一つ目の追加したシートをアクティブシートにする。 というように、連続した5日分のシートを追加したいと考えています。 VBAの全くの初心者ですので教えていただけると大変助かります。 そんな素晴らしいことが短時間で教えていただけるものなのでしょうか。

  • エクセル 規則的に増えるシートのセルを集計したい

    こんにちは。エクセル2003で以下のことを実行する方法を教えてください。 ・ブックの仕様 日報の雛形シート(シートの名称は、雛形)を先頭(左端)に配置 日報本体(シートの名前は、その日の日付を半角数字で和暦、yy.mm.dd) 担当者が雛形シートを雛形シートのすぐ右の場所にコピーし、シートの命名ルールに従ってリネームしてからデータを入力 ・やりたいこと あるセルに入力されたデータを、月ごとに合計したい 具体的には、その日に消費した重油のリッター数が入力されているセルがあり、その下に、今月の累計消費リッター数というセルを作り、当月の累計が自動計算されるようにしたい ・現在の運用 雛形シートの累計のセルに=SUM('雛形:11.12.01'!G5)の計算式を設定し、毎月月末処理として雛形に設定されている11.12.01の部分を12.01.01(翌月1日から)に手動で変更している ・課題 毎月末処理に行っている手動作業まで含めて自動化したい ・問題 将来的には増えるが、現在は存在しないシートも含めて集計の対象とする方法が不明 ・制限 特にありません。シートの命名のルールを変えること、雛形の特定のセルにこの処理に必要な情報を入力するセルを追加すること、累計計算用のシートを追加することなども必要であれば可能です。

  • 左のシートを参照するには

    左のシートの名前は 1-janとし、1-janシートのA1のセルに10が入力されています。 1-janシートの右のシートの名前は2-janとなっていてA1のセルに11が入力されています。 2-janシートのA2にふたつのA1のセルを加算式を入力して21と回答を得たいのですがどのような計算式になるでしょうか。 3-jan,4-jan,5-janと言う風にシートをどんどんコピーして追加していくものです。

専門家に質問してみよう