VBA 検索するSheetの位置の変更
現在、グループの数だけユーザー名の合計数をSheet2に抽出するという
事をやっているのですが.......
コードの方は下記になります
Sub Sample3()
Dim i As Long, j As Long, k As Long, lastRow As Long, lastCol As Long
Dim wS2 As Worksheet, wS3 As Worksheet
Set wS2 = Worksheets("Sheet1")
Set wS3 = Worksheets("Sheet2")
Application.ScreenUpdating = False
If wS2.Range("Y1") = "" Then
wS2.Range("Y1") = "ダミー"
End If
With Worksheets("Sheet1")
If .Range("A4") = "" Then
.Range("A4") = "ダミー"
End If
lastRow = .Cells(Rows.Count, "B").End(xlUp).Row
Range(.Cells(5, "B"), .Cells(lastRow, "B")).AdvancedFilter Action:=xlFilterCopy, copytorange:=wS3.Range("A1"), unique:=True '★
For i = 2 To wS3.Cells(Rows.Count, "A").End(xlUp).Row
wS2.Cells(7, (i - 2) * 8 + 3) = wS3.Cells(i, "A")
.Range("A4").AutoFilter field:=2, Criteria1:=wS3.Cells(i, "A")
Range(.Cells(5, "AA"), .Cells(lastRow, "AA")).SpecialCells(xlCellTypeVisible).Copy wS2.Cells(7, (i - 2) * 8 + 2)
For k = wS2.Cells(Rows.Count, (i - 2) * 8 + 2).End(xlUp).Row To 7 Step -1
wS2.Cells(k, (i - 2) * 8 + 3) = WorksheetFunction.CountIfs(.Range("AA:AA"), wS2.Cells(k, (i - 2) * 8 + 2), .Range("B:B"), _
wS2.Cells(7, (i - 2) * 8 + 3))
If WorksheetFunction.CountIf(wS2.Columns((i - 2) * 8 + 2), wS2.Cells(k, (i - 2) * 8 + 2)) > 1 Then
wS2.Cells(k, (i - 2) * 8 + 2).Resize(, 2).Delete shift:=xlUp
End If
Next k
Next i
wS2.Range("B1").CurrentRegion.Borders.LineStyle = xlContinuous
wS2.Cells.Replace what:="ダミー", replacement:="", lookat:=xlWhole
.Cells.Replace what:="ダミー", replacement:="", lookat:=xlWhole
wS3.Cells.Clear
.AutoFilterMode = False
End With
Application.ScreenUpdating = True
End Sub
このコードで検索をかけるSheet1のセルBの文字をセルCに移動して検索かけたいという事なのですが、下記の用なコードでBをCに変更してみた結果エラーが発生してしまいます。
lastRow = .Cells(Rows.Count, "C").End(xlUp).Row
Range(.Cells(5, "C"), .Cells(lastRow, "C")).AdvancedFilter Action:=xlFilterCopy, copytorange:=wS3.Range("A1"), unique:=True '★
For i = 2 To wS3.Cells(Rows.Count, "A").End(xlUp).Row
wS2.Cells(7, (i - 2) * 8 + 3) = wS3.Cells(i, "A")
.Range("A4").AutoFilter field:=2, Criteria1:=wS3.Cells(i, "A")
Range(.Cells(5, "AA"), .Cells(lastRow, "AA")).SpecialCells(xlCellTypeVisible).Copy wS2.Cells(7, (i - 2) * 8 + 2)
For k = wS2.Cells(Rows.Count, (i - 2) * 8 + 2).End(xlUp).Row To 7 Step -1
wS2.Cells(k, (i - 2) * 8 + 3) = WorksheetFunction.CountIfs(.Range("AA:AA"), wS2.Cells(k, (i - 2) * 8 + 2), .Range("C:C"), _
どなたかご教授の方お願い致します。
お礼
kkkkkmさん、前回のコードの添削も頂きありがとうございます。 参考に以下に修正しましたが書き出される取引番号が正解と違ってしまいます。 |[A] |[B] |[C]|[D] [1] |取引番号 |取引番号 | | [2] |0039-012582-0002|0039-012582-0002| | [3] |0039-012582-0003|0039-013727-0002| | [4] |0039-012582-0004|0039-019733-0006| |以下が正解 [5] |0039-012582-0005|0039-026459-0005| | [6] |0039-012582-0006|0039-026607-0003| | [7] |0039-013727-0002| | |0039-012582-0006 [8] |0039-013727-0003| | |0039-013727-0004 [9] |0039-013727-0004| | |0039-019733-0006 [10]|0039-019733-0006| | |0039-026459-0006 [11]|0039-026459-0005| | |0039-026607-0003 [12]|0039-026459-0006| | | [13]|0039-026607-0003| | | なぜでしょうか ? Sub test2() With Sheets("DATA") .Columns("B").Clear .Range("A:A").Copy .Range("B1") .Range("B:B").Sort key1:=Range("B1"), order1:=xlDescending Dim i As Long For i = .Cells(Rows.Count, "B").End(xlUp).Row To 2 Step -1 If Left(.Cells(i, "B"), 11) = Left(.Cells(i, "B").Offset(-1, 0), 11) Then .Cells(i, "B").Delete Shift:=xlUp End If Next End With End Sub
補足
すいません。 Editorでは、上手く表示されているのにシートのレイアウトを書き出した テキストが上手く列ごとに並ばずにカクカクなってしてしまいました。