[[20140918210354]] 『どうやったらこの表を作れるのか教えてください。』(JJ) ページの最後に飛ぶ

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

 

『どうやったらこの表を作れるのか教えてください。』(JJ)

お手数ですが、今作ろうとしてるエクセルの表を画像キャプチャしましたので
これを見てください。


まず、B列は任意の数字です。これは好きに入力できる数字です。
A列は適当に番号を振っただけですので、あまり気にしないでください。

私がしようとしていることですが、Y2が23なので、B列から23を
探そうとしてます。

で、B3とB18に23がありますよね。
B3に1番目にきているからY3に1
その後、B18に15番目にきているからY4に15と自動で出るようにしたいのです。

例えばB20にも23を入力した場合、B18に23があるのでY5は2という風に
自動で出る表を完成させたいのです。

どういう関数を使用すればいいのでしょうか。

すみませんが、教えてください。
よろしくお願いします。

< 使用 アプリ:Excel2000、使用 OS:WindowsVista >


要デバッグですが・・・

Y3=INDEX(A$1:A$100,SMALL(INDEX((B$1:B$100<>C$2)*10^16+ROW(B$1:B$100),),ROW(C1)))

(ryopo^2) 2014/09/18(木) 22:13


 無理やり
 Y3=IF(COUNTIF($B$3:$B$20,Y$2)<ROW(A1),"",SMALL(IF($B$3:$B$20=Y$2,ROW($B$3:$B$20)-2,""),ROW(A1))-IF(ROW()=3,0,SMALL(IF($B$3:$B$20=Y$2,ROW($B$3:$B$20)-2,""),ROW(A1)-1))

 と入力してCtrl+Shift+Enterで配列数式
 行と列方向にコピー

(稲葉) 2014/09/18(木) 22:36


ryopo^2さん、稲葉さん、迅速な回答ありがとうございます。

今、教えていただいた数式を当てはめてみましたところ、無事できました。
これこれこれこれえええええ! この表を作りたかったんです。
こんな凄い数式、自分じゃ思いつきませんでした。
ずっとifで何とかしようとばかり思っていまして・・・
こんな難しい数式でようやく出来上がるのですね・・・。

自分の未熟さを痛感しております。
ホントにこちらで質問してよかったです。

本当にありがとうございました。
(JJ) 2014/09/18(木) 23:00


すみません、再度質問なのですが、昨日教えていただいた稲葉さんの関数で
この表が完成したのですが、配列数式をコピペの段階で重くて固まってしまいます。
または、B列に数字を入力しているときにも。

で、自分なりに色々調べたのですが、配列数式を使うと処理が重くなるそうで、
計算方法を自動から手動にすると一時的にこの現象は解消されますが、F9で再計算を
すると再度、また固まってしまいます。

これはもう、どうすることもできないのでしょうか?
それとも私が使っているエクセルが古いからなのでしょうか?
最新のエクセルにすると重くなくなるのでしょうか?

何とか固まらずに快適にこの表を活用できるようにはならないでしょうか?

よろしくお願いします。
(JJ) 2014/09/19(金) 18:34


 >どういう関数を使用すればいいのでしょうか。  

 数式じゃないとダメなんですか? 
 なんか、マクロ向きの話しのような気がします。
  ・・と言っても、私自身はマクロを書く気はないですけど。

 >何とか固まらずに快適にこの表を活用できるようにはならないでしょうか? 

 実際のデータ量はどうなっているんですか?(データ範囲の行数と列数)

(半平太) 2014/09/19(金) 22:22


 マクロ向きな話な気がしますねぇ
 実際のデータが1,000行越えるようなら
 配列数式ではなくマクロで処理された方が快適だと思います
 たぶんoffsetなどで作っても揮発性関数で どのセル弄って
 も再計算されるのででストレスは残るかと

 実際のデータと詳細な表配置がわかればコード書いてみます

(稲葉) 2014/09/19(金) 23:47


 こんな感じでもいいかな

 Y3:=IF(COUNTIF($B:$B,Y$2)<ROW(A1),"",MATCH(Y$2,$B3:$B100,0))
 Y4:=IF(COUNTIF($B:$B,Y$2)<ROW(A2),"",MATCH(Y$2,INDEX($B$4:$B100,SUM(Y$3:Y3)):$B100,))
(By) 2014/09/20(土) 09:31

みなさま、レスありがとうございます。

私が使おうとしている実際のデータはこれです。
http://www.rupan.net/uploader/download/1411225747.xls
pass:jisakudata

横の行はc3からam3まで
縦の列はとりあえず1000くらいまでで設定したのですが、
できればもっと下まで使いたいと思ってました。

よろしくお願いします。
(JJ) 2014/09/21(日) 00:13


 こんな感じでいかがでしょうか?
    Sub jj()
        Dim tbl
        Dim c As Long, r As Long, rr As Long, 差 As Long
        tbl = Range("A2").CurrentRegion
        For c = 3 To UBound(tbl, 2)
            検索値 = tbl(1, c)
            rr = 2
            差 = 1
            For r = 2 To UBound(tbl)
                If tbl(r, 2) = "" Then Exit For
                If tbl(r, 2) = 検索値 Then
                    tbl(rr, c) = 差
                    rr = rr + 1
                    差 = 1
                Else
                    差 = 差 + 1
                End If
            Next r
        Next c
        Range("A2").CurrentRegion.Offset(1, 2).ClearContents
        Range("A2").CurrentRegion = tbl
    End Sub

(稲葉) 2014/09/21(日) 07:16


すみません、お礼が遅れました。

稲葉さん、本当にありがとうございます。

教えていただいたマクロのプログラムで快適に使えるようになりました。

本当に助かりました。ありがとうございます。

(JJ) 2014/09/24(水) 02:45


コメント返信:

[ 一覧(最新更新順) ]


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