エクセルRank関数をマクロで作成する方法

このQ&Aのポイント
  • エクセルのRank関数を使用する際に便利なマクロを作成する方法について紹介します。選択されたセルの右側に新しい列を挿入し、その列にRank関数を適用します。
  • マクロを使用することで、繰り返し行うRank関数の作成作業を効率化することができます。具体的な手順としては、選択されたセルの右側に新しい列を挿入し、その列にRank関数を使って順位を計算します。
  • マクロを作成するための基本的な手順を紹介します。まず、選択されたセルの右側に新しい列を挿入します。次に、新しい列の最初のセルにRank関数を入力して、そのセルから下に自動的にコピーします。最後に、選択されたセルと新しい列を選択します。
回答を見る
  • ベストアンサー

エクセル Rank関数をマクロで

こんにちは いつもお世話になっています。 Rank関数を作ることが多いのでマクロを作ることにしました。 例えば、C3からc23まで数字が入っています。c3-c23を選択した状態でマクロを動かしたいです。 実際は、特定列の一列の選択されたセルを対象にしたいです。 D列には別のデータが入っているのでC列とD列の間に新規に列を挿入し、新規のD3-D23にRankをいれます。つまり、選択セルの右側に新規の列を挿入したいです。 引数の数値はD3にはC3、D4にはC4…D23にはC23。参照は選択セルのC3からC23。順序は降順です。 一応、マクロ記録してみましたが Sub Macro1() ' ' Macro1 Macro ' Columns("D:D").Select Selection.Insert Shift:=xlToRight Range("D3").Select ActiveCell.FormulaR1C1 = "=RANK(RC3,R3C3:R23C3)" Selection.AutoFill Destination:=Range("D3:D23"), Type:=xlFillDefault Range("D3:D23").Select End Sub よろしくお願いします。

  • 5goma
  • お礼率82% (265/321)

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

>c3-c23を選択した状態でマクロを動かしたい >選択セルの右側に新規の列を挿入したい sub macro1()  dim s as string  s = selection.address(,,xlr1c1)  selection.offset(0, 1).entirecolumn.insert shift:=xlshifttoright  selection.offset(0, 1).formular1c1 = "=RANK(RC[-1]," & s & ")" end sub ぐらいで。

5goma
質問者

お礼

keithin 様 ありがとうございました。お蔭様で解決しました。 汎用性が高くて助かります。 大切に使わせていただきます。 簡単で恐縮ですが、お礼申し上げます。

その他の回答 (2)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

No.1です。 たびたびごめんなさい。 前回のコード内の数式での >=RANK(C3,C$3:C$23,1) の最後の「1」を削除してください。 質問文に「降順」とありましたので、勘違いしていました。 普通に数値の大きい順のRANKでよい訳ですよね? 結局 >=RANK(C3,C$3:C$23) と普通にワークシート関数で大丈夫だと思います。m(_ _)m

5goma
質問者

お礼

tom04 様 ありがとうございました。 訂正までしていただき助かりました。大変勉強になりました。 わかりにくくて済みません、選択セルはC列とは限らずに任意の場所という意味でした。 大切に使わせていただきます。 簡単で恐縮ですが、お礼申し上げます。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! ごくごく単純に Sub Sample1() Range("D:D").Insert Range("D3:D23").Formula = "=RANK(C3,C$3:C$23,1)" End Sub ではダメですか?m(_ _)m

関連するQ&A

  • エクセルのマクロ

    こんばんは、宜しくお願いします。 エクセルで行を挿入し前行の数式をコピーするマクロの記録を行ったのが下記の内容です。 Sub Sounyu() ' ' Sounyu Macro ' Rows("4:4").Select Selection.Insert Shift:=xlDown Range("B3:C3").Select Selection.AutoFill Destination:=Range("F3:F4"), Type:=xlFillDefault Range("F3:F4").Select Range("G3").Select Selection.AutoFill Destination:=Range("G3:G4"), Type:=xlFillDefault Range("G3:G4").Select Range("A2").Select End Sub 最後の Range("A2").Selectを挿入した行のAのセルへ カーソルがいくようにするにはどのように変更したら 良いのでしょうか? 教えてください。

  • マクロについて教えてください

    マクロ初心者です。 A~D列の表が少ない時100行、多い時400行あり、同じ操作を何回か繰り返すため、できればマクロで処理したいと思っています。 マクロ記録で作成したのですが、最終行が一定ではないため行数が増えると上手く作動しません。 どこを修正したらいいでしょうか。ご教示いただければ幸いです。 Sub Macro1() ' ' Macro1 Macro ' ActiveCell.FormulaR1C1 = "=SUBSTITUTE(RC[-1],""集計"","""")" Range("G2").Select Selection.AutoFill Destination:=Range("G2:G4"), Type:=xlFillDefault Range("G2:G4").Select Range("H2").Select ActiveCell.FormulaR1C1 = "=SUMIF(R2C1:R13C1,RC[-1],R2C2:R13C2)" Range("H2").Select Selection.AutoFill Destination:=Range("H2:H4"), Type:=xlFillDefault Range("H2:H4").Select Range("H5").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" Range("H6").Select End Sub ちなみに作成したいマクロ 1.F列にA列の「集計」を取り出して、G列にF列の「集計」文字を取り除く。 2.H列にB列「数」を計算する 3.H列の最終行に合計を出す。

  • VBAで関数式の値をセルに入力できるようにしたい。

    こんなマクロをマクロの記録で作ったのですが SUMIF関数の数式をセルに入力するのでなく 値だけを入力するしたいのですがどのように すればいいでしょうか? Sub Macro4() Columns("O:O").Select Selection.Insert Shift:=xlToRight Range("N3").Select Selection.AutoFill Destination:=Range("N3:O3"), Type:=xlFillDefault Range("N3:O3").Select Range("O5").Select ActiveCell.FormulaR1C1 = "=SUMIF(出荷貼付け!C1,RC1,出荷貼付け!C5)" ←ここのところを値だけをセルに入力したい。 Selection.AutoFill Destination:=Range("O5:O978") Range("O5:O978").Select Range("O4").Select End Sub

  • RNKU関数をマクロで記述したいのですが?

    RNKU関数をマクロで記述したいのですが? マクロを勉強しようと思いネットや本を見ながら試行錯誤しております。RANK関数と同じことをしようと思い調べながら実行したのですがうまくいきません。型が一致しませんと出るのですが、ヘルプを見ても良く分からなかったので、だれか教えて頂けませんでしょうか。 Sub Macro1() Range("A1:A17").Select For Each r In Selection Range("B1:B17") = Application.WorksheetFunction.Rank(r, Selection, 1) Next r End Sub A列の順位をB列に表示しようとしました。

  • Excel 2007 マクロ 表の貼り付け

    Excel 2007 マクロ 表の貼り付け Excel 2007 マクロ 表の貼り付けについて教えてください。 <Sheet1>の表にあるA2からD4を <Sheet2>に値貼り付けをします。 表は画像を添付します。 マクロの記録では下記内容になります。 Sub Macro1() ' ' Macro1 Macro ' ' Range("A2:D4").Select Selection.Copy Sheets("Sheet2").Select Range("A2:D4").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub <Sheet1>のA列の行の増減にかかわらず、<Sheet2>に貼り付けることができるように するにはどのようにマクロを修正すればよろしいでしょうか。

  • excel マクロ

    Sub Macro1() ' ' Macro1 Macro ' ' ActiveCell.Offset(-1, 0).Range("A1:G1").Select Selection.Copy End Sub マクロの記録だけでこのコードを作ることは可能でしょうか?

  • PCのマクロについて

    Sub Macro1() ' ' Macro1 Macro ' ' ActiveCell.FormulaR1C1 = "○" Range("F5").Select End Sub Sub Macro2() ' ' Macro2 Macro ' ' ActiveCell.FormulaR1C1 = "●" Range("F5").Select End Sub こんな感じでマクロ入れたんですが図でわかると思うのですが4段目で確認未のボタンを押すと1段目のセルに選択が移動してしまいます。ボタンを押した際に最初に選択したセルから移動しないようにするにはどうすればよいですか?

  • Excel マクロ 添削お願いします

    まず下記マクロをご参照下さい Sub 置換() Range("D9:D195").Select Selection.Replace What:="D1", Replacement:="D2", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False Range("D9").Select End Sub D9からD195を選択して、文字列の置換をマクロで行うつもりで この時置換の対象は D1セルの文字列→D2セルの文字列 で 日々D2には違う文字列が入ります またD9からD195には参照式が入っており、その参照先を置換で切り替えたいのです マクロの記録を基に作ったのですが 思うように動いてくれませんでした 何がいけないのでしょうか? Excel2000 XP です よろしくお願いします

  • Excelのイベントマクロ

    Private Sub Worksheet_Activate()に関する質問です。 ワークシート1と2があるとします。 ワークシート1は普通のデータが記されており、それのソートを実行するマクロをMacro1、そのデータから重複したものを外してソートするマクロをMacro2とし、Macro1から呼び出してます。 今、シート2を開いたときは必ず、シート1でMacro1を実行するようにしたいのですが、以下のように記述すると、無限ループになってしまいうまくいきません。 どなたか、方法をお教えください。 Sheet2に記載したイベントマクロ Private Sub Worksheet_Activate() Sheets("Sheet1").Select Macro1 Sheets("Sheet2").Select End Sub 標準モジュールに記載したマクロ Sub Macro1() Dim team As Integer ActiveSheet.Unprotect ("pass") Range("A3:c18").Select Selection.Sort Key1:=Range("c3"), Order1:=xlAscending, Key2:=Range("A3") ,Order2:=xlAscending, Header:=xlNo,OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal team = Range("b1").Value ActiveSheet.PageSetup.PrintArea = "$A$3:$c$" + CStr(team + 2) Macro2 Range("A1").Select ActiveSheet.Protect ("pass") End Sub Sub Macro2() Range("i3:j18").ClearContents Range("i3").Select Selection.Consolidate Sources:="R3C6:R18C7", Function:=xlMax, TopRow:=False,LeftColumn:=True, CreateLinks:=False Range("i3:k18").Select Selection.Sort Key1:=Range("k3"), Order1:=xlAscending, Header:=xlNo,OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal Range("j3:j18").Select Selection.NumberFormatLocal = "0_);[赤](0)" End Sub

  • エクセルのマクロ

    Sub test() x = Selection.Row y = Selection.Column z = Selection.Columns.count Range(Cells(x, y), Cells(x, y + z - 2)).Select Selection.ClearContents End Sub 上記マクロは、同一行の連続するセルを二つ以上選択状態にして実行すると、範囲内の最も右にあるセルの値のみが残って他のセルの値は全て消去されます。 上記マクロを、複数のセレクションに対して対応できるようにするには、どうすればいいでしょうか? 例えば、c1~f1、d3~h3、e10~g10を選択して実行すると、f1とh3とg10の値のみ残って他の値は消えるということです。

専門家に質問してみよう