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

エクセルについて質問です。
現在使用している商品台帳の改良を考えています。
「番号一覧シート」、「台帳原紙」、「2016年1月」「2016年2月」というように年月順にシートが並んでいます。番号一覧に年月を追加すると自動的にシートが追加されて、尚且つ「台帳原紙」の内容がコピーされる、というようにしたいです。一覧に「2016年3月」と入れると、勝手に「2016年3月」のシートが出来る、という感じです。
なるべく簡単にできる方法がありましたら教えてください。
宜しくお願い致します。

A 回答 (2件)

No.1です。



>一覧も1001、1002というように追加していって、シート名も同じく1002,1002としたいです。

というコトですので・・・
前回は「番号一覧シート」のA列にシリアル値が入る前提のコードでしたのであのような感じにしました。
単純に入力データそのものをシート名にすれば良いというコトですので

>ActiveSheet.Name = Format(wS.Cells(Rows.Count, "A").End(xlUp), "yyyy年m月")

>ActiveSheet.Name = wS.Cells(Rows.Count, "A").End(xlUp)
に変更してください。

※ 数値でも文字列でもA列に入力した最終行のデータそのものが
シート名になります。m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございました!他のデータに応用できました^^

お礼日時:2016/06/23 23:05

こんにちは!



VBAになりますが、一例です。

>番号一覧に年月を追加すると・・・
「番号一覧シート」のどのセルに入力するか書かれていないので、
A列に随時入力していくといます。「2016年6月」のように入力するという前提です。
まず標準モジュールに↓のコードをコピー&ペーストしてください。

Sub シート追加()
Dim wS As Worksheet
Set wS = Worksheets("番号一覧シート")
Worksheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Format(wS.Cells(Rows.Count, "A").End(xlUp), "yyyy年m月")
Worksheets("台帳原紙").Cells.Copy Worksheets(Worksheets.Count).Range("A1")
End Sub

次に「番号一覧シート」のシートモジュールを↓のようにしてみてください。

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A:A")) Is Nothing Or Target.Count > 1 Then Exit Sub
If WorksheetFunction.CountIf(Range("A:A"), Target) = 1 Then
Call シート追加
Else
MsgBox "同一月が存在します"
Target.Select
End If
End Sub

※ 「番号一覧シート」A列に「2016年3月」のように入力してみてください。m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます!ちゃんと出来ました!
ちなみにシート名をただの数字として1番号ずつ追加していく場合には、ActiveSheet.Name = Format(wS.Cells(Rows.Count, "A").End(xlUp), "yyyy年m月")のところを変えればよいかと思うのですが、どのよう変更したらできますか?
他のデータで応用したいので、教えていただけると助かります。一覧も1001、1002というように追加していって、シート名も同じく1002,1002としたいです。

お礼日時:2016/06/23 08:42

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