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

全角半角、ひらがなカタカナ、大文字小文字
関係無しで同じもの探したいのですが

あいうえお、アイウエオ、アイウエオ
abc,ABC,abc,ABC

これらを同じ文字として認識したいので
=JIS(UPPER(PHONETIC(A1)))
こうすると全ての文字が全角、大文字、カタカナになるでよいのですが
=JIS(UPPER(PHONETIC(A1&A2)))
=JIS(UPPER(PHONETIC(CONCATENATE(A1,A2))))
とすると数式に問題がありますと、上手く表示してくれません

どうしてなんでしょう?

なんとかならないかなぁ~

A 回答 (3件)

PHONETICの中はセル参照しか使えません。


=JIS(UPPER(PHONETIC(A1)&PHONETIC(A2)))

もしくは

=JIS(UPPER(PHONETIC(A1:A2)))

でしょ。
    • good
    • 0
この回答へのお礼

そうだったのか知らなかった…

お礼日時:2016/11/07 14:41

まず、最初に、CONCATENATE という、長い関数名は、Microsoft が、これは使ってくれるなというメッセージを込めて付けた名前だと、私は信じています。


それでなければ、こんな名前を命名するはずがありません。
これは、Lotus123との互換性を持たせるために残した関数の名残りです。
Microsoft 系では、文字と文字のつなぎ方は、「&(アンパサンド)」を使います。

ふりがなの仕組みは、セルの情報の中に、ふりがなというデータがあって、それをPHONETIC関数が取り出します。

CONCATENATE(A1,A2)としたら、文字列になって、一緒に付け加えられた、ふりがなデータなくなってしまいます。ここには、情報はありません。
それは、皆様がご説明になったとおりです。

>あいうえお、アイウエオ、アイウエオ
>これらを同じ文字として認識したい

これを、VBAでは、TextCompare(テキストコンペア)と言いますが、VBAには、StrComp 関数はあっても、ワークシート関数にはありません。それで、VBAから借りてくるという方法はいかがでしょうか。

もちろん、文字を純粋に比較しているので、セルの中身を探しているわけではありません。

[ALT+ F11] で画面を開いたら、挿入-標準モジュールで以下のコードを貼り付けます。それで、同じく、[ALT+ F11] で閉じたら、この数式を早速試してみます。(念のために、エクセルの画面の上のファイル名が正しいか確認してください)
'-------------------
Function fStrComp(arg1 As Variant, arg2 As Variant) As Boolean
 If StrComp(Trim(arg1), Trim(arg2), vbTextCompare) = 0 Then
   fStrComp = True
 Else
   fStrComp = False
 End If
End Function
'---------------------
A1:あいうえお
B1:アイウエオ

C1:
=fStrComp(A1,B1)

これでTRUE が出るかためしてみてください。
----------------------
なお、文字列を探すという場合も、TextCompre という方法を利用します。

Function fInStr(arg1 As Variant, arg2 As Variant, Optional flg = False)
'1番目が被検索値、2番目引数が検索値
Dim i As Long
 i = InStr(1, arg1, Trim(arg2), vbTextCompare)
 If i > 0 Then
   If flg Then
    fInStr = i
   Else
    fInStr = True
   End If
 Else
   fInStr = False
 End If
End Function
'---------------------------
使い方は、

A1: ABC
B1: abc
=fInStr(A1,B1) B1の文字をA1で探すということです。
TRUE が同じように出ます。

=fInStr(A1,B1,TRUE)

A1:挨拶は幼稚園、あいうえおは小学校、abcは中学校
ですと、18と数字が返るのは、18番目に該当する文字があるということを示します。

=MID(A1,18,100)  '最後の100は、ダミーの数字です。

abcは中学校

と出てきます。

これらは、本格的なマクロではありませんが、ワークシートに不足しているものをVBAで補うという方法のひとつです。
    • good
    • 0
この回答へのお礼

そこまでする気は…

お礼日時:2016/11/07 14:43

PHONETIC 関数は対象文字列を受け取りたいのではなく、セル参照を受け取りたいからなのでは?


推測ですが、セル範囲を受け取って、そこに含まれるセルに関数内部からアクセスしてよみがな情報を取り出しているのだと思います。
https://support.office.com/ja-jp/article/PHONETI …

だから PHONETIC(A1 & A2) ではなく、PHONETIC(A1:A2) という書き方になっているのだと思います。

PHONETIC(A1 & A2) → A1 の値と A2 の値を連結した文字列
PHONETIC(A1:A2) → A1 から A2 の範囲
    • good
    • 0

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