• ベストアンサー

EXCEL VBAにて

A1~A20にシート名になる値が入力されており、各行は他のデータが入力されています。 コマンドボタンをつくり、シート名と同じシートにデータをコピーする ボタンを作ろうとしています。 ただし、入力されているシート名が存在しないシート名だった場合 新たにそのシート名でシートを作成したいのですが、 何か方法はありますでしょうか? お手数ですがご存知の方がいらっしゃいましたら、ご教授願います。

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

  • ベストアンサー
回答No.1

こんにちは。 実際にシートを指定してみて、その名前のシートが存在しないことにより発生するエラーをトラップしてやれば良いでしょう。 シート名が入力されているシートをSheet1として、 以下のような感じでいかがでしょう? Sub Sample1() Dim i As Integer Dim sName As String Dim sh As Worksheet For i = 1 To 10 sName = Sheets("Sheet1").Cells(i, 1).Value On Error GoTo err_handler 'エラートラップ開始 Sheets(sName).Select 'ためしにSelectしてみる     'シートが無ければエラーが発生 On Error GoTo 0 'エラートラップ終わり Next Exit Sub 'エラー処理ルーチンが実行されないように err_handler: 'ここからエラー処理ルーチン Set sh = Worksheets.Add(after:=Worksheets(Worksheets.Count)) sh.Name = sName Resume Set sh = Nothing End Sub サンプルではSelectしていますが、 実際にはSelectしなくても Sheets(sName).~ とした時に そのシートが存在しなければ err_handler以下の部分が実行されます。

triumph405
質問者

お礼

あー、そうです! これです! まさに自分の頭で考えられる方法はこれかなーと思っていました。 ありがとうございますっ! 助かりました!

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 >各行は他のデータが入力されています。 各行というのは、一体、どこにあるのでしょうか? 「A1~A20にシート名」ということは、シートは、20枚あるということでしょうか?コードとしては、それ自体は、一気に行うはずですから、個別にその方法を提示しても、結局は無駄になってしまうような気がします。もちろん、既に解決しているのでしたら、これは、無視して構いません。

triumph405
質問者

お礼

すみません、文章力がないもので・・・ 要はA列にシート名となる値が入っているんです。 B列からは別の項目が入っているんです。 すみません、、、

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

質問と発想を変えて答えます。 A1:a20にシート名を入れておきます。 A1:A20のシート名セルをクリックすると、コピー範囲を聞いてくる。 範囲を指定すると、そこをコピーして、指定したシートのG2セルから 貼り付ける。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Intersect(Target, Range("A1:A20")) Is Nothing Then Exit Sub 'MsgBox Target.Address Set x = Application.InputBox(prompt:="コピー範囲指定せよ", Type:=8) MsgBox x.Address x.Copy Range("G2").Select 'ActiveSheet.Paste Sheets(Target.Value).Activate Sheets(Target.Value).Range("G2").Select ActiveSheet.Paste Sheets("sheet1").Activate Range("B1").Select End Sub これだとシート名が入力ミスによる防御のための、質問のチェックは要らない。 追加するならシートを追加し、A列20行までに、シート名を前もって入力しておくと良い。 ーーー この質問は (1)起動のキッカケはどうするの? A列をアクチブにして、コマンドボタンを押すの? (2)コピー元は? (3)コピー先は? ーーー >何か方法はありますでしょうか というよりVBAのコードを聞いているのでしょ。

triumph405
質問者

お礼

実際のA列は20どころの騒ぎじゃないぐらいのデータ量があるんです。。。 手入力でデータを入れていったのですが、A列のデータをもとに シート別の表にしたかったのです。 なので、混在したデータがあるシートのどこかにボタンを配置して クリックしたら、A列のデータ別シートと、そのデータが出来ている というようなボタンを作りたいのです。 ありがとうございました。