[[20230321103335]] 『特定の文字列が入るセルを参照範囲としたい(参照煤x(yamatda2001) ページの最後に飛ぶ

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

 

『特定の文字列が入るセルを参照範囲としたい(参照範囲が変化)』(yamatda2001)

いつも大変お世話になっております。

製品の検査指示シートというものがありまして
イメージでは

      A      B
1          検査
2  製品    製品検査0:120h
3  部品a    *
4  部品b
5  部品c    *
6  部品d
7  部品e
8  部品f    *
9  部品g
10   計    =countif(B2:B9,"*")

で計の右セルに検査数を求めています。
この表自体は行数が不定(部品の数によって行数が変わる)のため
countifの参照範囲を毎回手動で変更しています。
これを普遍的な数式で検査数を求めたいと考えています。

最初から部品数がうまるようなフォーマットでシートを作成すれば良いのでしょうが他部署からの共有ファイルでフォーマット変更しないルールとなっています。
B1のセルには必ず"検査"という文字列がはいるのでこれをキーにして参照範囲を変えたいのですが良い数式ないでしょうか?

分かりにくい質問で申し訳ありませんがよろしくお願いいたします。

< 使用 Excel:Excel2013、使用 OS:Windows10 >


 列全体指定じゃダメなん?
 =countif(B:B,"*")-2
 検索値が*になっているのは意味があるのですか?
 ワイルドカードだから、何入れてもカウントされてしまうから
 カウントしたい文字を*以外にするだけで良さそうだけど
(稲葉) 2023/03/21(火) 11:07:19

 検索値を「*」にする場合は、その前にチルダ「~」をつける

 =COUNTIF(B:B,"~*")
               ~~
 提示のように、B列の最下行に合計を入れたいのなら
 =COUNTIF(B2:INDEX(B:B,ROW()-1),"~*")

 参考まで
(笑) 2023/03/21(火) 11:47:06

稲葉様ご回答ありがとうございます。

申し訳ございません説明不足でありました。

      A      B
1          検査
2  製品名1 製品検査0:120h
3  部品a    *
4  部品b
5  部品c    *
6  部品d
7  部品e
8  部品f    *
9  部品g
10   計    =countif(B2:B9,"*")→この場合4
11         検査
12 製品名2 製品検査0:144h
13 部品a    
14 部品b
15 部品c    *
16 部品d
17   計    =countif(B11:B17,"*")→この場合2

のように複数の製品が一つのシートに連続して入力されています。
部品数は不定です。

"*"にしたのは検査数に製品検査と部品検査の合計数としたいからです。
※他にいい方法があれば"*"にこだわってません。

あと出しの質問になり大変申し訳ございません。
よろしくお願いいたします。

(yamatda2001) 2023/03/21(火) 12:01:18


(笑)さまご回答ありがとうございます。

質問の追記入力しているうちにコメント頂いてました。

せっかく頂いた数式でしたのに。

重ね重ね申し訳ございません。

(yamatda2001) 2023/03/21(火) 12:09:23


 ちょっと確認だけ

 >=countif(B2:B9,"*")→この場合4
「4」ということは「製品検査0:120h」もカウントするんですか?
 つまり「検査」以外の文字列をすべて数えるってこと?

 それと、作業列を使ってもいいですか?

 とりあえず以上です
(笑) 2023/03/21(火) 12:53:07

(笑)さん。ありがとうございます。
1.そうです「製品検査0:〇〇h」と部品検査を意味する"*"をカウントします。
  ↓
  「検査」以外の文字列を数えます。
※(これ、なんか解決に向けてのいいヒントになりそうですね。少し自分もイメージわきかけてます。)

2.作業列使って頂いてかまいません。

よろしくお願いいたします。

(yamatda2001) 2023/03/21(火) 14:41:48


 作業列を使ってもいいのなら
 例)C列

 合計行には必ず A列に「計」と入力されているものとして

 C2 =IF(OR(A2="計",B2="検査"),"",IF(B2<>"",1,""))
 下コピー

 B列の合計のセルに ↓ をコピーして貼り付け
 =SUM($C$1:INDEX(C:C,ROW()-1))-SUM($B$1:INDEX(B:B,ROW()-1))

 ■ついでに作業列を使わない場合

 合計のセルに ↓ の式を貼り付け
 =COUNTIFS($B$1:INDEX(B:B,ROW()-1),"?*",$B$1:INDEX(B:B,ROW()-1),"<>検査")-SUM($B$1:INDEX(B:B,ROW()-1))

 参考まで
(笑) 2023/03/21(火) 16:24:12

(笑)様ありがとうございます!
複数条件としてcountifs使えばいいのですね!
おかげさまで目的のものとなりました。

ちなみに"?*"
はどういう意味でしょうか?
「エクセル "?"」や「エクセル "?*"」でネット検索しても出てこなかったもので。
お手すきの際ににでご教示頂ければ幸いです。

(yamatda2001) 2023/03/21(火) 17:02:53


 >ちなみに"?*"
 excel ワイルドカードで検索してみて。
(とこ) 2023/03/21(火) 17:31:28

とこ様ご回答ありがとうございます。

検索してみました。
https://office-hack.com/excel/wildcard/
に記載ありました。

?が一文字のワイルドカードなんですね。

ただこの数式の場合なぜ"?*"なんでしょうか?

の前に一文字はないですよね。

重ね重ねの質問で申し訳ありませんがお手すきの際にでもご教示いただければ幸いです。
(yamatda2001) 2023/03/21(火) 18:55:59


なぜか大きな文字になってしまいました。
協調する意図はありません。
(yamatda2001) 2023/03/21(火) 18:57:04

 この場合、? も * もどちらもワイルドカードです。

 "*" → 0文字以上の文字列
 "?*" → 1文字以上の文字列

 0文字の文字列なんてあるのかと思われるかもしれませんが、あるんです。
 =IF(A1=1,"○","") のように、数式で空白にしている場合です。
 A1が 1 以外なら、上の式を入れたセルには何も表示されませんが、値としては 0文字の文字列になります。

  下のような表で、数値は除外して、文字列が表示されたセルの個数を求めると

	A
1	あ
2	
3	かき
4	10
5	さしす

 A2セルが数式も何も入っていない空白なら
 =COUNTIF(A1:A5,"*") で「3」ですが
 数式で空白にしているのなら、そのセルもカウントするので「4」になります。

 =COUNTIF(A1:A5,"?*") だったら、その場合でも「3」です。

 質問の表で、B列を数式で空白にしていなければ "*" だけでもいいんですが
 ? をつけるだけで、どちらにも対応できるので、そのようにしました。

 以上
(笑) 2023/03/21(火) 20:14:43

笑さま、ご回答ありがとうございます。
数式で空白になった場合への対応なんですね。

エラーの処理とかで
とりあえず""にしちゃえ
が多いのでこのワイルドカードの組み合わせ使えますね!

この度はありがとうございました。

また質問が後出しじゃんけんになってご迷惑をおかけし申し訳ありませんでした。

(yamatda2001) 2023/03/21(火) 20:24:53


コメント返信:

[ 一覧(最新更新順) ]


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