Googleスプレッドシートで任意のシートのみ共有したい

スプレッドシート全体じゃなくて、特定のシートだけ・・・ってのが希望

作成日:2018-06-08, 更新日:2018-06-08

基本

・無理・・・というか、挫折中。下記の「案2」あたりでひとまず満足。

経緯

・チームでGoogleスプレッドシートを共有していた
・別チームにもGoogleスプレッドシートを共有する必要が出てきた
・でも、別チームには見られたくない情報がある
・・・「困った」って感じ。

最終的な希望

指定した「範囲内 or 範囲外」のみ「閲覧 or 編集」禁止(もしくは「閲覧 or 編集」許可)としたい

初期のスプレッドシート

下記のようなシートを持つ「スプレッドシート:チームA専用」ってのがあるとする。

▼「シート:串焼き」

A B C D
1 鳥精 140円 塩、タレ 鳥胸
2 豚精 140円 塩、タレ 三元豚
3 丸ごとシマウマ 180円 塩、タレ すっごくお腹が空いた人用

▼「シート:オーダー」

A B C D E
1 カウンター1 鳥精 1本 140円 140円
2 カウンター1 丸ごとシマウマ 2本 180円 360円
3 テーブル3 豚精 4本 140円 560円

・「シート:オーダー - D列」は「vlookup()」で「シート:串焼き - B列」を取得
・「シート:オーダー - E列」は「シート:オーダー - C列とD列」から求める

チームBと共有

・「スプレッドシート:チームA専用」の「シート:串焼き」のみ共有したい
・「スプレッドシート:チームA専用」の「シート:オーダー」は共有したくない

さらに要望

・「スプレッドシート:チームA専用」の「シート:串焼き」の「列D」も共有したくない。

求めている内容

・共有したくない部分は閲覧禁止

共有したくない部分は編集禁止

「閲覧禁止」じゃなく「編集禁止」ならシートの保護でユーザーの権限指定で対応可能っぽい。

指定箇所のみ閲覧OK(案1):importrange()

「閲覧OKな部分のみ別のスプレッドシートで読み込ませる」って方法がある。
ただ、編集したりすると・・・面倒。

流れ

スプレッドシートを2つ用意。
・「スプレッドシート:チームA専用」
・「スプレッドシート:共有用」
※一つ(スプレッドシート:チームA専用)は上記のヤツ。もう一つ(スプレッドシート:共有用)は共有させるための「スプレッドシート」

▼流れ
1.「スプレッドシート:チームA専用」のURLをコピっておく(※後でも良い。「https~edit」まで)
2.「スプレッドシート:共有用」の「セル:A1」に「importrange()」で読み込み対象と範囲を指定(※詳細は後述)
3.「スプレッドシート:共有用」の「セル:A1」で共有のことを聞かれるのでOKしてあげる
4.「スプレッドシート:共有用」を別ユーザーと共有する

「importrange()」で読み込み対象と範囲を指定について

▼構文

=importrange(URL,範囲)

▼必要な情報
・「スプレッドシート:チームA専用」のURL
・「スプレッドシート:チームA専用」の共有したいシート、範囲

▼OKな指定範囲
・「シート:串焼き!A1:D999」みたいなシート名とセルの範囲

▼ダメな指定範囲
・「A:Z」みたいな列だけの指定
・「シート:串焼き」みたいなシート名だけの指定

▼記述(「スプレッドシート:共有用」の「セルA1」に下記入力)

=importrange("https://docs.google.com/spreadsheets/d/〇〇〇/edit","シート:串焼き!A1:D999")

注意

・「スプレッドシート:共有用」の「セルA1」は「=importrange()」が入力される
・「スプレッドシート:共有用」の「セルA2」や「セルB1」などは編集不可(※エラーになる)
・「スプレッドシート:チームA専用」の「セルA2」を修正すると「スプレッドシート:共有用」の「セルA2」も変更される
・範囲が「A1:D999」の場合、「スプレッドシート:共有用」の「セルE1」などの範囲外は何を入力してもOK
・「スプレッドシート:チームA専用」を並び替えると「スプレッドシート:共有用」も並びかわる。
・「スプレッドシート:共有用」を並び替えると「スプレッドシート:チームA専用」も並びかわる。
・「スプレッドシート:共有用」の「列E」に入力し、「スプレッドシート:チームA専用」を並び替えても「列E」は並びかわらない

案2

基本は「案1」。
・「案1」の「スプレッドシート:共有用」のシート名を「マスター」とする。
・「スプレッドシート:共有用」に「シート:編集用」を追加。

概要

・「スプレッドシート:チームA専用」が元データ
・「スプレッドシート:共有用」の「シート:マスター」に元データを読み込ませる
・「スプレッドシート:共有用」の「シート:編集用」に色々とデータを足してもらう

▼流れ
1.「スプレッドシート:共有用」の「シート:編集用」に「vlookup()」で「シート:マスター」を読み込ませる
2.「スプレッドシート:共有用」の「シート:マスター」を保護する。
3.「スプレッドシート:共有用」の「シート:編集用」に「vlookup()」した箇所を保護する。

コレで「スプレッドシート:共有用」の「シート:編集用」は並び替えてもOK

出来上がるシートたち

・上記では「A~D」としていたけど「A~C」の「シート:串焼き!A1:C999」を範囲とする。
・ユーザーは「管理者A」「一般B」の2人。

「スプレッドシート:チームA専用」の「シート:串焼き」

「管理者A」のスプレッドシートで共有はしない

A B C D
1 鳥精 140円 塩、タレ 鳥胸
2 豚精 140円 塩、タレ 三元豚
3 丸ごとシマウマ 180円 塩、タレ すっごくお腹が空いた人用

「スプレッドシート:共有用」の「シート:マスター」

シート自体を保護(編集不可にする)→「一般B」は「シート:マスター」の編集不可(閲覧のみOK)

▼「セルA1」に記載

=importrange("https://docs.google.com/spreadsheets/d/〇〇〇/edit","シート:串焼き!A1:C999")
A B C D
1 鳥精 140円 塩、タレ
2 豚精 140円 塩、タレ
3 丸ごとシマウマ 180円 塩、タレ

※「スプレッドシート:共有用」は「一般B」と共有

「スプレッドシート:共有用」の「シート:編集用」

列A~Dを保護(編集不可にする)→「一般B」は「列A~D」の編集不可(閲覧のみOK)
・列Aには文字(鳥精、豚精、丸ごとシマウマ)を入力
・列B~Cは「シート:マスター」からvlookup()でデータを取ってくる
※列B~Cにあらかじめvlookup()を入れとくなら列Aの保護を解除するのも良いと思う。

A B C D
1 鳥精 140円 塩、タレ hoge
2 豚精 140円 塩、タレ foo
3 丸ごとシマウマ 180円 塩、タレ bar

※「スプレッドシート:共有用」は「一般B」と共有

・列D以降は好きかって入力してもらう→「一般B」が色々入力できる
・このシートで並び替えを行っても「スプレッドシート:チームA専用」の「シート:串焼き」に影響は出ない(個人用のフィルタが自動で反映してくれる)

案3

「案2」でひとまずOKなので・・・他にもっと楽な方法があるかもしれないけど・・・挫折中。

関連項目

Googleスプレッドシートでフィルタでの絞込を自分のみにしたい