前提・実現したいこと
シート名「結果」にA~K列までデータがあります。
これをシート名「仕様書」の順番に基づいて「表」に表として表示させたいです。
どこが原因か教えていただけますでしょうか。
よろしくお願いいたします。
発生している問題・エラーメッセージ
①シート名「表」に表が作成されずシート名「結果(2)」として作成されてしまう
②シート名「仕様書」の順番に基づいて並び替えられない。
該当のソースコード
①のコード
Sub
1 Dim i As Long 2 Dim j As Long 3 Dim k As Long 4 Dim Cnt As Long 5 Dim lr As Long 6 Dim Aary() As Variant 7 Dim Mary() As Variant 8 Dim Dm As Object 9 Dim Mm As Object 10 Dim Var As Variant 11 Dim Base As Variant 12 13 14 15 Set Dm = CreateObject("Scripting.Dictionary") 16 Set Mm = CreateObject("Scripting.Dictionary") 17 With Worksheets("結果") 18 lr = .Cells(.Rows.Count, 4).End(xlUp).Row 19 Base = Intersect(.Range("D:K"), .Range(.Rows(2), .Rows(lr))) 20 .Copy Worksheets(1) 21 End With 22 For i = 1 To UBound(Base, 1) 23 Dm(Base(i, 1)) = Empty 24 Mm(Base(i, 7)) = Empty 25 Next 26 Mary = Mm.keys 27 ReDim Aary(1 To Dm.Count, 1 To Mm.Count + 1) 28 For i = 1 To UBound(Base, 1) 29 For Each Var In Dm 30 Cnt = Cnt + 1 31 If Var = Base(i, 1) Then 32 Aary(Cnt, 1) = Var 33 For k = 0 To UBound(Mary) 34 If Base(i, 7) = Mary(k) Then 35 Aary(Cnt, k + 2) = Aary(Cnt, k + 2) & Base(i, 5) & Base(i, 8) & " " 36 End If 37 Next 38 End If 39 Next 40 Cnt = 0 41 Next 42 With ActiveSheet 43 .UsedRange.Clear 44 .Cells(1, 2).Resize(, UBound(Mary) + 1) = Mary 45 .Cells(2, 1).Resize(UBound(Aary, 1), UBound(Aary, 2)) = Aary 46 .UsedRange.EntireColumn.AutoFit 47 .UsedRange.Borders.LineStyle = xlContinuous 48 .Range("A:A").SpecialCells(2).NumberFormatLocal = "yyyy/mm/dd" 49 End With 50 Set Dm = Nothing 51 Set Mm = Nothing 52 Erase Base, Aary, Mary 53End Sub``` 54 55
②のコード
Sub
1 2Dim 仕様書, Rx As Long 3 4 With Sheets("仕様書") 5 仕様書 = .Range("B4:D" & .Cells(.Rows.Count, "B").End(xlUp).Row).Value 6 End With 7 8 With Sheets("表") 9 For Rx = LBound(仕様書) To UBound(仕様書) 10 .Columns(仕様書(Rx, 1) + 2).Copy Destination:=Sheets("表").Columns(仕様書(Rx, 3) + 2) 11 Next 12 End With 13 14End Sub
該当のイメージ図
◆結果
◆表
◆仕様書
1行ずつ実行していけば原因が分かるかと思いますが、デバッグしてみましたか?
デバックはしてみましたが知識が低いため黄色のラインが移動しても
よく分かりません。
こつ等はありますでしょうか。
①については結果シートをコードのどこかで「シートのコピー」をしているはずです。デバッグしながら、ブックにシートが増えていないか観察してください。
結果、仕様書、表の3つのシートのレイアウトを画像で提示していただけませんでしょうか。
> シート名「表」
シート名「結果」をコピーしただけで、コードのどこにもシート名を「表」に変更していないですね。
シート名:仕様書の画像が提示されていません。(仕様書の代わりに結果の画像が提示されています)
表のシート名が「売上表」になっていますが、どちらが正しいのですか?
イメージ図の投稿が上手くいかず申し訳ございません。
追加しましたのでご確認ください。
デバックでシートが増えている箇所を探してみます。
それとシート名は「表」が正しいです。
こちらが原因かもしれませんので修正して試してみます。
ありがとうございます。
デバックでシートが増えている箇所を見つけましたので修正してみましたが
上手くいきませんでした。
Base = Intersect(.Range("D:K"), .Range(.Rows(2), .Rows(lr)))
.Copy Worksheets(1)
↓ こちらに修正
Base = Intersect(.Range("D:K"), .Range(.Rows(2), .Rows(lr)))
.Copy Worksheets("表")
回答4件
あなたの回答
tips
プレビュー