|
▼初心者M さん:
A列 B列
>5100 A
>7600 イ
>6800 イ
>
>などのようなデータが数行に渡って存在する表で、同じ「イ」なら大きい数の7600に合わせる、というような処理をしたいです。
>「A」や「イ」などの記号は、無作為に数パターン存在します。
>参考までに、記号が無作為でなく、「A」と決め打ちであれば、下のコードで動きます。
その考え方でいいとおもいますよ。
簡単のため、表は A列、B列だけの構成と考えます。
以下は、「A」だけでなく、複数のキーワードに対応するために、
Dictionaryオブジェクトを使って複数キーワードを登録できるように
したものです。
あるキーワードがまだ辞書に登録されていなければ、そのキーワードと
その行のA列の数値を「組データ」として登録しておきます。
すでに登録済みのキーワードが出てきたら、その行のA列の数値を 現在登録
されている数値と比較して、これより大きいときだけ、そのキーの数値を更新
します。
これを最後の行まで繰り返すと、キーワードごとに数値の最大値の入った配列
ができますので、
最後にもとのA列をこの配列で上書きしてやります。
Sub test()
Dim a, b
Dim i As Long
Dim r As Range
Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
Set r = Range("A6", Range("A6").End(xlDown))
a = r.Value 'A列の値
b = r.Offset(, 1).Value 'B列の値
For i = 1 To UBound(b)
If Not dic.Exists(b(i, 1)) Then
dic(b(i, 1)) = a(i, 1)
ElseIf dic(b(i, 1)) > a(i, 1) Then
dic(b(i, 1)) = a(i, 1)
End If
Next
For i = 1 To UBound(b)
a(i, 1) = dic(b(i, 1))
Next
r.Value = a
End Sub
|
|