GoogleスプレッドシートのArrayFormulaでCountIf関数を1行ずつ使いたいのに使えなくて困った件

インターネットビジネススクール講師
ツール担当の北野です!

僕が講師をしている輸出ビジネススクールでは、eBay輸出も教えています。

eBay用のツールも開発しています。

ただ、まだすんなり出品できるまでには至ってないんです。

翻訳を自分の目で確認してもらってから出品するスタイルです。

その翻訳部分を補う補助ツールをGoogleスプレッドシートで作りました。

先日ブログで書いていた「翻訳ツール作成中!」は、この翻訳シートのことです。

今朝、その翻訳ツールについてエラー報告がありました。

その原因と、解決方法をシェアさせていただきます!

原因:ArrayFormula関数の中で、範囲指定が必要な関数が使えない。

僕が作った翻訳シート、めちゃくちゃ動作が重たいです(汗

Googleスプレッドシート、1つのファイル(ワークブック)で作成できる最大のセル数500000ギリギリまで使ってます。

さらに、翻訳シートですのでGoogleTranslate関数を使いまくってます!

なので、めちゃくちゃ動作が重いんです。

その動作が重たいのをなるべく解消しようと、ArrayFormula関数を使っています。

(ArrayFormula関数については「ArrayFormula 高速化」でググってもらえるといろいろ情報出てきます)

ところが!!!

ArrayFormula関数を使っているがために、今回のエラーが発生しました。。

ArrayFormula関数の中で、CountIf関数を使ってました。

eBayの商品タイトルは80文字まで、という制限があります。

なので、同じ単語を複数回入れると、検索に引っかけるための文字数を無駄に使ってしまうことになる、と僕は思ってます。

そのため、同じ単語はタイトルに含めないために「重複除去」というキーワードでググりました。

そしたら「CountIf関数」がヒットしたので、CountIfを使って組んでたわけです。

で、出来たつもりになっていたけど、出来ていなかった、ということですね。

=CountIf(範囲, 条件)

ということで、CountIfの第1引数は、カウント対象の「範囲」を指定します。

この「範囲」を指定する関数だと、ArrayFormuraの中で使えないっぽいですね。

(なんとなく、そうなんじゃないかとは思ってたんですけど、チェックできてなかったっス)

解決:重複チェックの別の方法「Find関数」

抜粋してますが、単語の重複除去をするために、次のような式を書いてました。

=IF(COUNTIF(EY2,O2)>0,EY2,EY2&” “&O2)

EY列に単語追加前の文字列が入ってて、O列に追加する単語が入ってる、という状況です。

これを、ArrayFormuraを使って書くと、

=ArrayFormura(IF(COUNTIF(EY2:EY,O2:O)>0,EY2:EY,EY2:EY&” “&O2:O))

良さそうに見えてましたが、CountIfが範囲指定なので、EY列の中の文字列のどこかに追加する単語が含まれていたら除去される、という状況になったんですね。

それで「この単語、タイトルに入らないんですけど…」的な質問が来てたわけです。

これは直さねば…、ということで、改めてググりました!

ArrayFormuraって単語を含んで検索すると、先に検索してもらったような「高速化」の話ばかりが引っかかるんですよね。。

根気強くいろいろ検索して、ようやく解決の糸口を見つけました!

Find関数」という関数があることを知りました!

いやー、まだまだ勉強が足りないっすね。。

FIND関数は、”大文字小文字を区別して、特定の文字列がテキスト内で最初に現れる位置を返します。”

これを使えば、単語追加前の文字列に、追加しようとしている単語が入っていたら1以上の数字が返る、ということになると思います。

Find関数を、さっきのCountIf関数の代わりに入れると、

=ArrayFormura(IF(IFERROR(FIND(O2:O,EY2:EY))>0,EY2:EY,TRIM(EY2:EY&” “&O2:O)))

これで無事に動きました☆

ここまで読んでいただきありがとうございます!

スプレッドシートのことを言語化するのはなかなか難しいですね!