|
まだ初心者さん、こんにちは
>週末に考えましたがまだ問題が解決できません。
>dの値ごとのシートに集約したいのですが
>dの数だけシートが出きてしまいます。
>どうすれば解決できるでしょうか?
前回提示したコードの動作確認はしたのですか?
その結果は?
コードを見ると私の提示したコードがベースになっているようですが、そこまではOKですか?
そのうえでの質問かどうかで、回答も変わります。
まだ初心者さんからもレスポンスがないと回答する側としては、回答しづらいばかりでなく、なかには気分を害する方もありますので(私もすこ〜し(--メ)、です(^^;))、気をつけてくださいね。
さて、コードですが・・
> 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
> '9でなく10でした。単純間違いです。
> wsFlg = False
> For Each ws2 In Worksheets
> If ws2.Name = d Then
> wsFlg = True
> Exit For
> End If
>
> If Not wsFlg Then
> ' Addでなく書式の入ったシートaをコピーすることにしました。
> ' Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = d
> Worksheets("a").Copy after:=Worksheets(Worksheets.Count)
ここでシート名を変更していないようですね?
そのためシートが既定のシート名で追加されます(ここでは"a(3)"とか・・)ので、シート名存在チェックにかからないため、必ずる追加されてしまいます。
ここに、シート名を変数d と同じように変更する処理をいれましょう。
> ' Aの処理を直しました。8行目に(i,9)(i,10)を、_
> 13行目以降に(i,4)(i,5)…をいれます。
> A = 13
Aの初期化をシート作成時に行うと希望の動作にならない場合があるかもしれません。
データの並びがd(営業所名)の順番でならびかえられていればいいのですが、ランダムになっている場合、すでに作成されているシートに書き込む場合、予期しない位置に書き込むことが考えられます。
Else
シート作成時以外はすでに13行目以降にかきこまれていますんので、現在の買い込み位置の最大を検索するようにしたらいかがでしょうか・・
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
> End Sub
|
|