質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

2988閲覧

ソートのカスタムオーダーについて

ice930

総合スコア99

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2020/08/28 13:25

ある表の列にフィルターをかけ、列に記載された項目の種類だけを抜き出した表(?)を作成しました。(一列のみ)
その後、その表の項目を一行づつ抜き出して"項目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」です。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/08/28 14:41

エラーがでたときの「cso」の値は何でしたか?
guest

回答1

0

ベストアンサー

VBA

1 .SortFields.Add2 Key:=Range("s4"), CustomOrder:=cso

の箇所を

VBA

1 .SortFields.Add2 Key:=Range("s4"), CustomOrder:="""" & cso & """"

としてはいかがでしょうか。

投稿2020/08/28 19:37

kitasue

総合スコア314

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ice930

2020/08/29 22:37

String定義だと勝手に"が入るものと思っていました! 問題なく作動しています ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問