プロが教える店舗&オフィスのセキュリティ対策術

VBAなどを使い一括で作業できるようにしたいのですが。

ある列に40個近くデータがあり、
そのデータを参照して、40個シートを作成し
セルのデータを元にシートにシート名を付けて
作成することは可能でしょうか?

どなたかお願いします。

A 回答 (2件)

あなたのコードだと


A列の2行目から11行目までのセルの値を名前とするシートができます。

11行目のセルに空白が入っている場合
excelがSheetXXという名前をつけてシートを作る
名前変更しようとして空白なのでエラーになる

1行で書いてあってもExcelはシートを追加する、名前を変更するという動作をしています。

neSheet = sht.Range("a" & (i + 1)).Value
i+1は  単にi とすれば1行目から10行目のセルを参照することになります。

これでエラーは回避できますが
このコードのままだとシートの並びはセルの逆順になりますけどそれでいいですか?

Sub test()
    Dim neSheet As String
    Dim curSheet As String
    Dim i As Integer
    Dim sht As Worksheet
    Set sht = Worksheets(1)
    curSheet = sht.Name
    For i = 1 To 10
        neSheet = sht.Range("a" & i).Value
        Worksheets.Add(After:=Worksheets(curSheet)).Name = neSheet
        curSheet = neSheet
    Next i
End Sub
セルの順番通りにシートを作りたい場合のコードです
シートを作った時の名前を覚えておいて青の後ろしシートを作るようにしています。
    • good
    • 0
この回答へのお礼

ありがとうございます。
解決できました!!

お礼日時:2009/10/05 21:48

>そのデータを参照して、40個シートを作成し


セルのデータを元にシートにシート名を付けて

Sheets.Add でシートの追加ができます
Sheets("Sheet1").Name = "test" でシートの名前の変更ができます
この部分をFor Next やWhile Wendなどの制御構文を使ってLOOPすればできます。

どの程度のVBAの経験があるのか分かりませんので...

もし必要なら要求されれば他のコードも提示できます。

この回答への補足

回答ありがとうございます。
ずっと試しているのですが、

Sub test()
Dim neSheet As String
Dim i As Integer
Dim sht As Worksheet
Set sht = Worksheets(1)
For i = 1 To 10
neSheet = sht.Range("a" & (i + 1)).Value
Worksheets.Add(After:=Worksheets(1)).Name = neSheet
Next i
End Sub

サンプルでA列の10番目までの値を取得して
シートを作るようにしていますが、
実行すると400と表示されたエラーが発生します。
エラーが出ているのですが、シートも作成されています。
ただ、ひとつ余分なsheet56
(実行する度に56の数字の部分が変わっています)

もしご存知なら全く別の方法でも、
教えていただけると助かります。

補足日時:2009/09/27 01:56
    • good
    • 0

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