こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルについての質問です。

エクセルについての質問です。
私が使っているのは「Microsoft Office Excel 2007」です。

セルA1~A10まで数字を入力するとします。
簡単に書きますと、A1=8,A2=3,A3=2,A4=5,A5=9,A6=2‥‥。このようにランダムに数字が並んでいるとします。

そこで、私は今出ている数字と同じ数字間の個数を数えたいのですが、一つ一つ数えていくと面倒なので何か関数を入力して出来ないものかと思っています。

例えば、上のセルA1~A6を見たときに、セルA1から入力していったとして、最後に入力したのがここでは「セルA6」だとします。
セルA6=2ですよね?
その「2」が最後に出たのが、セルA3になります。
そうすると、最新のセル(ここではセルA6の2)とその最新のセルに入力してある数字と同じ数字(ここではセルA3の2)の間のセル個数(ここでは、A6からA3の間にあるセルの数は2)を調べれる式を教えていただきたいです。
ちなみに、最新のセル(例えば、セルA30が最新だとします)からセルA1までを見て、同じ数字がない時は空欄でも×でもなんでもいいです。

説明がかなり分かりにくいとは思いますが、どうか皆様回答をお願い致します。

投稿日時 - 2010-08-04 20:36:08

QNo.6087114

すぐに回答ほしいです

質問者が選んだベストアンサー

こんばんは!
外していたらごめんなさい。

↓の画像で説明します。(データは2行目からという表にしています)
かなり強引な方法になりますが・・・
作業用の列を1列設けています。

作業列C2に
=IF(A2="","",ROW())

結果のB2セルに
=IF(COUNTIF($A$2:A2,A2)<2,"",INDEX($C$2:C2,SMALL(IF($A$2:A2=A2,ROW($A$1:A1)),COUNTIF($A$2:A2,A2)))-INDEX($C$2:C2,SMALL(IF($A$2:A2=A2,ROW($A$1:A1)),COUNTIF($A$2:A2,A2)-1))-1)

これは配列数式になってしまいますので、この画面からB2セルにコピー&ペーストしただけではエラーになると思います。
B2セルに貼り付け後、F2キーを押す、またはB2セルをダブルクリック、または数式バー内で一度クリックします。
編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定します。
数式の前後に{ }マークが入り配列数式になります。

最後にB2・C2セルを範囲指定し、C2セルのフィルハンドルで下へコピーすると
画像のような感じになります。

以上、参考になればよいのですが
他に良い方法があれば読み流してくださいね。m(__)m

投稿日時 - 2010-08-04 21:51:09

お礼

回答ありがとうございます。
とても参考になります。
しかし、エクセルは難しいですね。

投稿日時 - 2010-08-05 11:37:37

ANo.4

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

A列のセルの値と同じ値がそのセルより上にあった場合に、最後に出てくる数字との行の差(A6とA3なら「3」)を求めたいなら以下のような数式をB2セルに入力し下方向にオートフィルします。

=IF(COUNTIF($A$1:A1,A2)=0,"",ROW(A2)-MAX(INDEX(($A$1:A1=A2)*ROW($A$1:A1),)))

ちなみに、A6とA3の場合に「2」を返したいなら上記のIF関数の第3引数を「-1」してください。

投稿日時 - 2010-08-04 21:55:55

お礼

参考にさせていただきます。
回答ありがとうございます。

投稿日時 - 2010-08-05 11:41:12

ANo.3

エクセルで指定した数値や文字列のセルを発見できるのは、MATCH関数(VLOOKUP関数)ぐらいしかなく、それは
・同一列内
・指定行(普通は第1行)から最初のものだけ
という制約(そのほかの良い関数が無い)があります。
本質問例では注記が無いが、2はA列で複数出現すると思われる。その場合最も行数的に近いセルを問題にせよ、ということだろうが、A6を起点にリバースMatch的な関数は無い。(参考 言語によっては文字列内ですが、InstrRev関数などがある)
だから難物。
ーーー
ユーザー関数を作ると出来るかもしれない、がVBAの経験あるかな。
ーー
例データ
A列入力  B列=関数の結果
1F
2F
3F
22
21
11F
16
11
24
37
4F
5F
24
34
17
ーーー
B1に式 =IF(A1="","",revf(A1))
を入れて、下方向に式を複写。
ユーザー関数定義は
標準モジュールに
Function revf(a)
For i = a.Row() - 1 To 1 Step -1
If Cells(i, "A") = a.Value Then
revf = a.Row - i
Exit Function
End If
Next
revf = "F"
End Function
Fは初出の印(空白でも何でも文字列など指定して良い)。 
revf = a.Row - i
はrevf = a.Row - i-1にするかは好みで決めてください。
ーーー
この質問は過去にもあったような気がするが。

投稿日時 - 2010-08-04 21:37:19

お礼

回答ありがとうございます。
エクセルはよく使うのですが、未だに関数などを使った作業が苦手でして…。
参考書も買い勉強しているのですが…。
しかし、毎回とても参考になります。本当にありがとうございました。

投稿日時 - 2010-08-05 11:40:24

ANo.2

B2に
=COLUMN()-MATCH(B1,$A$1:A1,0)-1
と入力して右に必要なだけフィルしたらいかがでしょう
それぞれの数値の下に一致したセルがあるときに間のセルの数を表示します。

投稿日時 - 2010-08-04 21:02:50

お礼

なるほどですね!
参考になります。
回答ありがとうございました。

投稿日時 - 2010-08-05 11:28:18

ANo.1

列Aにオートフィルタを設定して、対象とする数値を指定して
表示された行の列Bに何か目印になる値を入力していく、では駄目ですか?

投稿日時 - 2010-08-04 20:42:41

お礼

オートフィルタですね。
試してみたいと思います。
回答ありがとうございました。

投稿日時 - 2010-08-05 11:19:15

あなたにオススメの質問