重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

EXCEL2007 各行列にmedian関数でメディアンフィルタをかけ違うシートに処理後の値を出力

今,A1から順に640×480の整数が.csvファイルで保存されています.
上記の行列にmedian関数を使用して3×3の中央値を求め,それを下記の画像のように中央のセルの値と中央値を置き換えます.
この処理を640×480の行列に適用して(一列目と一行目は除く),画像処理にあるメディアンフィルタをかけようと思っています.
ですがmedian関数を使用しても下記の画像のように中央値しかえられず,640×480のセルに適用するのには時間がかかりすぎます.
そこで,上記の処理を行いかつ,処理後の640×480の中央値を別のシートに同じ配列で出力をしたいのですが,できるでしょうか?
おそらくマクロやVBAを利用するのでしょうが,自分は今まで扱ったことがなく困っています.
一応本を買い,読んでみたのですが上記の処理はいろいろな機能が合わさっているため実行するにはどうしたらいいのかわかりません.
どなたか,アドバイスまたは何をどのように使えば上記の処理ができるか教えてください.
よろしくお願いします.

「EXCEL2007 各行列にmedian」の質問画像

A 回答 (3件)

私が

http://oshiete1.goo.ne.jp/qa5443577.htmlで答えた通り、別
シートのマトリックスを参照するように書いて希望のサイズにド
ラッグで複写するだけなんだけどね。1セルずつ置き換えちゃダメ
ですよ。全ての画素は独立なんだから。

ちなみに古~いMacの2004で128x128を処理するのに数秒かかる程度
です。一番時間がかかったのは適当な画像を拾ってASCIIで出力す
るところかな。
「EXCEL2007 各行列にmedian」の回答画像3

この回答への補足

grumpy_the_dwarfさん二度の回答ありがとうございます.
再度質問なんですが,上記の処理のやり方がいまいちわかりません.
Sheet2のA1に画像にあるように=MEDIAN(OFFSET(Sheet1!B2,-1,-1,3,3))と打ち込んで,あとはそのセルの右下はじカーソルを持っていき+を希望のサイズの所まで持っていけばよいのでしょうか?
わかりにくい説明で申し訳ありませんが,もう一度手順について詳しく教えてください.
よろしくお願いします.

補足日時:2009/11/15 16:43
    • good
    • 0

#1のご回答の方法で関数式の複写機能を使って、関数でも出来るようです。


しかしメヂアン値を飛び飛び複写するなら良いが、メディアン値を連続行に出したいときはどうなるのかな。
ーーー
VBAでは範囲はRange(Cells(i,"B"),Cells(i+2,"D"))
のようになるので(B,C,D列の場合)
たてまとまりが3行の場合は
For i=1 to 1000 Step 3
のように左上隅のセルを3つづつ飛ばして(Srep 3)捉えて、最終行まで、繰り返せば出来ると思う。
ーー
また
Sub test01()
m = Application.WorksheetFunction.Median(Range("A1:C3"))
MsgBox m
End Sub
でMedian関数が、VBAからでも使えることを確認した(VBAでは使えない関数もあるので注意)。
やって見てください。
計算されたメヂアン値を受けるセルはCells(k、”S")=m
K=K+1
のようにやる。kは書き指すセルの行ポインタとして使うもの。
次々次行につめて書きだされる。
    • good
    • 0

>A1から順に640×480の整数


sheet1にデータを入れます。
sheet2には、3×3の中央値を求めるため
B2=IF(AND(MOD(ROW(),3)=2,MOD(COLUMN(),3)=2),MEDIAN(Sheet1!A1:C3),"")
と入力して640×480の範囲にCopy
sheet3に求める表を作ります。
=IF(Sheet2!A1="",Sheet1!A1,Sheet2!A1)
と入力して640×480の範囲にCopy
    • good
    • 0

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