Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3195 / 13644 ツリー ←次へ | 前へ→

【63558】VBAでMedian関数を用いて各行列の中央値を得る 09/11/17(火) 20:06 質問[未読]
【63622】Re:VBAでMedian関数を用いて各行列の中央値... 通行人 09/11/21(土) 23:56 回答[未読]
【63627】Re:VBAでMedian関数を用いて各行列の中央値... 09/11/22(日) 15:22 お礼[未読]
【63626】Re:VBAでMedian関数を用いて各行列の中央値... Usa 09/11/22(日) 14:04 発言[未読]
【63628】Re:VBAでMedian関数を用いて各行列の中央値... 09/11/22(日) 15:24 お礼[未読]

【63558】VBAでMedian関数を用いて各行列の中央値...
質問   E-MAIL  - 09/11/17(火) 20:06 -

引用なし
パスワード
   今,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

【63622】Re:VBAでMedian関数を用いて各行列の中央...
回答  通行人  - 09/11/21(土) 23:56 -

引用なし
パスワード
   >今,A1から順に320×256の整数がエクセルファイルで保存されています.

どのように?

>上記の行列にmedian関数を使用して3×3の中央値を求め,それを中央のセルの値と中央値を置き換えます.

3x3 って、具体的に どういう事?

>自業自得ではあると思いますが,下記のプログラムでMedian関数の適用範囲(今なら3x3)を4x4といった風にどこで変更するのか教えていただけませんか?
>s = s & IIf(y = 1, "R", "R[-1]")
>s = s & IIf(x = 1, "C", "C[-1]")
>s = s & IIf(y = my, "R", "R[1]")
>s = s & IIf(x = mx, "C", "C[1]")

具体的な説明がないから、勝手な推測だけど
↑これじゃないの?

「どこで変更する」と質問しているから、場所を答えた。
あとは、勉強してください

【63626】Re:VBAでMedian関数を用いて各行列の中央...
発言  Usa  - 09/11/22(日) 14:04 -

引用なし
パスワード
   http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1132932656

【63627】Re:VBAでMedian関数を用いて各行列の中央...
お礼   E-MAIL  - 09/11/22(日) 15:22 -

引用なし
パスワード
   ▼通行人 さん:
教えていただいてありがとうございました。
これを参考に勉強してみます。

【63628】Re:VBAでMedian関数を用いて各行列の中央...
お礼   E-MAIL  - 09/11/22(日) 15:24 -

引用なし
パスワード
   ▼Usa さん:
回答ありがとうございます。
参考にしてみます。

3195 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free