- ベストアンサー
エクセルで、数値の境目を数えたい
やりたい事というのは、オシロスコープで取り込んだパルス波形のデータをCSV形式でPCに取り込み、そのパルス数をエクセルに数えさせる、というものです。 Hレベル5.0、Lレベルを0とすれば、非常に短い間隔で0.1と5.0を行ったりきたりするのですが、パルスを数えるのであれば0から5に変わった回数と5から0に変わった回数を数えれば事足りると考え得ました。 そこでたとえば、 ・A1~A10までが0.1(±0.3) ・A11~A20までが5.0(±0.3) ・A21~A30までが0.1(±0.3) (以下略) というように数値が入っているとして、 A10とA11、A20とA21のように、数値が急激に変化した場所の以外を残して削除する。もしくは、変化した回数をカウントしてそれが何回目に起きたのかをセルに書き込むにはどのようにすればよろしいでしょうか? マクロは全く触った事が無く、周りに詳しいものもいないのに急いでデータがほしいため質問しました。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
方法は幾つかあると思いますが、ひとつの例として・・・・ とりあえず、マクロではなく関数式を使って、 B2セルに、=IF(OR(A2-A1>1,A1-A2)>1),1,0) ←こんな式を入れておいて、B列の下方にコピーすると隣のA列のセルが、1つ上のセルとの間で差が1上になったときにB列に1を表示します。 こうすれば数値の変わり目がわかるので、あとはその表示された物を、 SUM や COUNTIF 関数で数えれば、変化の回数は数えられると思います。 増えた場合と減った場合を分けて数えるのなら、 B2セルに、=IF(OR(A2-A1>1,2,IF(,A1-A2)>1),1,0) ←こんな式にして、COUNTIF 関数で1と2をそれぞれ数えれば判ると思います。
その他の回答 (4)
forbiddendollさん、 皆さんはセッセと回答しておられますが、私にはどうしても質問の意味がサッパリ分かりません。 》 …急激に変化した場所の以外を残して削除する この「場所の以外を残して」とはどういうことですか? 例えば、下のA列のようなデータがあったとして、C列のようにすることですか?それともE列のようにすることですか? 》 …それが何回目に起きたのかを… 「それ」って何を指しますか? A B C D E 1 0.1 -0.1 0.1 2 -0.1 4.7 -0.1 3 0.2 4.9 0.2 4 0.1 0.1 0.1 5 -0.2 -0.2 6 -0.2 -0.2 7 0.2 0.2 8 0.4 0.4 9 0.2 0.2 10 -0.1 5.1 11 4.7 5.2 12 5.1 5.0 13 5.2 5.3 14 5.0 5.2 15 5.3 4.9 16 5.2 5.2 17 4.9 4.8 18 5.2 0.3 19 4.8 -0.2 20 4.9 0.1 21 0.1 0.3 22 0.3 -0.1 23 -0.2 -0.1 24 0.1 0.2 25 0.3 0.0 26 -0.1 0.1 27 -0.1 28 0.2 29 0.0 30 0.1
お礼
》 …急激に変化した場所の以外を残して削除する >この「場所の以外を残して」とはどういうことですか? >例えば、下のA列のようなデータがあったとして、C列のようにす>ることですか?それともE列のようにすることですか? 私にはあなたの問いかけこそ理解できませんが? 例のつもりでなにやら数値を書いてありますが、C列もE列も一体何をもって数値を抜き出したのか説明も無いので何を思ってこの数値が取り出されたのか分かりません。 質問内容を見ていただければおおよそ分かると思いますが、 仮にA列に 1 0.1 2 -0.1 3 4.8 4 5.1 5 -0.1 と数値が入っていれば、1と3を取り出したいのですよ。あなたの例えのC列には4.7と4.9が入っていますが、これの何所が「急激な変化」なんですか? 》 …それが何回目に起きたのかを… >「それ」って何を指しますか? 正直、なぜこんな場で日本語の教育をしなければならないのか、全く持って理解できませんが説明しましょうか。 「A10とA11、A20とA21のように、数値が急激に変化した場所の以外を残して削除する。もしくは、変化した回数をカウントして[それ]が何回目に起きたのかをセルに書き込むにはどのようにすればよろしいでしょうか?」 とあり、疑問にされているのは[]ないのそれが何をさしているか?という事ですが。 この場合、[それ]がさすものは「急激に変化した場所」でしょう。確かに[変化した回数]ともとれますが、質問内容全体からどちらをさすかなんて少し考えれば分かると思いますが? >皆さんはセッセと回答しておられますが、私にはどうしても質問の意味がサッパリ分かりません。 分からないなら引っ込んでなさい。 むしろ私には、貴方にだけ日本語が通じなかった事のほうが分かりません。教えてくれますか?
- imogasi
- ベストアンサー率27% (4737/17069)
信号処理などの門外漢なので、下記が使えるか質問者が考えて見てください。 B1:B12 0 1 0 1 0 0 1 0 0 1 0 0 0と1だが数字は何でも良い、直前の値と比べて変化した回数を勘定するつもり。 式として、 =SUM(IF(B1:B11>B2:B12,0,1)) と入れて、SHIFT、CTRL,ENTERの3つのキーを同時押しする。配列数式という。式の前後が{}で囲まれる。 結果 7 エクセルグラフを描くと突起が4つあることが判る。 一般的には尖点の高さは不揃い?かと思うが。 (結果+1)/2がピーク(微分計数の符号の変化のようなもの。尖り点)の数ではないかと思うがどうだろう。
お礼
ありがとうございます。 これをみて、いっそ数値を2値化すればいい事にきがつきました。 4.0以上なら1、それ以下は0とすれば、3.3などという電圧が変化していく最中にも対応でき、 その2値化した数値に対してNo.1の解答者の方法で変化した回数をカウントすれば問題なくパルス数を数えることができました! みなさんのおかげで非常に素早くほしい結果を得られる状態になりました。 ありがとうございました。
- kuma56
- ベストアンサー率31% (1423/4528)
カッコがちょっとおかしかったようです。 B2セルに、=IF(OR(A2-A1>1,A1-A2>1),1,0) と =IF(A2-A1>1,2,IF(A1-A2)>1,1,0) こうでしたm(__)m
- mu2011
- ベストアンサー率38% (1910/4994)
次の方法は如何でしょうか。 (1)データ表の先頭行に見出し行を挿入、仮にA1(データ)、B1(変化)、C1(発生回数) (2)B2に0を入力、B3に=(ABS(A2-A3)>4)*1を入力、B2のフィルハンドル(セル枠右下の■)をダブルクリック ※差分を4としていますが任意の値に調整して下さい。 (3)C2に=ROW(A1)を入力、C2のフィルハンドルをクリック (4)データ→フィルタ→オートフィルタ→B列のフィルタ矢印ボタンを押下、1を選択して抽出セル範囲をコピーして別シートに形式を選択して貼り付け→値を選択して貼り付け
お礼
ありがとうございます。 確かにこれでカウントはできました。 が、正確ではないようです。調べてみると、 パルスが立ち上がっている途中、つまり変化の最中を読むと (どうやら時折、5.0と0の間に3.3などといった数値が含まれるようです。) どうやら正確にカウントできなかったようです。 これは自分が提示した条件が悪かったせいですね。 申し訳ありません。 ですが、考え方としては非常に納得が行きました。 ありがとうございました。