見出し画像

Excel関数 LEFT() の不審な挙動

同僚から問い合わせ。$${ \texttt{LEFT( )} }$$ 関数が謎挙動をしているとのこと。

問題のシートは,特定セルの内容を「$${\texttt{(}}$$」「$${\texttt{)}}$$」「$${\texttt{\textbackslash r}}$$(改行)」などで分割し,
「氏名」欄に名前を,他の欄も同様にそれぞれ関数で拾ってくる仕様。

その際,氏名はそのセル(仮にA1とする)の最初に書かれているので
``$${\texttt{LEFT(A1,FIND("(",A1)-1)}}$$'' みたいにしてもってくるらしいのだが,
一部の異体字の名前のときに上手く行かないという。

$${\texttt{U+9AD9}}$$「たか(はしごだか)」みたいなものは大丈夫だが,
$${\texttt{U+20BB7}}$$「𠮷よし(つちよし)」などの16進4桁に収まらない文字や,
$${\texttt{U+2698A; U+E0102}}$$「榊󠄂さかき(木+示+申)」などの
異体字セレクタが使用されている文字などでトラブっている。
※この記事に上手く埋め込めているかは不明。

で,例えば「吉田」さんとか「𠮷田」さんとかが混在していたとして

$$
\begin{array}{l|cccc}\hline
\text{セル\texttt{A1}の内容} & \texttt{LEN{\scriptstyle(A1)}} & \texttt{LENB{\scriptstyle (A1)}} & \texttt{FIND{\scriptstyle("(",A1)}} & \texttt{FINDB{\scriptstyle("(",A1)}} \\\hline
\text{吉田(常用標準)} & 8 & 14 & 3 & 5 \\
\text{𠮷田(特殊標準)} & 9 & 14 & 4 & 5 \\
\text{吉󠄀田(常用異体)} & 10 & 16 & 5 & 7 \\
\text{𠮷󠄀田(特殊異体)} & 11 & 16 & 6 & 7 \\\hline
\end{array}
$$

まあここまではよいとして,
これを ``$${\texttt{LEFT( )}}$$'' で拾おうとすると

$$
\begin{array}{l|cccc}\hline
\text{セル\texttt{A1}の内容} & \texttt{ * } & \texttt{LEFT(A1,*)} & \texttt{MID(A1,1,*)} \\\hline
\text{吉田(常用標準)} & 3 & \text{吉田} & \text{吉田} \\
\text{𠮷田(特殊標準)} & 4 & \text{𠮷田(} & \text{𠮷田} \\
\text{吉󠄀田(常用異体)} & 5 & \text{吉󠄀田(} & \text{吉󠄀田} \\
\text{𠮷󠄀田(特殊異体)} & 6 & \text{𠮷󠄀田(特} & \text{𠮷󠄀田} \\\hline
\end{array}\\\hskip13em\texttt{* = FIND("(",A1)}
$$

$${ \texttt{LEFT( )} }$$ の挙動がよく分からない(笑)

という状態になるようです。
内部的な処理方法が,根本的に違うのでしょうか。

何にせよ,とりあえずの解決法としては,
  $${\texttt{LEFT( )}}$$ ではなくて $${\texttt{MID( )}}$$ を使う
というのが良さそうです。

$$
\begin{array}{c}
\boxed{ \texttt{ =LEFT(A1,FIND("(",A1)-1) } } \\ \downarrow \\
\boxed{ \texttt{ =MID(A1,1,FIND("(",A1)-1) } }
\end{array}
$$

詳細や原理は後で時間があったら調べてみることにしましょう。

この記事が気に入ったらサポートをしてみませんか?