• ベストアンサー

同列にある重複文字列のチェック方法

Googleスプレッドシート上で同列にある文字列の重複をチェックする方法として、隣のセル(B列)に「=COUNTIF(A$2:A$999;A4)>1」と書く方法を使っています。この方法を使うとA列に重複した文字列を入力すると、重複した文字列横のB列にTRUEと表示されます。 しかしこのやり方だとA列に文字列を入力後、B列もエクセルで言うオートフィルみたいなことをしなければならず面倒なので、スクリプトで重複チェックできないものかと考えています。 ですがJavaScriptは初心者なので書き方が分からず苦戦中です。どなたか、手がかりとなるスクリプトやヒントをご教示いただけませんでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

#2です。 ーー エクセルなら Sub Macro4() Range("A1:A11").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _ "E1"), Unique:=True End Sub で出来るでしょう。しかしこのフィルタオプションの設定の「重複するレコードは無視する」はGoogleSSでは無いと思う。 ーー だからGoogleSSでは A列でソートしておいて、(ソート法) (1)第1行からデータ最終行まで(2)を繰返す。 (2)前の行のA列の値を保持する変数を作って、この変数と現在行のA列の行が同じなら何もしない。 同じでなければE列に書き出す。 ーー そのために必要なコードのスキルは ・A列の最終行を割り出すコード。エクセルでは、End(xlup).Row ・For Nextに当たる繰り返し方法。 http://www.w3schools.com/js/js_loop_for.asp など多数 for(i=0;i<=5;i++){ 処理 } これはご存知だろう。 ・1セルの(行番号と列番号による)表現法。エクセルでCells(i,j)に当たるもの。

misoshio
質問者

お礼

愚問にお付き合いくださいまして誠にありがとうございます。 とりあえず「動作する」というレベルのものは以下のようになりました。晒すのをためらうほどのレベルですが。。。 これから使えるものに修正していきたいと思います。 function onEdit(event){ duplicationCheck(); } function duplicationCheck() { var sheet = SpreadsheetApp.getActiveSheet(); var startRow = 2; var ss = sheet.getLastRow(); var dataRange = sheet.getRange(startRow, 1 ,ss, 1); var data = dataRange.getValues(); var sortData = data.sort(); for (var i = 0; i < sortData.length; ++i) { var a = String(sortData[i]); var b = String(sortData[i-1]); if(a == b && a != ""){ Browser.msgBox(sortData[i]+" が重複しています"); } } }

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

わたしも、GoogleのSpredSheetとJavaScript に詳しくありません。しかし、質問が実現するには (1)GoogleのSpredSheetにそのスプレッド シートを扱うスクリプト言語が用意されていること (2)それを使える言語がJavaScriptである(含む)こと が必要です。 エクセルに場合 (1)はエクセルVBAという仕組みで (2)はVB(ビジュアルベーシック 6.0相当)です。 こういうのを普通は「マクロ」と言い表していますが、 GoogleのSpredSheetにはマクロがありますか? ーー (1)については http://codezine.jp/article/detail/5036 で使えるようになっているようです。 少し前ではhttp://news.mynavi.jp/series/googleapps/005/index.html には対応して無いという記事もあった。 (2)についてはhttp://codezine.jp/article/detail/5036で、ベースは JavaScriptだということが判りました。 ーー 入門はこのWEBサイトで役立つでしょう。 しかしエクセルのように、「したいこと」で照会すると近いコードが出てくる までは(記事の充実が)いかないのではないか。 このコーナーはエクセルとエクセル互換ソフトの質問がほとんどで、 GoogleのSpredSheetの質問はここにほとんど出ていません。 まさか質問カテゴリ相違ではないでしょうね。 回答が付けば非常にラッキーで、数日して回答が付かなければ、自分で勉強する ほか無いですね。

misoshio
質問者

お礼

ご回答ありがとうございました。

misoshio
質問者

補足

ご回答ありがとうございます。 1と2については理解しています(ほかの言語でプログラミングをしているので)。 質問は最初JavaScript(プログラミング)のカテゴリーでしましたが、1分ほどで削除してこちらに移動してきました。 このカテゴリのほうがGoolgeスプレッドシートを利用している方が多いと判断したからです。 それにしてもGoolgeスプレッドシートに関する質問はどのカテゴリに上げていいのか難しいですね。 今後ますます利用者が増えていくと思うのですが。。。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

ExcelでしたらB1に式を入力した後、セルの右下の■(フィルハンドル)をWクリックすると、隣の列(この場合A列)のデータが無くなる行まで勝手に下方向にオートフィルしてくれます。 この機能、Googleスプレッドシートに無いですか?

misoshio
質問者

お礼

ご回答ありがとうございました。

misoshio
質問者

補足

ご回答ありがとうございます。 私の説明の仕方が悪かったようで申し訳ありません。 私がやりたいのは、COUNTIF関数は使わずスクリプトだけで重複チェックを行いたいのです。 たとえばA列に文字入力し、重複文字列があった場合そのセルを赤くするとか、そういったスクリプトを作りたいと考えています。 →A列のスキャン(配列) →forなどで重複文字列をチェック →TRUEならエラーを返す というイメージです。

関連するQ&A