|
▼初心者M さん:
>頂いたコードを最初に試した際、何故か「最小値」を取ってきてしまっていたので
>
>ElseIf dic(b(i, 1)) > a(i, 1) Then
>
>の「>」を「<」に変えたところ、上手くいきました。
あー、逆でした。失礼しました m(_ _)m
おわびに、
[H6]セルを先頭とする39行×26列の表があるときの test応用です。
Sub test2()
Dim a
Dim i As Long, j As Long, n As Long
Dim r As Range
Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
Set r = Range("H6").Resize(39, 26) '[H6]を左上とする39行×26列
a = r.Value '表全部の値
For j = 2 To UBound(a, 2) Step 2 '列方向 1列おき
For i = 1 To UBound(a, 1) '行方向
If Not IsEmpty(a(i, j)) Then
n = a(i, j - 1)
If Not dic.Exists(a(i, j)) Then
dic(a(i, j)) = n
ElseIf dic(a(i, j)) < n Then
dic(a(i, j)) = n
End If
End If
Next
Next
For j = 2 To UBound(a, 2) Step 2 '列方向 1列おき
For i = 1 To UBound(a, 1) '行方向
If Not IsEmpty(a(i, j)) Then
a(i, j - 1) = dic(a(i, j))
End If
Next
Next
r.Value = a
End Sub
いちおう、空白セルは実行しないようにしました。
|
|