よねさんのWordとExcelの小部屋 なんでも掲示板

HOME HELP 新規作成 新着記事 ツリー表示 トピック表示 検索 過去ログ

ツリー一括表示

Nomal countifで列方向に数える際の参照列をセ.. /アンバサ (21/01/09(Sat) 07:54) #13496
Nomal Re[1]: countifで列方向に数える際の参照.. /よねさん (21/01/09(Sat) 10:21) #13497
  └Nomal Re[2]: countifで列方向に数える際の参照.. /よねさん (21/01/09(Sat) 11:37) #13498
    └Nomal Re[3]: countifで列方向に数える際の参照.. /アンバサ (21/01/09(Sat) 15:41) #13499


親記事 / ▼[ 13497 ]
■13496 / 親階層)  countifで列方向に数える際の参照列をセルの値で可変
□投稿者/ アンバサ -(2021/01/09(Sat) 07:54:08)
    初めまして。
    よく参考に勉強させていただいております。

    さて、もしご存知であれば
    教えていただきたいことがあります。

    A列内のランダムな行に同じ文字列がある時、
    その同じ文字列がある行に対して連番を振る方法に、
    別の作業列を用い、
    =countif($a$2:a2,検索文字)
    として、下にフィルダウンさせるものがあると思います。

    この時、対象となる範囲の列を、
    セルの値をキーワードとして切り替えるということは可能でしょうか。

    具体的には、
    例えば、A1に1日、B1に2日(実際には60列くらい)となっており、
    2行目以下に検索対象となる文字列を含むデータがあるとします。
    この時、上記のcountifの式は、
    1日のデータ列(A列)を参照範囲としていますが、
    作業用のセルC1に、1日or2日を入力することにより、
    参照範囲を、A列、B列と切り替えることは可能でしょうか。

    indirect関数を使えそうかなと思って色々調べてみたのですが、
    今のところ意図した結果は得られておりません。

    ご教示いただければ幸いです。








[ □ Tree ] 返信/引用返信 削除キー/

▲[ 13496 ] / ▼[ 13498 ]
■13497 / 1階層)  Re[1]: countifで列方向に数える際の参照列をセルの値で可変
□投稿者/ よねさん -(2021/01/09(Sat) 10:21:20)
    もっとスマートな方法があるかもしれませんが、思いついた方法を数式に変換しましたので
    以下のような長いものになっています。
    
    INDEX関数で列記号を取り出しています。
    これに行番号をつないで、INDIRCT関数で参照できるセル番地に変換しています。
    COUNTIF関数で参照するセル範囲はOFFSET関数で指定しています。
    
    こんな感じのものになりましたがいかがでしょうか?
    なお、C1セルに列タイトルを入力してあり、D2セルにはCOUNTIF関数で検索する文字列が入っています。
    60列もあるのなら、この2つのセル位置にはデータがあるはずなので適切な位置に動かす必要があります。
    数式を修正する必要があります。
    
    =IF(OFFSET(INDIRECT(
    INDEX(Sheet3!$B$2:$B$70,MATCH(MATCH($C$1,$A$1:$B$1,0),Sheet3!$A$2:$A$70))
    &"1"),ROW(A1),)<>$D$2,"",
    COUNTIF((OFFSET(INDIRECT(
    INDEX(Sheet3!$B$2:$B$70,MATCH(MATCH($C$1,$A$1:$B$1,0),Sheet3!$A$2:$A$70))
    &"$2"),0,0,ROW(A1))),
    $D$2))
    
    Sheet3に列番号のABCを変換するために以下のような参照表を作成しています。
    60列となると、AA列とかが出てくるので尾のような参照表が必要と考えました。
    列番号	
    1	A
    2	B
    3	C
    4	D
    5	E
    6	F
    7	G
    8	H
    9	I
    10	J
    11	K
    12	L
    13	M
    14	N
    15	O
    16	P
    17	Q
    18	R
    19	S
    20	T
    21	U
    22	V
    23	W
    24	X
    25	Y
    26	Z
    27	AA
    28	AB
    29	AC
    30	AD
    31	AE
    32	AF
    33	AG
    34	AH
    35	AI
    36	AJ
    37	AK
    38	AL
    39	AM
    40	AN
    41	AO
    42	AP
    43	AQ
    44	AR
    45	AS
    46	AT
    47	AU
    48	AV
    49	AW
    50	AX
    51	AY
    52	AZ
    53	BA
    54	BB
    55	BC
    56	BD
    57	BE
    58	BF
    59	BG
    60	BH
    61	BI
    62	BJ
    63	BK
    64	BL
    65	BM
    66	BN
    67	BO
    68	BP
    69	BQ
    

[ 親 13496 / □ Tree ] 返信/引用返信 削除キー/

▲[ 13497 ] / ▼[ 13499 ]
■13498 / 2階層)  Re[2]: countifで列方向に数える際の参照列をセルの値で可変
□投稿者/ よねさん -(2021/01/09(Sat) 11:37:18)
    2021/01/09(Sat) 11:56:38 編集(投稿者)
    ふと思ったのですが、OFFSET関数だけで行けるのでは・・・
    INDIRECT関数は不要かも・・・
    ちょっと、考えてみます。
    
    これでいけそうな気がします。
    =IF(OFFSET($A$2,ROW(A1)-1,MATCH($C$1,$A$1:$B$1,0)-1)<>$D$2,"",
    COUNTIF(OFFSET($A$2,0,MATCH($C$1,$A$1:$B$1,0)-1,ROW(A1)),
    $D$2))

[ 親 13496 / □ Tree ] 返信/引用返信 削除キー/

▲[ 13498 ] / 返信無し
■13499 / 3階層)  Re[3]: countifで列方向に数える際の参照列をセルの値で可変
□投稿者/ アンバサ -(2021/01/09(Sat) 15:41:50)
    サクッと意図した動作であったことは確認できていたのですが、
    式の内容を読み解いていたら時間かかってしまいました。

    match関数で対象列を変えているわけですね。
    そういえば私も途中まではmatchを弄っていた気がしたのですが、
    いつからindirectに囚われてしまったのか。。なるほどでした。

    そして、
    前半のoffsetが、セル範囲が1セルのみで、必要セルへの移動だけをしていて、
    当該セルの文字列と、検索文字列との一致を判定し、falseでブランク、
    Trueの場合は、後半のcountif+offsetにうつり、
    後半のoffsetはセル範囲を列方向に可変で拡大ということですね!?
    (感動を伝えたかったのですが表現が下手くそでスイマセン)

    久しぶりにExcelで感動いたしました!!
    Offset関数は難しくてなかなか上手いこと使いこなせておらず、
    こんなに鮮やかに回答いただけまして大変感謝いたします。

    Excel関数、深いですねぇ。
    本当にありがとうございました。


[ 親 13496 / □ Tree ] 返信/引用返信 削除キー/


Pass/

HOME HELP 新規作成 新着記事 ツリー表示 トピック表示 検索 過去ログ

- Child Tree -