- 締切済み
[vba]任意の順位でセルを抽出したい
下記のデータがあるとします。これを理科の点数順位で上位x位まで新たに書き直したい。 (sheet1) A B C D E F G 1 ___ 国語 算数 理科 社会 英語 2 たかし 75 67 47 96 77 3 ひろし 46 78 65 67 87 4 やすし 78 98 33 95 90 5 しおり 65 78 67 89 98 6 まなみ 88 56 78 98 76 ↓ (異なるシート:sheet2へ) A B C D E F G 1 ___ 国語 算数 理科 社会 英語 2 まなみ 88 56 78 98 76 3 しおり 65 78 67 89 98 4 ひろし 46 78 65 67 87 'この場合、理科の点数上位3位までを抽出 Sub test11 () Dim a As Worksheet, b As Worksheet Dim c As Range Set a = Sheets("sheet1") Set b = Sheets("sheet2") Set c = a.Range("E2", "E6") '理科の点数範囲 For x = 1 To 3 '上位3位まで WorksheetFunction.Large(r, x) この先、large関数やrank関数を使って組んでみようと試みましたが うまくいきませんでした。いい方法がありましたら教えてください。よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
こんなこと聞くまでも無いこと。 >これを理科の点数順位で 全体を範囲指定はするが、理科の列でソーとする。 VBAでならマクロの記録をとれば判る。 >上位x位まで データの最初の行(第2行目?)から3つForNextででも採ればよい。 同点の扱い(同点も3位までに含めるなら)にはロジックを工夫すればよい。 LARGEなど使わないで、プログラムロジックの訓練をしたら。 ソート済みの理科の点数列で、内容(点数)が異なるデータが3種類を越えたになるまで、ピックアップを繰り返す。 第3行から 前と同じかー>(変数)種類は変えず 前と異なる。(変数)種類=種類+1 (変数)種類3を越えたーー>終了
- pbforce
- ベストアンサー率22% (379/1719)
わたしが言っているのは、関数云々ではなくて、マクロの記録を使用して、手作業でやる、 「B~Gまでを並び替えてコピーして、Sheet2に貼り付けて、Sheet1のA~GをAの順番に並び替える(元に戻す)」 の記録結果を元に組めばどうですか?と言うことです。 手作業を自動化したいなら、こっちの方が簡単ですよ。
お礼
回答ありがとうございます。なるほどマクロの記録を使えば簡単ですね。Sortという便利なメソッドがあったんですね。勉強中なのでいろんな方法を学びたいと思います。
- pbforce
- ベストアンサー率22% (379/1719)
B~Gまでを並び替えてコピーして、Sheet2に貼り付けて、Sheet1のA~GをAの順番に並び替える(元に戻す) を記録すれば出来ませんか?
補足
回答ありがとうございます。 この作業をすべてマクロでやることを考えてます。今、一番悩んでいる箇所は、Large関数で選択したセルのある一行をどうやって抽出するかという点です。これが分かれば解決できると思ってます。
補足
回答ありがとうございます。Sortメソッドを使えばすぐでした。ありがとうございました。 ついでになりますがLarge関数やrank関数を使っても組めるか確かめたいと思います。 Sub test11 () Dim a As Worksheet, b As Worksheet Dim i As Integer, row As Integer, x As Integer Dim c As Range Set a = Sheets("sheet1") Set b = Sheets("sheet2") Set c = a.Range("E2", "E6") '理科の点数範囲 i = 1 For x = 1 To 3 '上位3位まで 'row = WorksheetFunction.Large(c, x)? '選ばれた行番号を取得したい a.Range("A" & row, "G" & row).Copy '選ばれた行をコピー b.Range("A" & i).PasteSpecial 'シート2に貼り付け i = i + 1 Next x どうすればLarge関数で選ばれたセルの行番号が取得できるのか試行錯誤してます。いい方法があればと思います。