« 2020年2月 | トップページ | 2020年4月 »

ビデオ会議での留意点の共有

この記事は自分用の覚書です。

S.Y さん。

ビデオ会議をやってみて、気がついた点の共有です。

・拠点A(社内)
スピーカーフォン(OfficeCore M1)の周りに7名。それぞれPCの前で着座。
スピーカーフォンは別途1台のPCに接続。

・拠点B(自宅)
PCの前に1人。

・拠点C(店舗)
PCの前に1人

・拠点D(社内)
同じ室内に2人。それぞれPCの前で着座。

Onlinemeeting_20200331092601

留意点

・スピーカーフォンを使う場合、スピーカーフォンだけが音を集めて、音を出している状態にする。
・発言しないときは、マイクをミュートしておく。
・アプリのミュートとミュート解除だけでなく、PCのマイクとスピーカーも確認する。
・同じ室内でいるときは、イヤホンを使う。
・話し方もけっこう大切。

・スピーカーフォンだけが音を集めて、音を出している状態にする。

ビデオ会議をしながら調べ物をしたり、データを共有したりするので、会議に参加している全員がそれぞれの場所でPCの前に着座していました。
拠点AではWebカメラを使っていますが、その他の場所ではPCに内臓のカメラで各自映っていました。

また、拠点Aでは1台のPCにスピーカーフォンをつないでいました。

この場合、拠点Aでは、各自のPCのマイクとスピーカーを「オフ」にしておかないとハウリングします。
Webカメラに内蔵マイクがついていたら、もちろんそれも「オフ」です。

スピーカーフォン以外の機器が音を出していると、それをスピーカーフォンがひろうので。ぐるぐる回ってハウリングの原因になるようです。

・発言しないときは、マイクをミュートしておく。

これは拠点BとCのような場合ですね。
その人がいる周囲の音もPCのマイクはひろいます。それが他の全員のスピーカー(拠点Aでは1台のスピーカーフォンですが)から聞こえるので、そのときに話している人の声を妨げる場合があります。

・アプリのミュート、ミュート解除だけでなく、PCのマイクとスピーカーも確認する。

Zoom や Hangouts Meet でのミュートやミュート解除が、PCのハードウェアと連動しないことが起こりました。理由はわかりません。
「音を切っておく」や「音がでない」といった場合は、PCのマイクとスピーカーもオフやオンになっているかの確認もしたほうがよいと思います。
MacBook なら「システム環境設定」の「サウンド」。Windows なら「コントロールパネル」の「サウンド」です。

・同じ室内でいるときは、イヤホンを使う。

拠点Dではスピーカフォンを使っていません。
約3m×4m ほどの室内に2人いて、それぞれにPCでビデオ会議に参加していました。2人の距離は、間に普通の事務机とその横に袖机が1つあるぐらいでした。

この場合は、互いのPCが音を出さないようにイヤフォンをしておかないとハウリングしました。

マイクは各PCのものを使っていて問題はありませんでしたが、距離が近いので互いが発言する声が気になる人は気になると思います。
そういう場合は、可能なら1人が別の部屋に移動するしかないですね。もちろん、その場合はイヤフォンは不要です。

また、拠点Aでビデオ会議中に各自がPCを使うことが多いのなら、今後はスピーカーフォンをやめて全員がイヤホンとPC内蔵マイクを使った方が、他の拠点での声の聞こえがよいだろうと思いました。

ただし、スピーカーフォンとイヤホンでは、同じ時間の会話でも後者のほうが疲れるという人もいました。
そういうことも考慮すると、やはりスピーカーフォンが正解かなという気もしますね。

・話し方もけっこう大切。

特に拠点Aのような場合ですね。

スピーカーフォンで声をひろっているとき、発言している人の声を相手が聞きやすいやかどうかには、声の出し方もけっこう影響があるようです。

話始めから話終わるまで、同じ声の大きさで話していないと聞きづらいです。

たまに、最初はそれなりの声の音量でも、話の終わりに近づくにつれて小さくなっていて、最後は口のなかでぼそぼそというような話し方をする人がいますが、そういう声の出し方は、とても聞き取りづらくなります。

声が低い人も聞こえづらいです。
声が低い人は、ちょっと意識して高めの声を出すと聞こえやすいようです。

また、そもそも声が小さい人も聞き取りづらいです。
ビデオ会議では、意識して少し大きい声で話すのがよいようです。

特に拠点Aのような場所だと、そこにいっしょにいる人たちに向かって話す話し方をしてしまいがちです。
そういう声の出し方では、その場にいる人たちには聞き取れても、スピーカーフォンより向こうにいる人たちには聞こえづらくなることがあります。

そういうことも意識しながら話すのが大事だなと感じました。

| | コメント (0)

Google Apps Script で複数の人たちに1人ずつメール送信

この記事は自分用の覚書です。

■macOS Catalina
バージョン 10.15.3

■Google Chrome
バージョン 80.0.3987.149

■Gsuite Business

K.Y さん

Google Apps Script で複数人対象に、1人ずつメール送信するやり方です。
Google Apps Script、Googleドキュメント、スプレッドシート、Gmailを使います。

次のようなメール送信ができます。

・複数の人にメールを送信する際、To には1人分のメールアドレスを入れる。
・全員に同じ件名、同じメール本文を送る。
・本文中に相手の氏名を入れる。(その人ごとに変える。)
・From は自分のメールアドレスにして送信する。
・以上を人数分繰り返す。

From をGoogleグループのメールアドレスにもできます。
その場合は、そのグループで認証が必要で、認証のためにはグループの投稿権限で「ウェブ上のすべてのユーザー」も許可されていないといけません。
そのあたりは、Gsuiteの管理者と相談してください。

なお、From をグループのメールアドレスにして送信すると、受信側のシステムやメールソフトによっては迷惑メール扱いになる場合があります。
From を送信者のメールアドレスではないものにしているので、「なりすましメール」ということで。
あと、聞いただけの話なのですが、Outlookで受信すると、「(自分のメールアドレス)が(グループのメールアドレス)として送信しています」というような表示がされるそうです。

そのへんは仕方がないですね。
誰が送ってきたのかを完全に伏せることができるなんて仕組みは、Googleも提供しないでしょうから。

送信前の準備

メールの本文と受信者の一覧をつくっておきます。

メールの本文はGoogleドキュメントでつくってください。

件名は不要です。件名はこのあとスプレッドシートで指定します。
文中でメールの受信者の氏名を入れたいところは、 {お名前} という表記にしておいてください。
お名前 という文字列を半角の { と } で囲みます。これは必須です。

下記のコードでは、HTMLメールは送れません。
字体や文字色など文字に書式を施しても無効になります。
URLは送れます。
メールに署名をつけるなら、いっしょにつくっておいてください。

Gas_mailsousin_honbun

メールの宛先にする人たちの一覧を、スプレッドシートでつくってください。
列の並びは次図の通りにしてください。
コードのなかで各列を決め打ちしているので、列の並びを変えたり、途中に挿入したりしないでください。
1行目の「列見出し」は、使う人がわかればなんでもいいです。

Gas_mailsousin_spreadsheet

ドキュメントのIDとは、メール本文にするドキュメントのURLの /d/ のあとから /edit の前までのことです。
たとえば、https://docs.google.com/document/d/????????????????/edit なら ???????????????? の部分がドキュメントのIDです。

「表示する名前」の列では、受信した際に、相手の手元で自分の名前がどのように表示されるかを指定します。
たとえば、「事務局」と表示したかったらそう入力してください。
先の From の話でふれたように、ここで指定した表示も、受信側のシステムやメールソフトによってはその通りの表示にならないで、送信者の名前が表示される場合があるそうです。

コードについて

冒頭で全ての変数を宣言しているのは、単に私の好みです。深い意味はありません。
(Google Apps Script では、コード中に変数が出てくるときに変数の宣言ができますが。)

「プログラムのコードを書く」という経験を VBA から始めたせいか、最初に変数を宣言しておかないとなんか気持ちが悪くて。
変数 i を真っ先に宣言しているあたりが、「VBA をやっている人だなあ」感があるでしょ?
(JavaScript や Google Apps Script に慣れている人が見ると、こちらのほうが気持ちが悪いのでしょうけど……。)

受信者の一覧をつくったら、同スプレッドシートの「ツール」から「スクリプトエディタ」を選択して、下記のコードを貼り付けてください。
コピーするのは function onOpen から、このページの一番下にある } までです。
Google Apps Scriptのプロジェクト名も、スプレッドシートのファイル名も適当でかまいません。

相手のメールアドレスなど入力した情報が間違いないかを確認して、いったんスプレッドシートを閉じてください。
再度開くとスプレッドシートのメニューに「メール」という表示が追加されます。
それをクリックすると、「1人ずつメール送信」というコマンドが表示されるので選択すると送信の処理が始まります。

「1人ずつメール送信」を実行するときは、つくった受信者の一覧のシートを開いておいてください。アクティブなシートを指定しているので。

最初にスクリプトの「許可」を求められます。画面に従って進めてください。

送信の処理が行われている間は、「スクリプトを実行中」という意味のメッセージが表示されています。
処理が終わったら、「送信状況」の列に「送信済み」という文字列が入力されます。
送信されたメールは、Gmailの「送信済み」ラベルのなかに入っています。

・送信できるメール数について

Gsuite Business の契約の場合、Google Apps Script で同じ日にメールを送信できる上限は、1アカウントあたり1500通だそうです。

上限以下だからといって、何百通も送信しようとするのはやめたほうがよいと思います。
Google Apps Script には「実行時間が6分」という制限があります。6分を超えるとエラーが出て止まるそうです。

ちなみに、Windows10でも試してみたら正常に送信されましたが、3件への送信で約5秒かかりました。100件で3分弱というところでしょうか。
■Windows10の環境
・Surface pro3 (Windows10 Pro バージョン1909)
Intel(R) Core(TM) i7-4650U CPU @1.70GHz 2.30GHz
メモリ8GB
・Google Chrome バージョン 80.0.3987.149


function onOpen(){
   //「1人ずつメール送信」というコマンドを表示する。
   var MailCommand=[
     {name: "1人ずつメール送信", functionName: "Mail_Kobetusousin"},
   ];
   //スプレッドシートのメニューに「メール」という表示を追加する。
   SpreadsheetApp.getActiveSpreadsheet().addMenu("メール",MailCommand);
    }

function Mail_Kobetusousin() {
   //■変数の宣言
   var i;
   var SheetName;
   var SheetRow;
   var Atesaki_Name;
   var Atesaki_MailAddress;
   var Mail_Kenmei;

   //メール本文にするGoogleドキュメントのIDを代入する変数
   var Document_id;
   //ドキュメントのIDをもとにメール本文にするドキュメントを特定して、オブジェクトとして受け取るための変数
   var Document_Object;
   //ドキュメントのオブジェクトからテキスト情報を抜き出して代入する変数
   var Document_no_Body;
   //ドキュメントのオブジェクトから抜き出したテキスト情報にある {お名前} の部分を、受信者の名前に置換したあとのテキスト情報を代入する変数
   var Oname_with_Body;

   var Sousinsya_Name;
   var From_no_Address;
   //■変数の宣言はここまで。

   //アクティブなシート名を取得
   var SheetName=SpreadsheetApp.getActiveSheet();
   //同シート上でデータが入力されている最後の行番号を取得
   var SheetRow=SheetName.getDataRange().getLastRow();

   //■ここからメール送信の繰り返し。
   for(i=2;i<=SheetRow;i++){
     //i<=SheetRow は「シートの最終行の数以下の間、処理を繰り返す」という条件。
     //i++ は、「繰り返しのたびに、変数 i を1つずつ増やす」ということを略した書き方。厳密には i=i+1 と書く。

     //シートにある氏名を変数に代入。シート上で受信者の氏名の列が左からいくつ目にあるかを、数字の部分で指定している。
     //受信者の氏名は1列目にあるので、SheetName.getRange(i,1) になっている。
     Atesaki_Name=SheetName.getRange(i,1).getValue();

     //受信者のメールアドレスを変数に代入。
     Atesaki_MailAddress=SheetName.getRange(i,2).getValue();

     //メール件名を変数に代入。
     Mail_Kenmei=SheetName.getRange(i,3).getValue();

     //メール本文にするドキュメントのIDを変数に代入。
     Document_id=SheetName.getRange(i,4).getValue();

     //送信者の氏名を変数に代入
     Sousinsya_Name=SheetName.getRange(i,5).getValue();

     //Fromに入れるメールアドレスを変数に代入
     From_no_Address=SheetName.getRange(i,6).getValue();

     //メール本文にするドキュメントをIDで特定して、オブジェクトとして取得。
     Document_Object =DocumentApp.openById(Document_id);
     //メール本文にするドキュメントのオブジェクトからテキスト情報を変数に代入。
     Document_no_Body=Document_Object.getBody().getText();
     //{お名前} の部分を受信者の氏名にしたいので、 {お名前} を変数Atesaki_Nameに置き換える。
     Oname_with_Body=Document_no_Body.replace(/{お名前}/g,Atesaki_Name);

     //メールを送信
     GmailApp.sendEmail(
         Atesaki_MailAddress,
         Mail_Kenmei,
         Oname_with_Body,
         {
             from: From_no_Address,
             name: Sousinsya_Name
         }
     );

     //アクティブなシートの7列目に「送信済み」の文字列を入力。
     SheetName.getRange(i, 7).setValue("送信済み");

   }//←for に戻って、スプレッドシートの最終行になるまで繰り返す。

          /*
          ■replaceメソッドについて
         『g』は、最後まで探すというフラグ。
          replaceメソッドでは、『g』フラグを付けないと1個目しか置換しない。

          ■sendEmailメソッドについて
          GmailApp.sendEmail( からのコードで、Gmailのメールを送付。
          受信側のメールアドレス、件名、内容と、sendEmailメソッドのオプションで送信側のアドレス、送信者名を指定。

          sendEmailメソッドに設定できる値は次のよう。

          GmailApp.sendEmail(
              送信先アドレス(to),
              メール件名,
              メール本文,
              {
              cc: 送信先アドレス(cc),
              bcc: 送信先アドレス(bcc),
              from: 送信元アドレス(from),
              noReply: false,
              replyTo:返信先アドレス(replyTo),
              name: 差出人名
              }
          )
          */
}

| | コメント (0)

2020年の初ウグイス

今日(3月9日)、ウグイスが鳴いた。

昨年の初ウグイスは3月11日だった。その時の記事を見ると、19年の3月11日は暖かかったようだ。
天気予報ではうちのあたりは、19年のころと同じで今日は暖かいのだとか。

「縁起の良さ」の象徴としても知られるウグイス。
別名は「春告鳥(はるつげどり)」。

洋の東西を問わず、ウィルス騒ぎで大変な世の中に良きことをもたらしてほしい。

| | コメント (0)

『高天原探題』を NHK でやっていた。

NHK オーディオドラマ「青春アドベンチャー」で『高天原探題』をやっていた。

もう終わってるじゃないか。
知らなかったぞ。なんでもっと大々的に宣伝してくれなかったんだ。作者の三島浩司(みしまこうじ)さんのTwitterでもふれていたのに。

これ、原作を読んでけっこう気に入っていたのだ。
(同じ作者の『ダイナミックフィギュア』も感動して、前にこのブログで感想を書いたしで。)

聞きたかったよ〜。聞き逃しの放送も終わってるしで。

NHKさん。
「聞き逃し対応」だけではなくて、「ずいぶん経ってから知った人」対応とかもやってもらえませんかね?

| | コメント (0)

UNIQUE関数で重複する行をなくす。

この記事は自分用の覚書です。

■MacBook Pro macOS Catalina
バージョン 10.15.3

■Office365 Business サブスクリプション
Excel for Mac バージョン 16.34 (20020900)

M.H さん。

最近使えるようになった関数で、うちの仕事で役立つと感じた関数は、一つ前の記事で扱っているXLOOKUP関数の他に、FILTER関数、SORT関数、UNIQUE関数があります。どれもOffice365サブスクリプショナーだけが使える関数のようです。

検索すれば、どの関数も使い方を説明してくれているサイトはすぐに見つかります。

この記事では、UNIQUE関数が我々の仕事で役立つ点にふれたいと思います。

表から重複する行をなくしたいことがよくあります。
UNIQUE関数を使うと簡単にその状態をつくれます。

仕事で扱う「重複をなくした表」には2つの状態があります。

1. 元の表で重複している行を省いた一覧

2. 元の表のときに、そもそも重複がない行を抜き出した一覧

どちらも簡単につくれるのが、UNIQUE関数のお役立ちどころです。

Uniquekansudetukuru

また、XLOOKUP関数の記事では特にふれませんでしたが、「元のデータをいっさいさわらない」のも、これら新しい関数に共通の利点といってよい気がします。

絞り込みや並べ替え、重複をなくす作業のときに、元データをうっかり消したり書き換えたりしないようにシートをコピーしたり、並べ替えの前に戻せるように連番を振っておいたりと、ちょっと気をつかうことってありますよね。

そういう気づかいが不要になります。

UNIQUE関数の引数

数式を入力するときに表示される関数ヒントでは、UNIQUE関数の書式は次のようです。
必須な引数は「配列」だけです。

・マイクロソフトのサイトにあるUNIQUE関数のヘルプ
UNIQUE(配列,列の比較,回数指定)

引数が少し分かりにくいです。

・引数「配列」
いわゆる、セル範囲です。

・「列の比較」
「TRUE - 一意の列を返す」を指定すると、"列方向" をみていって重複をなくします。
「FALSE - 一意の行を返す」だと、"行方向" をみていって重複をなくします。

関数ヒントで「列の比較」と表示されるのがわかりづらいですね。

「行方向」と「列方向」

「行方向」と「列方向」は、ワークシートを理解していないと迷うところだと思います。

次のようです。

Gyouhoukou

Retuhoukou

行方向と列方向を逆に考えそうになるので、気をつけてください。

状態「1.」でも「2.」でも、引数「列の比較」には FALSE を指定する。

表から重複する行を探すということは、表を上下(行方向)にみるということです。
なので、上の「1.」の状態をつくるときも「2.」の状態をつくるときも引数「列の比較」は FALSE です。

引数「列の比較」に TRUE を指定することは、我々の仕事ではほとんどないでしょう。

「列の比較」という引数名がほんとにわかりづらいです。
もっとわかりやすい引数名にしてほしいと思います。

引数「回数指定」について

慣れないと、この引数もわかりにくいかもです。

関数ヒントでは、
・TRUE は「1回だけ出現するアイテムを返す」
・FALSE は「個別のアイテムをすべて返す」
となっています。

引数「配列」で指定したセル範囲のなかで、「一度だけ出現するもの」を抜き出すときは、TRUE を指定します。
上記の「2つの状態」の「2.」ですね。
「元の表のときに、そもそも重複がない行」は、選択範囲のなかで「1回だけ出現するアイテム」です。

「2つの状態」の「1.」のほう——セル範囲のなかから重複している行を省いた状態にするのが、FALSEです。
「個別のアイテムをすべて返す」というのは、「2つの状態」の「1.」のことです。 

■1. 元の表で重複している行を省いた一覧
UNIQUE関数はスピルします。次の図では、数式はセルG13にだけ入力しています。

G13の数式は、 =UNIQUE(B2:D10,FALSE,FALSE) です。

関数がスピルして埋まった範囲は青い枠線で囲まれます。

1nojoutai

■2. 元の表で、最初から重複がない行を抜き出した一覧
次の図のセルG13の数式は、 =UNIQUE(B2:D10,FALSE,TRUE) です。

2nojoutai

ひょっとしたら、この記事がよけいにわかりづらくしたかもしれませんね。
すみません。

とにかく、我々の仕事で使う頻度がより多いのは、

=UNIQUE(B2:D10,FALSE,FALSE)

のようにセル範囲に続いて両方の引数で FALSE を指定する数式でしょう。
「1. 元の表で重複している行を省いた一覧」をつくる数式です。

範囲が増えるなら「テーブル」にしておく。

上記の例ではセル参照で指定しています。
この場合、追加があって行や列が増えたら、引数「配列」の修正が必要です。

追加に対応しておくなら、元の表の範囲を「テーブル」に変換して、引数「配列」ではそのテーブル名を指定してください。

テーブル名には日本語が使えます。
テーブル名の頭に英字を付けておくと便利です。数式を入力するときにその英字を打ったら候補にテーブル名が表示されます。

日本語だけのテーブル名だと、それを全部打たないといけません。候補が表示されないんです。

並べ替えにはSORT関数

並べ替えするには、SORT関数を使ってください。

UNIQUE関数の結果は、エクセルの通常の「並べ替え」機能(「データ」タブの「昇順」・「降順」)では並べ替えできませんでした。

XLOOKUP関数も同じでした。たぶん、FILTER関数も同じだと思います。

Office365サブスクリプションのExcelでない場合は、UNIQUE関数の結果をコピーしてどこかに値貼り付けして「並べ替え」を実行するしかないですね。

| | コメント (0)

« 2020年2月 | トップページ | 2020年4月 »