アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excel2010
あるところで次のような式をみました
=COUNTIF($B$2:$B$22,"*?")
"*?"は、どういう意味なのでしょうか

A 回答 (5件)

#1,3です。



#1の説明に誤りがありました。
誤)
> "?"
> は、「長さ0または1の文字列」
正)
"?"
は、「任意の1文字」
以上、訂正をお願いします。
失礼しました。
    • good
    • 0

こんばんは!


横からお邪魔します。

空白以外のセル数を取得する関数
>=COUNTIF($B$2:$B$22,"*?")
の使い方は当方は以前から
>=COUNTIF($B$2:$B$22,"?*")
のように「?」とアスタリクスを逆にして使っています。
「長さが1文字以上の文字列」という解釈です。
(実際はどちらでも大丈夫のようですが)

生データであればCOUNTA関数で対応できるのですが
数式によって「空白に見えるセル」が混在している場合、COUNTA関数では対応できないので
このような使い方はしたことがあります。

ただし、大前提として数式によって返ってくるのは「文字列」というコトです。
結果が「数値」の場合は反応しないと思います。(「0」となるはずです)
数値の場合はCOUNT関数で対応できますが・・・

※ 実は先日同じような質問がCOUNTIFS関数でありましたが
数式によって表示されるデータが「文字列」なのか、「数値」なのかが判らなかったので
敢えて他の方法をアドバイスしたことがありました。

まずはこの程度で・・・m(_ _)m
    • good
    • 1

#1です。



ご質問の数式は10年近く前から、何度か書籍・Webサイト・電子掲示板でも
紹介されていたものだったと記憶しています。
この数式を正解とするクイズに参加したこともありました。
もしかしたら
=COUNTIF($B$2:$B$22,"?*")
と、順番が逆になっていたりする場合もあったのかも知れませんけれど、、、。

現在の私の環境でも、
 #1で提示したサンプルで
 列挙した4つの数式がすべて異なる値を返す
ことが簡単に確認できます(数式戻り値、上から{4;5;2;7})。
もしかして、環境によっては正しく機能しない場合がある?
というお話をなさっているのでしょうかね?
もし結果が異なるということでしたら、
情報として原因が知りたいです。
Excel関数も用いるワイルドカードと正規表現のメタキャラクタとは
確かに似てるから混同してしまう人も居るのかも知れないですね。

以上、#2さんのコメントを受けての追加補足でした。
    • good
    • 1

こんにちは。



>=COUNTIF($B$2:$B$22,"*?")
>"*?"は、どういう意味なのでしょうか
「"*?"」
誤動作はしませんが、何かの間違いだと思います。

=COUNTIF($B$2:$B$22,"*")
ということと、違いはありません。

*  (任意の1文字以上の文字列)
?  (任意の1文字)

Excelの組み込み関数の中では、二つを直接組み合わせても意味がありません。

これは、別のストリーム系のプログラムで使う「正規表現」の最短マッチ法に使う書き方に
似ています。しかし、正規表現の書き方は少し違いますし、本来、Excelとは仕様も違います。
(ストリーム系の代表としては、Unicode系の"grep"があります)

おそらく、文字列を探す"*"や"?" を正規表現のそれを混同したのではないでしょうか?

「?」は、Excel上では、「長さ0の文字列」は検知できず、任意の1文字を探します。
(※ 「長さ0の文字列」というのは、少しおかしな表現ですが、れっきとしたブログラミング用語
 です。"" [二つのクォーテーション文字で囲まれた中に何もないもの]のことですが、
 Excel上では、="" と表します。Excel上にはありませんが、「値0の文字列」などという
 ものもあります。)

余談ですが、ストリーム系のプログラムでは、正規表現のメタキャラクタと言いますが、
 「?」は、直前に置かれている文字の1回以上の文字列を指します。
 「*」は、直前に置かれている文字の0回以上の文字列を指します。
ということになっていますが、Excel上では、標準的には使えません。

たぶん、どこかに、Excelの関数のワイルドカードの説明や使い方は出ているとは思いますが、今の時点で期待通りの詳しい説明があるサイトが見つかりませんでした。

ただし、Excelの関数のワイルドカードにも、裏ワザがいくつかあると思います。
例えば、「長さ0の文字列」を探す方法は、最近、質問に出たばかりです。
    • good
    • 0

こんにちは。



> "*?"は、どういう意味なのでしょうか

「少なくとも一文字以上の長さのある文字列値」があるセルをカウントします。

=COUNTIF($B$2:$B$22,"*?")
=COUNTIF($B$2:$B$22,"*")
=COUNTIF($B$2:$B$22,"?")
=COUNTA($B$2:$B$22)

上記4種類の数式で、
0
10
a
abc
=""
="a"
="abc"
などのサンプルを使って確認してみて下さい。

よく見かける数式として、=IF(条件,計算値,"")のようなものがありますが、
条件によっては「長さ0の文字列」をセルの値に返します。これを
=""
で表していますが、
COUNTA関数と、ご提示の数式ととで、
結果が違う点に着目して頂ければ、
ご提示の数式の意味(存在意義)は自ずと見えてくると思います。

"*"
は、「長さ0以上の文字列」
"?"
は、「長さ0または1の文字列」
を指し示すワイルドカードです。
    • good
    • 0
この回答へのお礼

すばやい回答ありがとうございます。
さっそく試してみます。

お礼日時:2015/02/15 07:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!