|
まだ初心者さん、こんにちは
>ロジックをいれましたが「シート名をほかのシート、VISUAL BASICで参照されるオブジェクトライブラリまたはワークシート名と同じ名前に変更することはできません」とでます。
>どうすればいいのでしょうか?どうかご教示ください。
Nextの位置がちがいません?
何の処理をしているかを意識して、ブロックごとに字下げをするとロジックがわかりやすくなりますよ。
#回答者(つんさん、私)のアドバイスも意識していただけるとうれしいな。
> Sub test()
> Dim i As Long
> Dim A As Integer
> Dim d As String
> Dim ws1 As Worksheet
> Dim ws2 As Worksheet
> Dim wsFlg As Boolean
>
> Set ws1 = Worksheets("一覧")
> For i = 2 To ws1.Range("A65535").End(xlUp).Row
> d = ws1.Cells(i, 10).Value
>
> wsFlg = False
'シート全体のなかにシート名が d の値のものがあるかを検索
> For Each ws2 In Worksheets
> If ws2.Name = d Then
> wsFlg = True
> Exit For
> End If
Next
>
'もしシート名 d のシートがなければシート a をコピーして
'シート名を 変数 d の値に変更
'行位置を13に初期化
> If Not wsFlg Then
>
'インデント(字下げ)しましょう
> Worksheets("a").Copy after:=Worksheets(Worksheets.Count)
>
> '↓いれました。
> Worksheets(Worksheets.Count).Name = d
>
> A = 13
>
> Else
>
'シート名 d のシートがあれば
'現在の行位置を検索して、次の行位置を変数Aに設定
> A = Worksheets(d).Range("A65536").End(xlUp).Row + 1
> End If
>
> ActiveSheet.Cells(8, 2).Value = ws1.Cells(i, 9).Value
> ActiveSheet.Cells(8, 5).Value = ws1.Cells(i, 10).Value
> ActiveSheet.Cells(A, 1).Value = ws1.Cells(i, 4).Value
> ActiveSheet.Cells(A, 2).Value = ws1.Cells(i, 5).Value
> ActiveSheet.Cells(A, 3).Value = ws1.Cells(i, 6).Value
> ActiveSheet.Cells(A, 4).Value = ws1.Cells(i, 7).Value
> ActiveSheet.Cells(A, 5).Value = ws1.Cells(i, 11).Value
> ActiveSheet.Cells(A, 11).Value = ws1.Cells(i, 12).Value
> ActiveSheet.Cells(A, 11).Value = ws1.Cells(i, 12).Value
> A = A + 1
この下のNext不要
> Next
> Next
>End Sub
|
|