- ベストアンサー
繰り返しマクロのについて
マクロ初心者です。是非お教えください。 D列7行目から30行目までにデータ入力します。次の週はE列7行目から30行目までデータを入力します。次の週はF列に・・・・こうして一ヶ月入力を繰り返します。入力されたもっとも右側の列のランクをS列に入力したいのです。 どなたかご教授下さい。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
No1、No2です。 おまけで関数で処理してみました。 S7セルに =RANK(INDEX(D7:R7,1,MATCH(10^8,D$7:R$7)),OFFSET(D$7,0,MATCH(10^8,D$7:R$7)-1,27,1)) 下までコピーしてみてダメでしょうかね。
その他の回答 (6)
- hallo-2007
- ベストアンサー率41% (888/2115)
No1、No2です。 おまけで関数で処理してみました。 S7セルに =RANK(INDEX(D7:R7,1,MATCH(10^8,D$7:R$7)),OFFSET(D$7,0,MATCH(10^8,D$7:R$7)-1,27,1)) 下までコピーしてみてダメでしょうかね。
- tom04
- ベストアンサー率49% (2537/5117)
No.4です。 補足を読ませていただきましたが、ちょっと自信がないので マクロを二つにしてみました。 (1)最右側のデータがその列の何位になるか? (2)最右側データがD4~R30のデータ中、何位になるか? Sub 列の順位() Dim i, j, k As Long Dim vl As Variant For i = 7 To 30 If WorksheetFunction.Count(Range(Cells(i, 4), Cells(i, 18))) Then For j = 4 To 18 If Cells(i, j) <> "" Then vl = Cells(i, j) k = j End If Next j Cells(i, 19) = WorksheetFunction.Rank(vl, Range(Cells(4, k), Cells(30, k))) End If Next i End Sub Sub 範囲全体の順位() Dim i, j As Long Dim vl As Variant For i = 7 To 30 If WorksheetFunction.Count(Range(Cells(i, 4), Cells(i, 18))) Then For j = 4 To 18 If Cells(i, j) <> "" Then vl = Cells(i, j) End If Next j Cells(i, 19) = WorksheetFunction.Rank(vl, Range("D4:R30")) End If Next i End Sub ※ この二つのマクロのどちらかで解決しないでしょうか?m(__)m
お礼
ご教授ありがとうございました。 もっとも右側の列のマクロを走らせて見ました。が 一位が表示されず 二位からしか表示できませんでした。 でも、マクロの書き方をご教授いただき ありがとうございました。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 横からお邪魔します。 D列~R列のその行の最も右側の数値が、D~R列でのランク(順位)を表示すれば良いわけですかね? 一応そういうコトだとしての一例です。 Sub test() Dim i, j As Long Dim vl As Variant For i = 7 To 30 If WorksheetFunction.Count(Range(Cells(i, 4), Cells(i, 18))) Then For j = 4 To 18 If Cells(i, j) <> "" Then vl = Cells(i, j) End If Next j Cells(i, 19) = WorksheetFunction.Rank(vl, Range(Cells(i, 4), Cells(i, 18))) End If Next i End Sub こんな感じではどうでしょうか?m(_ _)m
補足
ほんとに説明不足で申し訳ありません。 データを入力してある列のもっとも右側の列 例えばF列の7行目から30行目までの ランク(順位)を S列の7行目から30行目までに、表示させたいのです。 手入力ですとS列に =RANK(F7,$F$7:$F$30,1) となります。 F列にデータを入力すると 次はG列に次のデータを入力していきます。G列の次はH列・・・・ 列が変わっても、データ入力されている 一番右側のデータの順位を S列に表示させたいのです。 なにとぞよろしくお願いします。
- hallo-2007
- ベストアンサー率41% (888/2115)
>もっとも右側の列のデータを RANK関数を使って順位をS列に表示させたいのです 具体的に例を上げていただけないでしょうかね。 仮に d列からJ列までデータが入っているとして S7セルにはどういったRANK関数が入るのでしょうか。 Rank(数値、参照、順位) ですが、どの数値が どの範囲でといった例を上げてみてください S7セル S8セルに入る Rank関数を具体的にお願いします。 或いは D7~J7に適当な数値を入れた表とS7の結果を!!
お礼
ありがとうございました。 問題解決しました。 またの機会にご教授いただけますようお願いいたします。
補足
ほんとに説明不足で申し訳ありません。 データを入力してある列のもっとも右側の列 例えばF列の7行目から30行目までの ランク(順位)を S列の7行目から30行目までに、表示させたいのです。 手入力ですとS列に =RANK(F7,$F$7:$F$30,1) となります。 F列にデータを入力すると 次はG列に次のデータを入力していきます。G列の次はH列・・・・ 列が変わっても、データ入力されている 一番右側のデータの順位を S列に表示させたいのです。 なにとぞよろしくお願いします。
- hallo-2007
- ベストアンサー率41% (888/2115)
No1です。 >入力されたもっとも右側の列のランク って?なのですが ひょっとして Sub ボタン1_Click() For i = 7 To 30 Range("S" & i).Value = WorksheetFunction.Rank(Cells(i, Range("D" & i).End(xlToRight).Column), Range("D" & i & ":R" & i)) Next End Sub こんなことでしょうか? もし違ったら もっとも右側の列のランク とは何か、もう少し具体的に補足してください。
補足
説明不足で申し訳ありません。 もっとも右側の列のデータを RANK関数を使って順位をS列に表示させたいのです。 No1で、お教えいただいたマクロを走らせてみましたが、S列に表示されたのは1位から3位までしか表示されませんでした。 なにとぞよろしくお願いいたします。
- hallo-2007
- ベストアンサー率41% (888/2115)
こんな感じでしょうか Sub ボタン1_Click() Range("S7:S30").Value = Range(Cells(7, Range("D7").End(xlToRight).Column), Cells(30, Range("D7").End(xlToRight).Column)).Value End Sub Range("D7").End(xlToRight).Column でD7セルから右へ移動して右側最後の列番号を検索しています。
補足
回答ありがとうございます。 このVBAだと、データ列の一番右側の列参照はできますが、参照した列の データのランクをS列に入れたいのです。 よろしくお願いします。
お礼
目から鱗です。 関数で 出来るなんて思っても見ませんでした。 ありがとうございました。