プロが教える店舗&オフィスのセキュリティ対策術

エクセルの並び替えと置換の質問です。
指定されたデータのうちから、行単位で最大の値をもつセルのデータを、前方に或る文字列を挿入された値に置換するにはどうすればよいのでしょうか。

例えば 3*3の
 A B C
1 9 0 2
2 5 5 4
3 0 8 6

というデータを選択して

 A B C
1 M9 0 2
2 M5 M5 4
3 0 M8 6

という風に置換したいのです。
(行単位で一番大きい値の先頭にMを挿入する。)
実際には20列*300行以上あるのですが・・・。

どなたか、効率的な方法を教えていただけないでしょうか。(m_ _m)

A 回答 (3件)

考え方は以下のようになるかと思います


1 1行1列目を最大値とする
2 最大値と1行2列目を比較し、大きい方を最大値とする
3 2を最終列まで繰り返し、1行目の最大値を求める
4 最大値と1行1列目を比較し、同じならば"M"を付加する
5 4を最終列まで繰り返し、1行目終了
6 1~5を最終行まで繰り返す
以上をマクロ化すると
'-------------------------------------------------------------
Sub test()
Dim 行, 列 As Integer
Dim 最大値 As Long
For 行 = 1 To Range("a1").End(xlDown).Row
最大値 = 0
For 列 = 1 To Range("a1").End(xlToRight).Column
If 最大値 < Cells(行, 列).Value Then 最大値 = Cells(行, 列).Value
Next 列
For 列 = 1 To Range("a1").End(xlToRight).Column
If 最大値 = Cells(行, 列).Value Then Cells(行, 列).Value = "M" & Cells(行, 列).Value
Next 列
Next 行
End Sub
'-------------------------------------------------------------
のようになります
エラー処理はしていません
参考になればどうぞ
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2009/01/05 23:04

[回答番号:No.1]に示した式中の


OFFSET(Sheet1!$A1,,,,20)
は、単に
Sheet1!$A1:$T1
でOKでした。(*^_^*)

それよりも、[条件付き書式]で「最大の値をもつセル」を着色して明示するのが良さそうな気がしています。
    • good
    • 0

Sheet1       Sheet2


  A B C D      A  B  C
1 9 0 2     1 M9  0 2
2 5 5 4     2 M5 M5 4
3 0 8 6     3  0 M8 6
4          4

Sheet2!A1: =IF(Sheet1!A1=MAX(OFFSET(Sheet1!$A1,,,,20)),"M"&Sheet1!A1,Sheet1!A1)
または
Sheet2!A1: =IF(Sheet1!A1="","",IF(Sheet1!A1=MAX(OFFSET(Sheet1!$A1,,,,20)),"M"&Sheet1!A1,Sheet1!A1))
    • good
    • 0

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