- ベストアンサー
エクセルで、特定セルとの間隔数値を求める方法はありますでしょうか??
お世話になります^ ^ みなさんとても親切な方で、大変恐縮ですm(_ _)m 10000以上のデータがあるのですが、、 あるセルからあるセルまでの間隔の数値を、 自動的に求める方法はありますでしょうか?? 数値はHセルに入力しています。 例えば、数値1と2と、 他の数値とのセル間隔を数字で求められたらと思っています。 例)セルH1 2 セルH2 8 セルH3 6 セルH4 15 セルH5 1 セルH6 1 となる場合、 1と2以外のセル間を数字で求めると、 0→3→0となります。 このように求められる方法はありますでしょうか? 稚拙な文章のため、 意味がわからない!などありましたら、 ご指摘ください。 よろしくお願い致しますm(_ _)m
- みんなの回答 (17)
- 専門家の回答
質問者が選んだベストアンサー
あっ、Chiquilinさん。。。 ありがとうです。^^ tsuna_sandさん。 Chiquilinさんは色んなQ&Aで回答されているお仲間です。 このままエラーが回避できない可能性もありますから、 一度複製を作って、Chiquilinさんの方法も試して見てください。
その他の回答 (16)
- imogasi
- ベストアンサー率27% (4737/17069)
珍しいい型の問題で、それだけに十分説明してもらわ無いとわからない。 例の数も少なすぎる。 ーー VBAでやれば、下記のように簡単な問題ではないのかな。 まずA列にデータがあるとして、 (1)A列の2を1に置換する。 (2)シートでALT+F11キー ALTキーを押したままでIキー、そしてMきーを押す。標準モジュールというのが出る。そこへ下記をコピペする。 Sub test01() d = Range("a65536").End(xlUp).Row 'A列最下行を捉える k = 1 m = 1 For i = 1 To d If Cells(i, "A") = 1 Then 'A列の1を探す gyo = i 'MsgBox gyou - m Cells(k, "C") = gyo - m 'C列に表示 k = k + 1 m = gyo + 1 End If Next i End Sub ーー (3)F5キーをおす。実行される (4)結果(C列) A列 C列 1 0 8 3 6 0 15 1 1 ==== 何分質問の問題点を誤解していたらすみません、無視してください。
- suekun
- ベストアンサー率25% (369/1454)
Iの列には =IF(OR(H1=1,H1=2),ROW(),"") という数式が入っていて、1と2のある行には それぞれ行番号が表示されてますよね。 で、そのことを踏まえて =IF(I2="","",I2-(MAX($I$1:I1)+1)) という数式を今度はJ2から下方へコピーです。 この二列、二つの数式で完成です。
補足
いつもご回答ありがとうございます!! やっとできました^ ^b 最後の質問なのですが、 J列で取得した、1と2のセル間の数字を、 例えばK列にまとめて表示できますでしょうか? J列にはセル間の数字が表示されていますが、 空白が長く続きますし、 なにしろデータ量が10000万以上と膨大ですので、 見やすくひとつの列に空白なしで並べられたら、、 と思っております。 いつもお時間をさいていただきまして、 ありがとうございますm(_ _)m
- suekun
- ベストアンサー率25% (369/1454)
>J1セルではなく、J2セルにそのまま >=IF(I2="","",I2-(MAX($I$1:I1)+1)) >をコピーペしたのですが、 >何も起こりません^ ^; ごめんなさい言葉足らずでした。 この数式をそのままデーターがあるだけ下方にコピーです。^^; J2に該当する1・2の数値が無ければJ2にだけ貼り付けても 何も変化しませんね^^;
補足
ご回答ありがとうございます! 言葉足らずなんてとんでもないです。 わたくしが初心者すぎるだけですので。。 >この数式をそのままデーターがあるだけ下方にコピーです。^^; とのことですが、 つまりJセルの行すべて(J1~J10000以上のセル)に、 ご教授いただいた数式をコピペするということでしょうか? それでしたら先ほどやってみましたが、 何も起こりませんでした。。
- suekun
- ベストアンサー率25% (369/1454)
さらに「1」引く為には単純に数式の最後に 「-1」を付け足すだけです。 先ほどの関数は、「1」か「2」があった場合のそのセルの行数 ですから、そこから計算しないといけませんよ。 単純にセル番地の行数番号を返しているだけです。 間のセル数を数えるなら、 さらにJ列に次の関数をセットします。 最初は行(J1)は参照が難しいのでセットしません。 関数を入れるのは、「J2」セルです。間違えないで下さいね。 =IF(I2="","",I2-(MAX($I$1:I1)+1)) これで行番号表示されたI列の隣のJ列にセル数を数えた数値が 表示されます。
補足
またまたご回答ありがとうございます!! -1の件は完璧にできたのですが、、 =IF(I2="","",I2-(MAX($I$1:I1)+1))がうまくいきません。。 おっしゃられるとおり、 J1セルではなく、J2セルにそのまま =IF(I2="","",I2-(MAX($I$1:I1)+1)) をコピーペしたのですが、 何も起こりません^ ^; WindowsXPでエクセル2003SPを使っていますが、 何かバージョンなどの関係があるのでしょうか?
- suekun
- ベストアンサー率25% (369/1454)
という事は、I列に対象となる数値があったら行番号を表示させれば あとは計算できますよね。 I1セルに =IF(OR(H1=1,H1=2),ROW(),"") と記入してデーター分下方にコピーします。 I列にH列の数値が、1か2だった場合に、その該当の行番号が 表示されます。 以降は、引き算の設定ですから間のセル数を数えるなら、 さらに1引くって事になりますね。
補足
ご回答ありがとうございます!! バッチリできました! >以降は、引き算の設定ですから間のセル数を数えるなら、 >さらに1引くって事になりますね。 さらに1引くためには、 数式になにを書き足せばよいでしょうか? 10000以上のデータがあるのですが、、 ご教授いただきました方法ですと、 少し問題が生じてしまいました。。 該当数字の1か2が、 セルH20にあったためセル間が20ということで表示されました。 ここまではバッチリなのですが、、 次のセル間のセルカウント数が、 前回のセル間の値に加算されていってしまうのです。。 例)セルH20に該当数字があり、間隔数20と表示。 セルH30に該当数字があり、間隔数30と表示。 このように加算されてしまい、 セルH20とセルH30の間隔が10ではなく、 30と表示されてしまいます。。 これを解決する方法はありますでしょうか?? 何度もお手数をおけして恐縮ですm(_ _)m
- suekun
- ベストアンサー率25% (369/1454)
>あるセルからあるセルまでの間隔の数値を これはなんでしょう? セルの升目の数を数えるのですか? 1行目に1が入力されていて、5行目に2が入力されていたら 間隔はいくつになるのでしょう? >1と2以外のセル間を数字で求めると、 >0→3→0となります。 この場合の1と2というのは、セルH1とセルH5の事ですか? 0→3→0がわかりません。^^; 読解力がなくてすいません。
補足
早速のご回答ありがとうございます^ ^ いやぁ~ 説明が稚拙で大変申し訳ありません。。 いつもおまえは説明がよくわからんといわれます。 >1行目に1が入力されていて、5行目に2が入力されていたら >間隔はいくつになるのでしょう? この間隔は、3になります。 1行目と5行目の間のセルをカウントします。 その間のセルは、2行目、3行目、4行目となり、 3となります。 >この場合の1と2というのは、セルH1とセルH5の事ですか? >0→3→0がわかりません。^^; わかりにくくてすみません。。 この場合の1と2というのは、 セルH1、セルH5、セルH6のことになります。 0→3→0は、 セルH1は2(該当数字)です。 初めから該当数字が出たため、 セル間の間隔がないことになります。 ですので、0となります。 そして次の該当数字の1か2までの間隔は? ということになりますと、 次の該当数字は、セルH5の1となります。 その間隔はセルH2とセルH3とセルH4の3つですので、 3になります。 さらに次の該当数字の1か2までの間隔は? ということになりますと、 次の該当数字は、セルH6の1となります。 セルH5で該当数字1が出ていますので、 セルH5とセルH6の間にセルがありませんので、 0となります。 まだまだわかりにくい点があると存じます。。 その際は、何なりとお申し付け下さい! よろしくお願い致します。
- 1
- 2
お礼
ご回答ありがとうございます^ ^ suekunさんとChiquilinさんのおかけで、 ついに完成させることができました! 数日にわたり、 丁寧にご指導していただき、 言葉もないくらい感謝しております!! 良い夏をお過ごしされるとを、 願っております^ ^ 今回は本当にありがとうございましたm(_ _)m