質問: excelvbaマクロ『並べ替え』⇒『重複の削除』 excelvbaマクロにについて確認させて下さい。 いくつかの値をエクセルの一つの行に並べてあり、 これをexcelの機能である『並べ替え』⇒『重複の削除』をexcelvbaマクロで同様に実行したいのですがどのようにすれば良いでしょうか。 以上よろしくお願いいたします。
回答: マクロの記録で記録されたコードで勉強するのが基本かと。 記録されたコードを見てみると、記録した時のデータ件数(行数)の部分に柔軟性がないので、件数が何件あろうと柔軟に対応できるように書き換える必要が出る。 実際に質問者が想定しているデータ入力状態がわからないので、以下のように勝手に想像してみた。 ・ セル a1 にタイトルがあり、a2 から下に向かって途切れなくデータが入っている。 ・ セル a1 がアクティブになっている状態でマクロを実行する。 ・ excel 2007 または 2010 を使っている。(2003 以前ではコードが違う) dim startcell as range ' 起点となるセル dim endcell as range ' データの最終セル set startcell = activecell ' アクティブになっているセルを起点とする。(セル a1 を想定) set endcell = startcell.end(xldown) ' a1 から下に向かってデータが途切れるセルを最終セルとする dim currentsheet as worksheet ' 対象シート set currentsheet = activesheet ' 現在アクティブなシートを対象とする ' 現在のソート条件をクリアし、新たに設定する。 ' a2 から最終セルまでを範囲とし、値を昇順で並び替える。 currentsheet.sort.sortfields.clear currentsheet.sort.sortfields.add _ key:=range(startcell.offset(1, 0), endcell), _ sorton:=xlsortonvalues, _ order:=xlascending, _ dataoption:=xlsortnormal ' ソートを実行する。 ' 起点セルから最終セルまでを対象とし、先頭行をタイトル行とし、大文字小文字を区別せず、行方向へ、振り仮名を使って並び替えを実行する。 with currentsheet.sort .setrange range(startcell, endcell) .header = xlyes .matchcase = false .orientation = xltoptobottom .sortmethod = xlpinyin .apply end with ' 起点セルから最終セルまでの間で、ダブっているデータを削除する。 currentsheet.range(startcell, endcell).removeduplicates columns:=1, header:=xlyes