[[20160816151708]] 『C列にB列に出た数字が何回目ぶりに出たか表示すax(佐々木) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『C列にB列に出た数字が何回目ぶりに出たか表示するには?』(佐々木)

こんにちは佐々木と申します。
サイコロをふって、出た数をB列に入力してます。
C列に何回目ぶりに、その数字が出たかを表示するにはどうすれば良いのか?
教えて下さい。
宜しくお願い致します

A列:回数1から1000
B列:サイコロの出た数
C列に何回目に出たか表示したいです。

B C 
1 

1 2
4 
2 3
1 3

上記の様な感じにしたいです。
宜しくお願い致します。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 C1に、=COUNTIF($B$1:$B1,B1)、下へフィルコピー

(とおりすがり) 2016/08/16(火) 16:24


とおりすがり様
コメントありがとうございます。

そして、説明が下手でごめんなさい。

もう一度説明させて下さい。

C列に何回目ぶりにB列の数字が出現したか表示したいです。

B C 
1 

3 
4 
1 4
1 1
2 6

上記の様に表示したいです。
宜しくお願い致します。
(佐々木) 2016/08/16(火) 16:44


 Sub test()
    Dim i As Long
    Dim j As Long

    For i = 1 To Cells(Rows.Count, "B").End(xlUp).Row
        For j = i - 1 To 1 Step -1
            If Cells(i, "B").Value = Cells(j, "B").Value Then
                Cells(i, "C").Value = i - j
                Exit For
            End If
        Next j
    Next i
 End Sub
(???) 2016/08/16(火) 17:09

???様
ありがとうございます。
無事に出来ました。

でも、可能なら関数で行いたいのですが…
関数では不可能でしょうか?

可能なら宜しくお願い致します。
(佐々木) 2016/08/16(火) 17:23


マクロでループさせるのは簡単ですが、数式で実現するのは難しいかと。私はパスします。
他の方が回答してくれるのをお待ちください。
(???) 2016/08/16(火) 17:33

???様
御丁寧にコメント返信ありがとうございます。

それでは、他の方を待ってますね。
(佐々木) 2016/08/16(火) 17:38


 カバ丸、参上!

 2回目の例ぢゃが、一番下が 6 になっておるのは、5 の間違いかのう?
 間違いだとして話を進める。

 データ開始が2行目からだとする。
 C2セルに値が入ることはあり得ないので、数式を入れるのは3行目から。

 C3: =IF(COUNTIF($B$2:B2,B3),ROW()-LOOKUP(1,0/($B$2:B2=B3),ROW($B$2:B2)),"")

 下フィルコピー

 参考にしてくれい。では!ε=ε=ε= ヘ(*¨)ノ
 
(カバ丸) 2016/08/16(火) 18:29

 カバ丸、ふたたび参上!

 少し式を改善してみた。

 C3: =IF(B3="","",IFERROR(ROW()-LOOKUP(1,0/($B$2:B2=B3),ROW($B$2:B2)),""))

 参考にしてくれい。では!ε=ε=ε= ヘ(*¨)ノ
 
(カバ丸) 2016/08/16(火) 18:45

カバ丸様ありがとうございます。

カバ丸様の教えてくれた、
関数で無事に出来ました\(^o^)/

そして、カバ丸様の言う通り
『一番下が 6 になっておるのは、5 の間違い』でした。

カバ丸様…
すみません…
もう少し良ければ教えて下さい。

B列の出た目が
『1』の時のみ表示する方法が有れば教えて下さい。
宜しくお願い致します。

(佐々木) 2016/08/16(火) 19:15


 単純に =IF(B3<>1,"",カバ丸さんの式から先頭の=を取り除いたもの) でいいのでは?

(β) 2016/08/16(火) 19:31


β様ありがとうございます。

β様のアドバイスとカバ丸様の関数をコラボしたら無事に出来ました。

カバ様、β様本当にありがとうございました♪
(佐々木) 2016/08/16(火) 19:50


# 質問者さんは、提示された関数を理解されたのでしょうか。
# 当然理解してますよ、と言うことでしたら失礼。

私には、とても難しく感じます。(一応、理解はできているつもりですが)
示されたVBAのコードのほうがよほど自然に感じます。

関数には関数の良さがあるのでしょうけど、ややBKに近いものを感じます。
(BK は二つのWordの頭文字です。あえて難読化しています)

「VBAよりも関数のほうが絶対簡単なはずだ」と
質問者さんが思い込んでおられるのなら、
その考え方をこの際再検討されたほうがよいかもしれないと思いました。
# 即時の結果反映のためであって、難易度の関係ではない、ということなら失礼。
# また、回答を寄せてくださった方を批判する意図でもありません。念のため。

(γ) 2016/08/17(水) 12:42


まあ、VBA/マクロ使えない・使いたくない場合は確かにあります。
今回のように、無理矢理(?)関数で解決するのは面白い時もあります。
LOOKUP(1,0/… のやり方は勉強になりました。
(x) 2016/08/17(水) 14:17

 カバ丸、みたび参上!

 拙者の回答が不自然とか無理矢理などと「批判」を浴びておるようぢゃのう。

 何を以って自然と称するのか分からぬが、では、効率という面を無視して、
 比較的理解しやすいという観点からの別案を挙げておく。

 C3: =IF(COUNTIF($B$2:B2,B3),ROW()-MAX(INDEX(($B$2:B2=B3)*ROW($B$2:B2),0)),"")

 >BK は二つのWordの頭文字です。あえて難読化しています

 何ゆえに、かくの如き奥歯に物の挟まった言い方をするのか理解できぬ。
 察するにBKとは「バカな回答」という意味かのう。(ノД`)

 では!ε=ε=ε=ヘ(*--)ノ 
 
(カバ丸) 2016/08/17(水) 14:41

カバ丸さま、まったく批判の意味は入っていないです。大変失礼いたしました m(__)m
(x) 2016/08/17(水) 14:53

誤解を招いたようです。
ご指摘のようなことを申し上げる意図は一切ありません。
正確に書きます。
"Bad Knowhow" の意味です。
その昔、その筋では知られた高林さんというかたがよく使っておられた言葉です。
http://0xcc.net/misc/bad-knowhow.html
http://gihyo.jp/dev/serial/01/bk
など。
 
深みにはまっていく自分も含めて、ある種の哀感を持って呼んだ言葉です。
その道の深みにはまると、そのこと自体がある種の快感、
場合によっては、連帯感のようなものを醸し出す、
そんな趣旨の醒めた自分をある種自虐的に形容した言葉であって、
批判の言葉では一切ありません。
 
こうしたことは、多分説明しても伝えることが難しいだろうと思いながらも、
分かる人には分かるだろうか、ということで使いました。
しかし、この手の話はこうした掲示板では無理ということを改めて感じました。
(γ) 2016/08/17(水) 15:09

 > "Bad Knowhow" の意味です。 
 初めからそう書いて頂かないと分からないです。
 (まぁ、書いて頂いたとしても、分からなかったですけど)

 私も「馬鹿」の頭文字かと思いました。
 ただ、それでは日本語の文章として変だなぁとも思いましたが、他に変換候補は浮かびません。

 >その昔、その筋では知られた高林さんというかたがよく使っておられた言葉です。 
 その筋とは、エクセルの数式に関する筋ですか?
 それなら具体例が知りたいです。

 少なくとも今回の例が、その具体例とも思えません。
 Knowhowとしては、洗練されています。

 ただ、その式を千個入れるとなると、意見が分かれるかも知れません。
 1万個だったら、10万個だったら・・、更にその感は強くなります。

 いずれにしても、それはBad Knowhowの問題ではなく、使い方の問題だと私は思います。

 >しかし、この手の話はこうした掲示板では無理ということを改めて感じました。
 まぁ、回答者にも色んなスタンスの人が居ますからねぇ。

 質問者の為ばかり ← この中間の何処か →回答者の自己満足の為ばかり

 しかも、回答は採用されてナンボのところもあるのに、
 回答案の採択権が、(失礼ながら)浅学な質問者の方にあるんですから、元々矛盾があります。

 そうなると、作業列を使う案などは肩身が狭くなる一方です。
 昔、えくせる青年さん や ていおうさん なんか、それでも愚直に自説を展開されていて
 感心したことがあります。私には、なかなか真似が出来ない。

(半平太) 2016/08/17(水) 20:10


高林さんの話は、VBAマクロに限定した話ではなく、もっと一般的な文脈の話です。
ですから具体例はありません。その言葉の意味などは、紹介したページを参照してください。
 
関数に関する見方は幅がありますので、収束しませんし、その必要もないと思います。
申し訳ないですが、この話はこれまでとさせてください。
 
# 個人的には、私がそういう言葉を使って人を罵倒するような発言をする人と見られたことは、
# 不徳の致すところかもしれませんが、少なからずショックではありました。

(γ) 2016/08/17(水) 22:44


  私はマクロの話はしておりません。数式の話です。

  私は「洗練されている」と評価したものです。
  γさんは「ややBKに近いもの」と感じたのですよね?

  いくらなんでも開きがあり過ぎです。

  その数式についてだけでいいです。
  一般的な文脈で「本来は知りたくもない」部分は、その数式の何処なのかだけ聞かせてください。

 私は知っていると、すごく心強いと思うので。

(半平太) 2016/08/18(木) 00:03


 横入りですが,,,
 私も今回の質問内容と同じ様な事を行う必要が有りまして
 佐々木さんの例題にカバ丸さんの式を当てはめるとドンピシャな数値が出るので
 応用して使用したいのですが、
 式の内容の理解が出来ません
 理解出来ないのは
 LOOKUP関数の引き数2番目(検査範囲)の所で、
 範囲なのに0を割る??
 その割るものは $B$2:B3=B4 ??これはセル範囲? イコール??
 の部分です
 カバ丸さん、これらの解説をお願い出来ませんでしょうか

(上海人) 2016/08/18(木) 18:44


 カバ丸、よたび参上!

 解説するにヤブサカではないが、その応用しようとしている事案を説明してもらった方が
 二度手間になる怖れがないので助かるのぢゃが。

 ほとんど同じ内容なのであればそう言ってくれればよい。
 もし、そちらの事案を説明してもらえるのであれば、具体的なセル番地、データ範囲も明らかにしてもらいたい。

 事前に聞いておく。

 1)=LOOKUP(10^16,A1:A10)
 2)=LOOKUP(10^16,A1:A10,B1:B10)

 上記の二式がそれぞれ何をしているか、答えることはできますかな?

 もう一点。

 >C3: =IF(COUNTIF($B$2:B2,B3),ROW()-MAX(INDEX(($B$2:B2=B3)*ROW($B$2:B2),0)),"")

 この式を応用するわけにはいかぬのだろうか?

 返事を待っておる。では!ε=ε=ε= ヘ(*¨)ノ
 
(カバ丸) 2016/08/19(金) 17:08

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.