重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

はじめまして。
うまく説明できるかわかりませんが、どうぞよろしくお願いします。

エクセルでA列に1から50までの数字が優先順位として降順で入力されているとします。優先順位が変わったときに、例えば、優先順位が3だったセルに1と入力した場合、下記のように自動的に優先順位を再計算するようにできるものでしょうか?

 A   A             
 1   1             
 2   2             
 3   1(3から1に変更)     
 4   4             
 5   5             
 .   .             
 .   .   

(変更後)
 A
 2
 3
 1
 4
 5
 .           
 . 

自動的に順位を再計算できれば、その後対象データを新しい優先順位順に並べ替えようと思っています。

何卒お力をお貸しください(><)

A 回答 (5件)

たとえばこういうことができればよいのでしょう。


・順位10を5に変更したとき
 順位1~4は順位変わらず
 順位5~9は順位が1ずつ下がる(6~10になる)
 順位11~ は順位変わらず
・順位10を20に変更したとき
 順位1~9は順位変わらず
 順位11~20は順位が1ずつ上がる(10~19になる)
 順位21~ は順位変わらず

変更する順位が1つだけなら以下のようなことは可能です。
 B列に元順位(B2~B51に1~50が入るとします)
 A列の変更する元順位の行に変更後順位を記入
 D2セルに変更後順位(作業用)
 E2セルに変更前順位(作業用)
 C列に変更後順位を表示
として、
 D2;=MAX(A2:A51)
 E2;=VLOOKUP(D2,A2:B51,2,FALSE)
 C2;=IF(B2=$E$2,A2,IF($D$2<=$E$2,IF(AND($D$2<=B2,B2<=$E$2),B2+1,B2),IF(AND($E$2<=B2,B2<=$D$2),B2-1,B2))) としてC51までコピー

 順位10を変更するときはA11セルに変更後の順位をいれればC列に変更後順位が表示されます(A11セル以外は空白にしておくこと)。

ちなみに2つ以上の順位の変更はかなり難しいです。少なくとも関数ではできません。
    • good
    • 0

簡単そうで、あまり一般的な処理では無いと思います


条件は重複無く連続で昇順であること、最大値より大きな値を入力しない
1位の変更だけでなく、5位を10位にといった変更にも対応しています
'--------------------------------------------------------
Sub 順位書換()
Dim 書換開始, 書換終了, 値調整, 処理行 As Integer

For 処理行 = 1 To Range("a65536").End(xlUp).Row
If Cells(処理行, 1).Value <> 処理行 Then
If 処理行 > Cells(処理行, 1).Value Then
書換開始 = Cells(処理行, 1).Value
書換終了 = 処理行 - 1
値調整 = 1
Exit For
ElseIf 処理行 < Cells(処理行, 1).Value Then
書換開始 = 処理行 + 1
書換終了 = Cells(処理行, 1).Value
値調整 = -1
Exit For
End If
End If
Next 処理行

For 処理行 = 書換開始 To 書換終了
Cells(処理行, 1).Value = Cells(処理行, 1).Value + 値調整
Next 処理行
End Sub
'--------------------------------------------------------
エラー処理をしていないので、条件以外で実行すると、とんでもない結果になります
    • good
    • 0

 A列だけでは無理と思います。

たとえば
A B
1 =RANK(A1,$A$1:$A$50,1)
2 =RANK(A2,$A$1:$A$50,1)
3 =RANK(A3,$A$1:$A$50,1)
4 =RANK(A4,$A$1:$A$50,1)
5 =RANK(A5,$A$1:$A$50,1)
の計算結果は
A B
1 1
2 2
3 3
4 4
5 5
ですが、A3を-1にすると、
  A B
  1 2
  2 3
-1 1
  4 4
  5 5
となります。
 全ての列の優先順位が変わる可能性があるのなら、優先順位の高い順に―50から使います。
    • good
    • 0

>もともと3だったセルに1といれると、関数またはマクロを使って優先番号を上のほうから自動的に再計算することができればと思っていたのです。

3番だったものが1番に繰り上がったので、1番だったものが2番、2番だったものが3番というようにどうにか自動再計算できないものかと考えていたのです。<

私には マクロは、わかりませんが 
自動的に再計算されるのは難しいような気がします。
    • good
    • 0

エクセル2003で並べ替えは、データ → 並べ替え → 最優先されるキーを選択 → 降順、昇順を選択


でできます。

質問がよくわかりません
>A列に1から50までの数字が優先順位として降順で入力されているとします。<
(1)優先順位は、通常1,2と順に並ぶものではないですか例示の1、2、3、4、5も昇順(小さい数字から順に並ぶ)ですね、降順という意味が良くわかりません。


>優先順位が3だったセルに1と入力した場合
質問のように3が1になると結果として1が二つになりますから<
並べ替えをすると1、2,3、4、5とはならず1、1、2、4、5(昇順の場合)と1が二つとなり3がない結果になります。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
説明ベタですみません。

>A列に1から50までの数字が優先順位として降順で入力されているとします。<
(1)優先順位は、通常1,2と順に並ぶものではないですか例示の1、2、3、4、5も昇順(小さい数字から順に並ぶ)ですね、降順という意味が良くわかりません。
→「降順」は「昇順」の間違いでした。


>優先順位が3だったセルに1と入力した場合
質問のように3が1になると結果として1が二つになりますから<
並べ替えをすると1、2,3、4、5とはならず1、1、2、4、5(昇順の場合)と1が二つとなり3がない結果になります。
→そうなんですが、もともと3だったセルに1といれると、関数またはマクロを使って優先番号を上のほうから自動的に再計算することができればと思っていたのです。3番だったものが1番に繰り上がったので、1番だったものが2番、2番だったものが3番というようにどうにか自動再計算できないものかと考えていたのです。

質問の内容がうまく伝わればいいのですが。

お礼日時:2008/12/06 07:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!