Googleスプレッドシートのセル内改行

# はじめに
[弊社](http://www.qnote.co.jp)には現在、怪我療養中の保護猫さんや臨時着任中の派遣猫社員さん達がいらっしゃるのですが、日々のお世話状況をGoogle スプレッドシートに記録したりしています。
このスプレッドシート、便利なのですがスマホアプリから編集しようとしたときに**セル内改行**の入力方法がわからなかったのでちょっと調べてみました。

# PC版とスマホアプリ版の違い
PC版のスプレッドシートでは、Mac/Windowsそれぞれ以下の操作にてセル内改行が入力可能です。

```
// Macの場合
Command(⌘) + Enter
Control(⌃) + Enter
Option(⌥)  + Enter

// Windowsの場合
Ctrl + Enter
Alt  + Enter
```

ではスアホアプリではどうやるかというと・・・
残念ながら、アプリでは単純な操作によるセル内改行の入力手段は用意されていないようです。。

Android/iPhoneいずれも、セルの値を編集中に改行を入力しようとEnterキーをタップすると、次のセルにフォーカスが移ってしまいセル内改行を入力することはできません。（PC版でいうEnterキーのみ入力時と同じ動作）

Enterがダメならコピペだ！ということで、まずはAndroidで試してみました。
メモ帳アプリ等から改行を含む文字列をコピーしてきて、それをスプレッドシートに貼り付けてみると
![Android_1.png](https://qiita-image-store.s3.amazonaws.com/0/320080/b3c321e8-c1ef-1b92-3123-d78718e09892.png)
![Android_2.png](https://qiita-image-store.s3.amazonaws.com/0/320080/4d4365b9-bf26-88cb-b638-0d7cd7133f65.png)
![Android_3.png](https://qiita-image-store.s3.amazonaws.com/0/320080/e9f28723-c2d2-762d-8112-06b8dce803e6.png)
できました！

コピペでいけるなら少し手間が掛かる程度だなーと思いつつ、iPhoneでも試してみたところ
![iPhone_1-1.png](https://qiita-image-store.s3.amazonaws.com/0/320080/4318272c-abcc-c5f7-604d-f5efdf6bffe4.png)
![iPhone_1-2.png](https://qiita-image-store.s3.amazonaws.com/0/320080/9362e11d-8505-9a82-bdba-c664456aa7a9.png)
![iPhone_1-3.png](https://qiita-image-store.s3.amazonaws.com/0/320080/483aa464-83d9-ab1a-032d-25157299c346.png)
できませんでした。。

色々と試してみた結果、iPhoneアプリではそもそもセル内改行の編集が許容されていないのか、元々改行が入力されていたセルでも編集しようとダブルタップした瞬間に改行が半角スペースに変換され1行の文字列になってしまいました。
![iPhone_1-4.png](https://qiita-image-store.s3.amazonaws.com/0/320080/3865673d-20d5-b1a3-6919-9939fea170f1.png)
![iPhone_1-5.png](https://qiita-image-store.s3.amazonaws.com/0/320080/bc036a18-eeb1-e42b-6635-b43406c09602.png)

# iPhoneでセル内改行してみたい
特に固執する必要はないのですが、iPhoneだけセル内改行を入力できないのは何だか寂しい、、
と思ったので、iPhoneのみでセル内改行は実現できないか、利便性は一切度外視で少し遊んでみました。

## CHAR関数を使用
CHAR関数はユニコード表に従って数値を文字に変換した結果を返します。
セル内改行は`CHAR(10)`で入力可能です。

```
=”1行目”&CHAR(10)&”2行目”
```

![iPhone_2-1.png](https://qiita-image-store.s3.amazonaws.com/0/320080/be14dcd2-aae5-7433-07e7-f16a78f835ad.png)

## GAS(Google Apps Script)を使用
スクリプトはスマホアプリからは編集できないため、あらかじめPCから設定しておく必要があります。
また、アプリではメニューバーやスクリプト登録済図形からのスクリプト実行が不可能なため、今回はスクリプト実行のトリガーとしてスプレッドシートが編集されたときに実行される`onEdit()`を使用しました。
※`onEdit()`の詳細については[こちら](https://developers.google.com/apps-script/guides/triggers/#onedite)

### 特定文字を改行文字に変換するスクリプト
セルの値が編集された際、特定文字（下記例では'@'）が含まれていた場合は改行文字に変換してセルに再設定するというスクリプトを書いてみました。

```dart
function onEdit(e) {
  // 編集されたセルを取得
  var range = e.range;
  // セルの値を取得
  var before = e.range.getValue();
  // '@'を改行文字に変換
  var after = before.replace('@', '\n');
  // 変換後文字列をセルに設定
  range.setValue(after);
}
```

![iPhone_3-1.png](https://qiita-image-store.s3.amazonaws.com/0/320080/643b05fd-fe85-0a90-d4d3-5f9144d38554.png)
![iPhone_3-2.png](https://qiita-image-store.s3.amazonaws.com/0/320080/42743448-e7d2-c19b-f8a9-a043d97aaafb.png)

### メモの内容をセルに設定するスクリプト
スプレッドシートではセルにメモを登録できるのですが、このメモであればiPhoneでも改行を入力することができるので、セルの値が編集された際にメモが設定されていた場合はメモの内容をセルに上書き設定するというスクリプトを書いてみました。

```dart
function onEdit(e) {
  // 編集されたセルを取得
  var range = e.range;
  // メモの内容を取得
  var memo = range.getNote();
  // メモが設定されていなければreturn
  if (memo == '') return false;
  // メモの内容をセルに設定
  range.setValue(memo);
  // メモを削除
  range.clearNote();
}
```

![iPhone_4-1.png](https://qiita-image-store.s3.amazonaws.com/0/320080/3176b0ed-9c37-dc0d-38e4-42c54a3e3c2f.png)
![iPhone_4-2.png](https://qiita-image-store.s3.amazonaws.com/0/320080/641826d3-530a-83df-8118-e3a2e86d8d38.png)
![iPhone_4-3.png](https://qiita-image-store.s3.amazonaws.com/0/320080/45d20ea4-4d42-3721-e0e0-6c528d6e0c51.png)

# おわりに
セル内改行に限らず、やはりスマホアプリ版のスプレッドシートではある程度できることが制限されるようです。
ただ、恥ずかしながら今回調べてみるまでスマホアプリではスクリプトを実行する手段がないと思っていたのですが、トリガー次第ではスマホアプリでも多少のスクリプト実行できることがわかったのが個人的には収穫でした。