ある表の列にフィルターをかけ、列に記載された項目の種類だけを抜き出した表(?)を作成しました。(一列のみ)
その後、その表の項目を一行づつ抜き出して"項目1,項目2"という文字列を作成し、ソートの中のカスタムオーダーに入れ込み、その順でソートを実行したいのですが、「型が一致しません」というエラーを起こしてしまいます。
※テストで手入力すると問題なく動くのですが、抽出する列の要素は毎回変わるので、フィルターをかけて自動でカスタムオーダー内に入れ込みたいです。
定義されたものをカスタムオーダーに入れ込むことは不可能なのでしょうか。
手入力以外で入力が可能な方法が有りましたらご教授いただければ幸いです。
宜しくお願いします。
以下がそのコードです。
Option Explicit Sub 利用結果() Dim name As String Dim school As String Dim intn As Long Dim sce As Long Dim csi As String Dim cso As String Dim csce As Long Dim Row As Long intn = 3 name = "初期値" Do While name <> "" intn = intn + 1 '4行目から開始 name = Cells(intn, 18) If name = "" Then Exit Do End If Cells(intn, 20) = name Cells(intn, 19) = WorksheetFunction.VLookup(name, Range("A4:H50"), 3, False) Loop intn = intn - 1 'ソート sce = Cells(Rows.Count, 3).End(xlUp).Row Cells(3, 21) = "項目1"’項目1の種類のみU3に抽出する Worksheets("利用データ").Range(Cells(3, 3), Cells(sce, 3)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Worksheets("利用者データ").Range("U3"), Unique:=True 'カスタムオーダーに入れる文字列 Row = 3 csi = "初期値" Do While csi <> "" csce = Cells(Rows.Count, 21).End(xlUp).Row '項目1の元データの最終行をcsceに入れる If csce-1 = Row Then 最期の行になった場合は「,」無しで追加 Row = Row + 1 cso = cso + csi Exit Do End If Row = Row + 1 csi = Cells(Row, 21) cso = cso & csi & ","'カスタムオーダーにはcsoを入れる。 Loop Cells(4, 22) = cso With ActiveSheet.Sort .SortFields.Clear .SortFields.Add2 Key:=Range("s4"), CustomOrder:=cso .SetRange Range(Cells(4, 19), Cells(intn, 20)) .Header = xlNo .Apply End With End Sub
エラーが起こるのは下から7行目の「.SortFields.Add2 Key:=Range("s4"), CustomOrder:=cso」です。
よろしくお願いします。
エラーがでたときの「cso」の値は何でしたか?
回答1件
あなたの回答
tips
プレビュー