dポイントプレゼントキャンペーン実施中!

お世話になります。
ExcelマクロVBA初心者です。

以前の職場での話しなのですが、添付画像に似たような「エクセル book」で、
シートの左上あたりにボタンが表示されていて、
そのボタンをポチっとクリックすれば、そのシートの左側に新しいシートが、
例えば「2018.7.2」というシートが瞬時に登場(?)していました。

添付の画像の場合、マクロを使わなくても
シート自体をその都度、コピーしても良いのですが、
私以外の従業員が、そのシート・コピー自体の操作方法を覚えられません…。

以前の職場でも同様でしたので、
会社内のIT部門の方が上記の様な操作方法を構築してくださり、
端末機操作に不慣れな従業員でも何とか業務をこなせていました。

現在の職場も同様なので、私が以前勤務していた際の様に
添付画像でも、同じ操作が出来ないか、とここ数日、考え込んでいます。
ですが、私がマクロVBA初心者なので、その作成方法が分かりません。

ExcelマクロVBA初心者(ド素人)からの質問で申し訳ないのですが、
ご教示をお願いする次第です。

何卒よろしくお願い致します。

「【Excel マクロ】 同一book内で」の質問画像

質問者からの補足コメント

  • fujillin 様 へ

    ご教示くださった後、私が作成した雛形シートの画像です。

    「【Excel マクロ】 同一book内で」の補足画像1
      補足日時:2018/06/26 10:42

A 回答 (6件)

No1です。



不明点はありますが、概ねこんな感じでしょうか?
サンプル的に作成してみました。
・各シートのA1セルの日付はシリアル値とします。
 (表示書式が、yyyy"/"m"/"d"("aaa")" の設定と仮定)
・雛形シートに、ボタンを作成して、下記のマクロを登録しておきます。
以上で準備は完了です。

一番最初のシートを作成するために、
・雛形シートのA1セルに日付を入力(作成したい日の1日前)
・ボタンをクリック
で、新しい日付(=翌日)のシートが作成されるはずです。
この状態を確認できたなら、雛形シートは非表示にしておく(しなくても良いですが)

※ 雛形シートの名前は、仮に「雛形」としてマクロを作成してあります。

Sub Sample()
Dim d As Date, sName As String
Dim sh As Worksheet, f As Boolean

d = ActiveSheet.Range("A1").Value
sName = Format(d + 1, "yyyy"".""m"".""d")

For Each sh In Worksheets
If sh.Name = sName Then f = True
Next sh

If f Then
MsgBox "シート" & sName & "は既に存在します"
Else
 Worksheets("雛形").Copy Before:=Worksheets(1)
 With Worksheets(1)
  .Name = sName
  .Visible = True
  .Range("A1").Value = d + 1
  .Range("A1").NumberFormatLocal = "yyyy""/""m""/""d""(""aaa"")"""
  .Activate
 End With
End If

End Sub
    • good
    • 0
この回答へのお礼

fujillinn 様

この度は、お世話になります。
非常に親切丁寧なご回答を再びお寄せくださり、
本当にありがとうございます。

補足コメントに添付した画像のように、
雛形シート(作成したい1日前の日付)、明日のシート作成ボタン、
ここまでは、なんとか作成出来ました。
ですが、実際には明日のシート作成ボタンをクリックしても、
明日の日付、2018.7.1のシートは登場しません。

fujillinn様が記述してくださった「コード」の一部、
> d = ActiveSheet.Range("A1").Value
の("A1")を("A3")に打ち換え、また、
> .Range("A1").Value = d + 1
> .Range("A1").NumberFormatLocal = "yyyy""/""m""/""d""(""aaa"")"""
の("A1")も("A3")に打ち換えています。

ただ、その結果によるものなのか、
「開発」の「マクロ」をクリックし、表示される小さなウィンドウの
その中のマクロ名(M):Sampleの青い枠線の「実行」をクリックすると
雛形シートの左横に「2018.7.1」のシートが何故か登場します。

fujillinn様が記述してくださった「コード」を
私は極めて中途半端にしか理解出来ていません。

fujillinn様のお時間のあるとき、ご都合の良いときで結構ですので、
私が作成した雛形シートがきちんと機能する、
より詳細な作成作業手順、正しいコード内容を
教えて頂けませんでしょうか。

「visual basic editor」の「標準モジュール」下層の
「Module1」の右側に正しいコードを記述する、
という認識で合っていますでしょうか。

お手数をお掛けして本当に申し訳ありませんが、
再度、より詳細な作業手順をご教示くださると幸いです。
fujillinn様のお時間、ご都合の良いときで構いませんので、
気長にお待ちしております。

何卒よろしくお願い申し上げます。

お礼日時:2018/06/26 11:06

No5です



書き忘れました。

>「visual basic editor」の「標準モジュール」下層の
>「Module1」の右側に正しいコードを記述する、
>という認識で合っていますでしょうか。
その通りです。
コピペで大丈夫なはずです。

コピペしておいてから、ボタンにそのマクロを登録します。
登録することにより、以降は、ボタンを押すとそのマクロが実行されるようになります。
    • good
    • 0
この回答へのお礼

fujillin 様

お世話になります。
fujillin様の助言内容通り、もう一度「トライ」したところ、
無事に私の望んでいた「操作」がきちんと機能しました。
大変お手数をお掛けしました。
Excelの関数等は、そこそこ扱える自信はあるものの、
マクロVBAは、私にとって敷居が高く、これまで避けてきました。
これをきっかけにExcelマクロBVAを少しずつ学びます。
本当にありがとうございました。
重ねてお礼申し上げます。

お礼日時:2018/06/26 14:50

No4です



No4に示した内容は、それまでの補足の内容と、No4に示した仮定に基づいていますので、条件が変われば動作しません。

>「シート1」に「2018.7.1」という名称が付けられています。
>この「2018.7.1」シートの「A1」セルには、「2018/7/1(日)」と記載されています。
>更に、この「A1」セルの右横付近に「翌日のシート作成」というボタンがあります。
>このボタンをポチっとクリックすると、「2018.7.1」シートの「左」に、
>「2018.7.2」という名称の「シート2」が登場し、
>且つ、この「2018.7.2」シートの「A1」セルは、「2018/7/2(月)」という表示に変更され、

上記に基づいていますが、不明点に関してはNo4に示した仮定
>各シートのA1セルの日付はシリアル値とします。
>(表示書式が、yyyy"/"m"/"d"("aaa")" の設定と仮定)
の元で動作するように作成しています。

ちなみに、雛形画像を添付なさっていますが、つぶれて内容が判別できませんし、今回のご質問の場合には、雛形シートの内容がどうであろうとほとんど関係はありません。(単に、雛形シートをコピーするだけの処理なので)
唯一関係があるのが、A1セルの値です。
(これに基づいて、新しいシート名を決めていますので)
それなので、上記の仮定条件を付しています。

ひとまず、A1セルを日付としてそのままで試して動作することを確認してみてください。
そのうえで、セルの位置を移動なさりたければ、補足で示されている修正方法で対応可能なはずです。
よくわかりませんが、想像するところでは、別にセル位置を変更しなくても、A1セルに年月(?)らしき値があるようなので、そのまま利用できるのではないかと思いますが・・・

◇「シリアル値」がわからない場合は以下を参照ください
https://www.google.co.jp/search?q=%E3%82%A8%E3%8 …

◇「セルの表示書式」がわからない場合は以下を参照ください
https://www.google.co.jp/search?q=%E3%82%A8%E3%8 …

◇ボタンへマクロを登録する方法がわからない場合は以下を参照ください
https://www.google.co.jp/search?q=%E3%82%A8%E3%8 …
    • good
    • 0

No2です。


当日の翌日の日付をシート名にしたいということですが、
以下の文を読むと、前の職場では、シート名の翌日の日付を作成するシートの日付としているように見えます。
>例えば、昨日、6月24日(日)のシート上にある、
>「明日のシート作成」のボタンをポチっとクリックすると、
>本日、6月25日(月)のシートが登場します。
>この6月25日(月)のシート上にも「明日のシート作成」ボタンがあり、
>このボタンをクリックすると、明日、6月26日(火)のシートが登場します。

一応、以下の仕様でなら作成可能です
①クリックした日の翌日の日付をシート名にする。
②2回続けてクリックした場合、2回目はエラーにし、同じ日付のシートは作成しない。

只、以下の様なケースには対応できません。
配達業務に出掛ける従業員が、
7月1日出勤
7月2日休み
7月3日出勤
の場合、
7月3日のシートを作る為には、7月2日にだれか他の方が、配達従業員の代わりに、クリックしなければなりません。
これは、よろしいのでしょうか?
    • good
    • 0

補足要求です。


1)新しく作るシートのシート名は、クリックした日の翌日の日付でしょうか。
それとも、クリックしたシート名の翌日の日付ですか。
例:シート名が"2018.6.1"で、本日の日付が6月25日とすると
新規のシート名は、2018.6.2ですか、それとも 2018.6.26ですか。

2)クリックしてシートを作成した直後に、もう一度、クリックすると、同じシートが
できることになり、まずいことになりますが、そのときは、前の職場ではどのようになっていましたか?
(たぶん、エラーメッセージを表示して終わりのような気がしますが・・・)
    • good
    • 0
この回答へのお礼

tatsu99 様

私の拙い説明の質問にご回答をお寄せくださり、
ありがとうございます。

1)新しく作るシート名

新しく作るシートの日は、翌日の日付です。
例えば、本日は、6月25日(月)ですので、
ボタンをポチっとクリックすると、新しく登場するシートの日付は、
6月26日(火)にしたい、と望んでいます。


2)クリックしてシートを作成した直後に、もう一度、クリックすると同じシート

以前、勤めていた職場(因みにホテルです)では、
日々の現金小口締の「Excelマクロ有効ブック」でしたが、
例えば、昨日、6月24日(日)のシート上にある、
「明日のシート作成」のボタンをポチっとクリックすると、
本日、6月25日(月)のシートが登場します。
この6月25日(月)のシート上にも「明日のシート作成」ボタンがあり、
このボタンをクリックすると、明日、6月26日(火)のシートが登場します。
新規シートの登場自体、特にエラーメッセージは出ないのですが、
昨日分(6/24)の現金小口締作業を本日中(6/25の22:00まで)に終えないと、
本日以降(6/25日以降)の「現金小口締」自体の計算式や関数等は、
「機能」しないよう設計されていました。

今の職場は、朝一番で乳製品の配達業務に出掛ける従業員がいまして、
その方は夕刻に職場に帰着するのですが、その後、端末機で
例えば、本日6/25(月)分の配達記録をExcelブック画面に入力します。
ただ、その方はExcel以前に、端末機自体に明るくないので、
出来るだけ、その方の負荷(精神的負担?)を下げる為に、
配達記録のExcelブックへの入力時に、可能な限り、簡略化した仕組みを
私が構築したいと切望している次第です。

とりとめのない長文を綴り、申し訳ありません。

何か知恵がございましたら、ご教示くださると幸いです。
何卒よろしくお願い致します。

お礼日時:2018/06/25 15:52

こんにちは



具体的な内容が不明なのでコードでは示せませんが、ほとんどの部分はマクロの記録でも作成できると思います。

まず、雛形のシートを作成しておいて、
1)雛形のシートをコピー
2)新しいシートの名前を付け替える
という記録を作成すれば、「新しい名前」の内容を決める部分以外については作成可能と思います。
「新しい名前」は何らかのルールに基づいて決められているものと想像しますので、その部分だけは自作する必要があるかも知れません。

また、実際の使用に当たっては、雛形のシートを非表示にしておくのが良さそうに思いますが、その場合には(多分)マクロの記録を修正する必要がありそうです。
    • good
    • 0
この回答へのお礼

fujillin 様

お世話になります。
早速のご回答をお寄せくださり、ありがとうございます。

fujillin様からご教示のありました、「マクロの記録」を行いました。

まず、雛形のシートを作成しました。※その状態が質問した際に添付した画像です。
「マクロの記録」を始め、
1)雛形(※質問した際に添付した画像シート「2018.7.1」)のシートをコピー。
2)新しいシートの名前を「2018.7.2」に変更。
以上で、「マクロの記録」を終了しました。

続いて、雛形シートに戻り、「マクロ起動のボタン」を作成。
「名前を付けて保存」を選択し、「Excelマクロ有効ブック」で保存しました。

実際に保存したブックを開くと、雛形シートには、「ボタン1」があり、
このボタンをポチっとクリックすると、確かに、「新しいシート」が瞬時に登場します。

これはこれで良し、という状況ではあります。

私の説明不足でしたが、
例えば、「Excel業務日報ブック」というものがあり、
「シート1」に「2018.7.1」という名称が付けられています。
この「2018.7.1」シートの「A1」セルには、「2018/7/1(日)」と記載されています。
更に、この「A1」セルの右横付近に「翌日のシート作成」というボタンがあります。
このボタンをポチっとクリックすると、「2018.7.1」シートの「左」に、
「2018.7.2」という名称の「シート2」が登場し、
且つ、この「2018.7.2」シートの「A1」セルは、「2018/7/2(月)」という表示に変更され、
「2018.7.1」シートと同様、「A1」セルの右横付近に「翌日のシート作成」というボタンがあり、
これをずっと続けられる、「Excel業務日報ブック」を…
以上のようなマクロ有効ブックを考えています。

ExcelマクロマクロVBA初心者が「高望みの操作方法構築」は、
難しいということを改めて感じている次第です。
fujillin 様の早速のご回答、本当にありがとうございます。
めげずに「ExcelマクロVBA」を少しずつ、学びます。

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

お礼日時:2018/06/25 15:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!