|
今,A1から順に320×256の整数がエクセルファイルで保存されています.
上記の行列にmedian関数を使用して3×3の中央値を求め,それを中央のセルの値と中央値を置き換えます.
この処理を320×256の行列に適用して(一列目と一行目は除く),画像処理にあるメディアンフィルタをかけます.
私はVBAを全く扱ったことがないのですが,上記のプログラムを教えてもらうことができました.(今,教えてもらった方はいません)
これを機会に自分で勉強して内容を理解し,Median関数の適用範囲(今なら3x3)を変更したり出来るようになろうと思っていました.
しかし,急に上記の適用範囲を変更せざるおえなくなり,早急に下記のプログラムを理解する必要が出てきてしまいました.
一応,関数や使われているモノの意味を調べ考えてみたのですが適用範囲をどこで変えているのかわかりません。
自業自得ではあると思いますが,下記のプログラムでMedian関数の適用範囲(今なら3x3)を4x4といった風にどこで変更するのか教えていただけませんか?
どなたかよろしくお願いします。
Option Explicit
Sub MidFlt()
Dim x As Long, y As Long
Dim mx As Long, my As Long
Dim a As Variant, s As String
Dim r As Range
Set r = Range("A1:M256") ''入力範囲
Worksheets.Add
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
my = r.Rows.Count ''行数
mx = r.Columns.Count ''列数
ReDim a(1 To my, 1 To mx)
For y = 1 To my ''各行
For x = 1 To mx ''各列
s = "=MEDIAN(" & r.Worksheet.Name & "!"
s = s & IIf(y = 1, "R", "R[-1]")
s = s & IIf(x = 1, "C", "C[-1]")
s = s & ":"
s = s & IIf(y = my, "R", "R[1]")
s = s & IIf(x = mx, "C", "C[1]")
s = s & ")"
a(y, x) = s
Next x
Next y
Cells(r.Row, r.Column).Resize(my, mx).FormulaR1C1 = a
Set r = Nothing
Application.Calculation = xlCalculationAutomatic
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
|
|