パソコン・インターネット

Excel で、整数Xと整数Yの比を求める。

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

■MacBook Pro macOS Catalina
バージョン 10.15.6

■Microsoft 365 Apps for businessサブスクリプション
(旧称 Office 365 Business)
Excel for Mac バージョン 16.40 (20081000)

整数Xと整数Yの比は、整数Xと整数Yの最大公約数でそれぞれを割ると求めることができる。

整数Xと整数Yの最大公約数は、GCD関数で求めることができる。

X_y_no_hi_20200831163801

| | コメント (0)

Excel で、Zoom のチャットから発言者とコメントの一覧を作る。

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

■MacBook Pro macOS Catalina
バージョン 10.15.6

■Microsoft 365 Apps for businessサブスクリプション
(旧称 Office 365 Business)
Excel for Mac バージョン 16.39 (20071300)

K.M さん。K.K さん。

テキスト保存した Zoom のチャットから、発言者名と正味のチャット部分というか、コメントというかの一覧を、Excel で作るやり方です。

■課題

保存した Zoom のチャットを開くと次のようになっていることが多いですよね。
macOS 用のテキストエディタ「mi」(えむあい)の画面です。
(通常は「テキストエディット」で開かれます。)

01zoom_chat

これをエクセルにコピー貼り付けすると、こうなります。

02_1zoom_chat

結果として、こうしたいということですよね。

02_2zoom_chat

■考え方

次図のB列の文字列で、
・" 開始 "("開始" の左右に半角スペースがある。)
・" : " (半角コロンの左右に半角スペースがある。)
が不要なわけですが、発言者名とコメントの境目にある ":" (半角コロン)は左右を分ける目印として生かしたいと思います。

02_1zoom_chat

そこで、
・" 開始 " をスペースごと取り除く。
・" : " からは、左右のスペースを取り除く作業をまずします。スペースを無くしておいた方が、このあと関数の数式を作りやすいので。

SUBSTITUE関数で、" 開始 " の部分を無くす置換をします。
また、 " : " は左右のスペースがない ":" (半角コロンのみ)に置換します。

そうすると、

Mitsuhide Akechi:6月2日の本能寺の件、よろしくお願いします。

ということになります。

これができれば、FIND関数・LEN関数・LEFT関数・MID関数を使って、":" の左右を分けて抜き出すことができます。

・FIND関数
元の文字列の中で ":" が左から何文字目にあるかを調べます。

・LEN関数
元の文字列の全文字数を調べます。

・LEFT関数
FIND関数の結果を使って、元の文字列の左端から ":" の1文字前まで(つまり、発言者名)を抜き出します。

・MID関数
FIND関数の結果を使って、":" の1文字右隣からコメントを抜き出します。
何文字抜き出すかの指定には、LEN関数の結果を使います。
LEN関数の結果を使うことで、コメントが何文字あっても全部抜き出すことができます。
(32,767文字まで抜き出せます。セルに入れられるこの文字数は Excel の仕様です。)

■実際の作業

次のようにしてみました。
図のH列とI列で、発言者名とコメントが分かれています。
(1行目の列見出しは適当につけてます。)

03zoom_chat

作業列を使っています。

先の処理を1つのセルでやってしまうと、何をしているのかを理解しづらい数式になってしまいます。
作業列を使って、処理の過程を複数に分けておくと、うちの社内では誰がいつ見ても理解しやすくしておけます。

詳しくは解説しませんが、何をしているかは見ればわかると思います。

関数の中に関数を挟んだ数式(「関数のネスト」といいます。)を、作ってはいけないということではないです。
ネストするしかない場合もありますから。

仕事で作るファイルは誰のものでもありません。職場の全員のものです。
引き継ぐかもしれませんし、流用するかもしれません。そんなときに、何をしているのかを理解しづらいファイルを渡されても、渡された方が困ります。

■チャットが改行されているとき。

次のようにチャットが改行されているときもありますよね。

04zoom_chat

これをエクセルにコピー貼り付けするとこうなります。

05zoom_chat

本来だと、A列の3行目から5行目までの文字列は、B列に入っていてほしいものです。

幸いなことに、このパターンには法則性があります。
B列のセルが空である場合は、A列に文字列が入っているという法則性です。

こういうときは、条件によって処理を分けるやり方が適用できます。

C列のセルに、「B列のセルが空欄ではないなら、そのセルの値を表示する。B列のセルが空欄ならA列のセルの値を表示する」という式を入れてやればいいんです。

図では、IFS関数を使っています。
(Excel2016以前だと、IF関数になりますね。)

06zoom_chat

そして、D列以降で上記と同様のやり方をします。

ただし、今回は、":" がなくて、「・」(中黒)があります。
また、この場合は「・」も含めて抜き出したいので、列「発言者とコメントの間の値の位置」は 0 になっていることが必要です。
さらに、列「発言者」では、発言者名がそもそも無いのでエラーが起きます。

このあたりも条件分岐で処理できます。

行頭に中黒を付けるときは、たいていそれも含めて抜き出したいでしょうから、下図のG列では ":" ならその位置を、中黒なら 0 を返すようにしてみました。

中黒以外が行頭に付くことは、そんなにないでしょうから、そこはもう手入力で対応してください。(下図F列)
行頭文字も含めて抜き出すなら、G列のセルに 0 を入力します。

列「発言者」(I列)のセルは、エラーの場合は非表示にしてみました。
エラーが見えたままよりも非表示にしておいた方が、一覧表としてより見やすくなるかなと思ったので。
IFERROR関数の引数として、LEFT関数を使っています。「関数のネスト」ですね。

最終的には、非表示のままにしておくのではなく、発言者名を入れておいた方がよいと思います。
発言者名で絞り込むこともできますから。

07zoom_chat

| | コメント (0)

PowerPoint で画像を図形に合わせてトリミングする。

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

■macOS Catalina バージョン10.15.5
■Microsoft 365 Apps for businessサブスクリプション
(旧称 Office 365 Business)
PowerPoint for mac バージョン16.39(20071300)
2020年4月22日から、Office365 の名称が変更になっています。

K.M さん。K.K さん。

いつになったら画面以外で会えるのでしょうか。早くその日が来てほしいです。

さてこの前は、Word でメイリオを使う話でしたが、今回は PowerPoint で画像をトリミングする件です。
(PowerPoint の話になっていますが、同じことは Word でも Excel でもできます。)

具体的には「画像から不要な部分を消して、必要な部分だけを残す」やり方です。
一番単純なやり方は、画像を選択して「図の書式設定」から「トリミング」をクリックします。あとは、ハンドルを動かして、残したい部分を囲んでEscキーを押すだけです。

ここでは、少し違ったやり方をしてみます。「図形の形に切り抜く」やり方です。
「図形に合わせてトリミング」という機能を使います。円や四角その他の形に切り抜くことができます。

次のようです。
元の画像からガムテープの部分を切り抜くために、「円」に合わせてトリミングしています。

Trimminggazou1

図形に合わせてトリミングする。

1.画像を選択して、「図の書式設定」から「図形に合わせてトリミング」から「円/楕円」を選びます。
「角丸四角形」を選んで、四角形の画像の四隅を丸くしたりもできます。

Trimminggazou2

2.元の画像が円形にトリミングされるので、そのまま「トリミング」から「縦横比」の「1:1」を選択します。

Trimminggazou3

3.縦横比が「1:1」になるので、ハンドルを動かして残したい部分を囲みます。

Trimminggazou4

4.残したい部分をうまく囲めたら、Escキーを押すか、もう一度「トリミング」アイコンをクリックします。
影になっている以外のところをクリックしても確定できます。

5.これで囲った部分だけが残ります。

Trimminggazou6

画像の一定の領域をくり抜く。(背景が見えるようにする。)

先の例では、画像の一部を切り抜きましたが、画像の一部をくり抜くこともできます。
(背景が見えるように穴を開けられます。穴の形状は「円」でなくてもかまいません。)

元の画像の上に図形を描画することで、その図形の形にくり抜くことができます。

Trimminggazou7

ガムテープだけにした画像があるので、ここではガムテープの内側を丸くくり抜いてみます。

1.「挿入」タブの「図形」からくり抜きたい形状の図形を選んで、元の画像をくり抜く部分に図形を描きます。

Trimminggazou8

2.図形を描き終えたら、穴を開けたい方を先に選択します。
例の場合は、ガムテープを先に選択して、次に円を選択します。

Trimminggazou9

3.「図形の書式設定」から「単純型抜き」を実行。

Trimminggazou10

4.画像がくり抜かれます。
別の画像の上にもっていくと、背景が見えてくり抜かれていることがわかります。

Trimminggazou11

トリミングをやり直す。

トリミングで消した情報は、そのファイルの中に保持されているので、やり直したい時は元に戻せます。
図を選択して、「トリミング」アイコンをクリックするとハンドルが表示されるので、トリミングで残す範囲を選択し直せます。

あるいは、トリミングを始める前の状態に戻すこともできます。

「図形の書式設定」から「図のリセット」を実行します。
図をサイズ変更していてそれも含めて全てリセットする場合は「図のサイズとリセット」を選びます。

Trimminggazou12

トリミングした情報を消して、情報漏洩を防ぐ。(ファイルサイズを減らす。)

こうした情報をファイルの中にもっているので、ファイルサイズはその分大きくなります。
(トリミングで消した部分の情報はファイルを閉じても残ります。)

セキュリティ上の理由で、消した部分は見られなくしておく、あるいは少しでもファイルサイズを減らしたいなどの場合は、ファイルに残っているトリミングの情報を消すことができます。

1.画像を選択して、「図の書式設定」から「図の圧縮」を選びます。

2.「図のトリミング部分を削除する」と「このファイル内のすべての画像」の両方にチェックが入っていることを確認します。「画像の品質」の欄では、適当な品質を選択してください。最後に、OKボタンをクリックします。

画質が高ければ、「画面表示(150 ppi)」や「メール(96 ppi)」を選んでも見づらくなりません。
ファイルサイズも落とせます。
(選ぶ画質が高いほど、ファイルサイズが大きくなります。)

Trimminggazou13_20200724092701

なお、スライドに挿入あるいはコピー貼り付けした画像の元々の形式が GIF の場合は、「図のトリミング部分を削除する」を実行しても、削除されません。これは仕様です。

GIF 形式の画像のトリミング部分を削除するには、以下のようにするとよいでしょう。

1.スライドに GIF 形式の画像を挿入あるいはコピー貼り付けして、トリミングする。
ファイルサイズを抑えることができるのは「挿入」。

2.いったん画像以外の場所をクリックして選択状態を解除し、再度、画像を選択。

3.画像をコピーして、「ホーム」タブの「ペースト」から「図としてペースト」を選択。

4.スライド上から古い方の画像を削除して、手順 3 で貼り付けた画像 (トリミング済み) の配置を調整する。 

| | コメント (0)

Word で「メイリオ」を使うときに行間が広がらないようにしておく。(行グリッド線に合わせる。)

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

■macOS Catalina バージョン10.15.5
■Microsoft 365 Apps for businessサブスクリプション
(旧称 Office 365 Business)
Word for mac バージョン16.38(20061401)
2020年4月22日から、Office365 の名称が変更になっています。

K.M さん。K.K さん。

まだ画面越しの対面ですが、早く本当に会える日が来るといいなと思っています。

さて、先にもお伝えした Word で「メイリオ」を使っても行間が広がらないようにしておくやり方です。

この前、お伝えしきれなかったことも少し足しています。

繰り返しになりますが、以下の内容は「うちの会社ではこうだ」というものです。
世間一般どこでもそうだというものではありません。

他にも、お伝えした内容を書いている部分もあります。
くどいようですが、それだけ大事なことだと思ってください。

ここでは詳細にはふれていません。
長くなるし、疑問があればまた声をかけてください。
Zoom でも Meet でも、Teams でもかまいません。

うちのような中小企業では、お二人のニーズに応えられるようないろいろな研修を十分に提供できないかもしれません。
こんな時期ですから、外部のセミナーを受講したほうがよいようでしたら直属の上司の方に相談してくださいね。

もちろん、ご自身でいろいろ調べてもらってもぜんぜんかまいません。

Word で「メイリオ」を使っても行間が広がらないようにしておく。

以下の内容は、標準の状態の Word で新規作成を始める場合を前提としています。

ファイルを作り始める前に「行送り」を 20.5pt にしておきます。
メニューの「フォーマット」ー「文書のレイアウト」を選んで「行送り」という欄で入力します。

Word_bunsyo_no_layout

行送りが 20.5pt というのは、「文字の大きさ 10.5pt のメイリオ」で行間が変に広がらない最低限の値です。
その時々の文字の大きさで、読みやすいように行送りを増減させてください。
(我々の仕事で、文字の大きさが 10.5pt 以外でなければならないことは稀だと思いますが。)

"1ページの行数を指定時に文字を行グリッド線に合わせる" のチェックは外さない。

ネット上では、メイリオを使うと行間が広がる現象を解決するには、「"段落" の "1ページの行数を指定時に文字を行グリッド線に合わせる" のチェックを外す」というやり方をよく見かけますが、そのやり方はうちの社内では基本的には避けたほうがよいと思います。

Word_grid_ni_awaseru

我々の仕事では、和文と英文が混ざったドキュメントを作ることがあるので。

通常、和文には和文用のフォントを、英文には英文用のフォントを使います。

次の例は、和文にはメイリオを、英文には Times New Roman を使っています。
上記のチェックを外すやり方では、英文と和文の行間のつりあいが悪くなります。

Word_gyouokuri

また、Word の行送りに設定できる値は 14.3pt が最小値ですが、「段落」の「行間」の「固定値」ではそれ以下も設定できます。行送りの値以上も設定できます。

必要なら、行送りのポイント数を無視して「固定値」でさらに調整できるという理解でよいと思います。

たとえば、ある段落を目立たせるために、そこの文字の大きさを他の段落より大きくする場合とか。
文字を大きくすると行間も広がりますから、その段落でだけ調整が必要です。そんなときに「固定値」を指定して、他の段落と見た目のつり合いがよい行間にすることができます。

行送りは調整する。

さっきもふれたように、行送りを 20.5pt にしておけばどんな場合でも大丈夫というわけではありません。
ファイルで全体的に使うフォントが変わったり、フォントサイズが変わると、行送りの調整が必要です。

Word の場合、「行送り」と「行間」は同じ意味だと思っておいてください。
「行送り」と「行間」が何なのかにふれだすと長くなるのでふれません。
(「ワード 行送り 行間」とかで Google で検索すると、そのあたりをわかりやすく説明してくれているサイトが簡単に見つかりますよ。)

ファイルを作り始める前に、使うフォントと文字の大きさでの読みやすさを考慮しながら、行送りを増減させてまずは全体的な行間を決めてください。
(厳密には、「余白」を決めないと文字の大きさも行送りも決められませんが、社内では Word の標準の余白のままでファイルを作ることがほとんどだと思います。)

スタイルを使う。

Word でファイルを作る際は、「スタイル」を活用してください。

Word で絶対にしてはいけないことをわすれないでくださいね。

「標準」スタイルのままで段落を直にさわって、「ここは見出し1だから文字のサイズを大きめにして、ここは見出し2なので見出し1よりは小さく、ここは見出し3だから少し右にインデントして下線でも付けておくか……」などといったやり方はだめです。

スタイルは「標準」ではなくて「本文」を使っておくのが無難です。
フォントの指定では、段落を選択して直に「メイリオ」にするのではなく、スタイル「本文」の「フォント」で、和文用のフォントを「メイリオ」にして段落に適用後に行送りを調整してください。

ちなみに、=rand() と打つと、ダミーの和文を挿入できます。
欧文のダミーを挿入するには =lorem() と打ってください。

Word_style_honbun

「本文」スタイルを使っておくというのは、書式を変える必要がでてきたとき、「標準」にほどこす書式によっては、見出しなど他のスタイルにも同じ影響を及ぼすからです。

「本文」を使っておけば、そうした不要な連動を避けることができます。

「標準」を使ってはいけないという話ではないです。
「"標準" スタイルの書式を変えることはない」というなら何も問題ないことですから。

私に言わせれば、大事なのは、Word、Excel、PowerPoint など何であれ「わかってやっている」ことと、その時々で一番効率的で、自分にも周囲にも役立つやり方を選択できる力があるということです。

そして、選択できるためには、同じ結果を得るにも複数のやり方を知っている必要があります。

今回のメイリオの利用にしても、行間が広がらなくするには先に挙げた行送りを指定するやり方と、行グリッド線に合わせないやり方があります。
社内では、基本的には前者を選んだ方がほうがよいですが、後者のやり方でもかまわないときだってあるでしょう。

どのやり方が一番良いかという話ではないんです。選択肢をもっていることが大事なんです。

なお、既存のというか、組み込みのというかのスタイルは、そのまま使わないで、そのスタイルを「基準」にして「新しいスタイル」を作っておくのが、スタイルを活用するためのちょっとしたコツです。
(私は「本文」スタイルを基準にして別名のスタイルを作っています。同じスタイル名は使えないので。)

というのは、元々あるスタイルの名前を変えると、「ホーム」タブでのスタイル名と「スタイルウィンドウ」での表示がうまく同じにならなくて見づらいからです。

いいかげん長くなってきたので詳しくはふれませんが、たとえ元々あるスタイルから書式を全く変えなくても、そのスタイルを基準に「新しいスタイル」として作って名前をつけておくと、「ホーム」タブでのスタイル名と「スタイルウィンドウ」の表示を合わせることができるので、スタイル名を見やすくしておけます。

スタイル名の頭に 00 とか数字をつければ、「ホーム」タブのスタイルのところで番号にもとづいてスタイル名を左側から順に並べることができます。番号を変えれば、スタイル名の並び順を変えられます。

ファイルを作っているときに、よく使うスタイルを左側に寄せてこれるので便利ですよ。
(よく使うスタイルがスタイルウィンドウの右の方にあると、それを選ぶのにその都度画面を動かさないといけなくて面倒なんですよね。)

見出しもフォントサイズが変わるのが普通なので、「段落」の「行間」の「固定値」で調整するとよいでしょう。
これも直に見出しをさわるのではなく、見出しのスタイルの「段落」から行なってください。

Word_danraku_no_gyoukan_20200618143901

突然の自問自答を経て……

ここまで書いてきて、「標準スタイルの書式の変更が他のスタイルにも及ぶのだから、メイリオを使うときに "行送り" でなくて、標準スタイルの "行間" を "固定値" の 20.5pt にすることでも、他のスタイルの行間を全て 20.5pt にできるけど、何がどう違ってきて、どう使い分けることができるのか……」と、ふと疑問をもちました。

これまで考えたことはなかったです。

ただ、それをした場合は「文書のレイアウト」の「行送り」は 18pt のままです。

  • 「文書のレイアウト」の「行送り」は 18pt のまま。
  • 各スタイルの「行間」は 20.5pt にしている。

というファイルを作って、どういうメリットとデメリットがあるのか……。

いろいろ考えて試してみましたが、私にはわかりませんでした。
ですが、「それをするべき具体的な理由は思いつかない」という意味で、「避けるべきだ」と今は思っています。

仕事で作るファイルは誰のものでもなく、職場の全員のものです。誰かに引き継ぐこともありますし、流用することもあります。
だから、「あることをする(しない)」を選ぶ際は、それを選ぶべき具体的な理由がなければなりません。

設定ややり方を変える必要がでてきた場合、なぜそうしているかの具体的理由がわかっていないと、今の状態から変えてよいかダメかの判断を他者ができません。

Word でのファイル作成に限らず、Excel でも PowerPoint でも、「できる」ということと「やってよい」ということは別の話だと理解してください。

難しく考える必要はないです。

たとえば、前に Excel で「セルの値が4未満の場合、値の色を赤にする」相談を受けたことがあります。
4未満であることをわかりやすくしたいというわけです。

それなら、直に色を付けるより、セルを塗りつぶしたほうがよいと思うと提案しました。
白黒で印刷したときも、塗り潰されたセルのほうが視認しやすいと思ったからです。

というわけで、「白黒印刷時も4未満であることをわかりやすくするため」というのが、そのシートでセルを塗りつぶしている具体的な理由です。
なので、それができるなら「塗りつぶし」でなくてもよいことになります。

条件付き書式のアイコンセットを表示するとか、作業列を追加してIFS関数やIF関数で「4未満」と「4以上」の表示を分けるとか。
(ほら、同じ結果でも複数のやり方を知っているって大事でしょ?)

最後は Excel の話になってしまいましたが、とにかく、具体的な理由があるというのは、そういうことです。

(「文書のレイアウトの行送りは 18pt のままで、各スタイルの行間を 12.5pt にする」べき具体的な理由に、もし出会ったら私にも教えてくださいね。)

| | コメント (0)

図形の色を輪郭の色に適用する。

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

■MacBook Pro macOS Catalina
バージョン 10.15.4

■Microsoft 365 Apps for business (旧 Office 365 Business) サブスクリプション
PowerPoint for Mac バージョン 16.37 (20051002)

H.M さん。

図形の色を輪郭の色に簡単に適用するやり方です。
「スポイト」という機能を使います。
「パワーポイントのスライドで……」という話でしたが、エクセルでもワードで同じです。

まだまだ、実際に会うわけにはいかないようですね。
何かあったら、MeetやZoom、Teams と何でもいいのでやりとりしましょう。

00rinkaku

1. 輪郭の色を変えたいほうを選択
(ここでは三角形)

01rinkaku

2. 「図形の書式設定」で「輪郭の色」から「その他の色」を選択

02rinkaku_20200605103201

4. スポイトのアイコンをクリックして、吸い取りたい色の上にもっていく。
(ここでは円のほうへもっていく)

03rinkaku

5. 円形の領域が、吸い取る色に変わったら、クリックして「OK」をクリック。

04rinkaku

6. 輪郭の色が同じになる。
ここでは、三角形の輪郭(青)が、円の塗りつぶし色(ゴールド)になる。

05rinkaku

・別のスライドにある色を使いたいとき
スライドサムネイルでそのスライドが見えるようにして、そこから色を吸い取ってください。

・「スポイト」は、パワーポイントのなかでなくても色を吸い取ることができます。
たとえば、ブラウザで開いているWebページからとか。

| | コメント (0)

リモートワークの機材が無いのよ。

コロナウィルス感染の騒ぎで、「マスクが無い」「アルコール消毒のシートやスプレーが無い」といった話をよく聞く。
近所の店舗でも、「入荷予定はありません」という張り紙を見るばかり。

「増産を依頼しています」という首相の答弁は聞いた。

それも必要だ。間違っていない。

同時に「リモートワークに必要な機材と工事の手配ができない」人たちもいるということを、政治家の皆さんには知って欲しい。

スピーカーフォンやWebカメラといった機材を買おうとしても「無い」のだ。
だって、ほしいという人が多いから。

うちの会社は、たまたまリモートワークを試験的に始めていたからネット環境も機材もそれなりにそろっていた。

それでも、まだ会議室に人が集まれたころに、スピーカーフォンを追加でネット購入しようとしたら、買えなかった。
ショップから「2ヶ月待ち」と知らせがきた。いろんなネットショップを探しても「入荷予定なし」の表記が見つかるばかり。

モバイルWi-Fiでネットを使っていた人は、データ量の上限にすぐに達するのが不便で、家に光回線を入れようとしたら、工事がすぐには無理だとか。

政治家も識者といわれる方たちも、そういうところを指摘している人を僕は見たことがない。

この時期にリモートワークの実施率が低いと指摘されてもなあ。環境が整わなければ、やりたくてもできないでしょうが。

リモートワークをしたくても、いろんな事情ですぐには無理という人たちもいるだろう。

でも、その気になれば今日から始められるという人たちでも「機材がない」、「工事が間に合わない」人たちもいるはず。
そこのところを国を動かす人たちは知っているのか。

| | コメント (0)

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

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

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)

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)

使うなら、最新関数 XLOOKUP

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

■MacBook Pro macOS Catalina
バージョン 10.15.3

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

字余り……。

M.H さん。

Excel for Mac でXLOOKUP関数が使えるようになりましたね。
(さっき、Windows版 Excel も確認しました。バージョン2001(ビルド 12430.20264)です。)

すごいです。もうVLOOKUP関数で表引きしている時代ではありません。

使い慣れているからといって、いつまでもVLOOKUP関数を使うのは、うちの社内では「懐古主義に毒された老害だ」と言いたくなります。

これからはXLOOKUP関数の時代です! と、全角のびっくりマークで強調したくなります。

XLOOKUP関数の使い方は、インターネット上でいろんな人が解説をしてくれているので、探せばいくつでも見つかります。

ここでは、私が使ってみて、うちの仕事で役立つと思った点にふれておきます。

マイクロソフトのサイトのヘルプを見ると、XLOOKUP関数には「Office 365」の表示があるので、Office365サブスクリプショナーだけが使える関数のようです。

検索/行列関数 (リファレンス)

■引数「列番号」が不要

地味ですが、これがかなり便利です。

VLOOKUP関数の書式は次のようです。

=VLOOKUP(検索値,範囲,列番号,検索方法)

引数「列番号」を指定するのに、元の表の左端から地道に列の数を数えたことってありますよね。
「……9列目だから、9か……」とか。

それがもう不要です。

さらに、入力したVLOOKUP関数の数式を右にコピーするとき、「列位置」は変わりません。
「9 を 10 にして、次の 9 は 11 で、次は 12 で……」と地道な修正をしたこともありますよね?

それももう不要です。

「MATCH関数やCOLUMN関数を使えば列の位置がわかる」なんて話ではないです。
それをしなくてもよいという話ですからね。

XLOOKUP関数では、VLOOKUPの「列数」にあたる引数は、セル範囲で指定します。
書式は次のようです。

=XLOOKUP(検索値,検索範囲,戻り範囲,[見つからない場合], [一致モード], [検索モード]) 

「戻り範囲」のところがそうです。

必須の引数は「検索値」「検索範囲」「戻り範囲」の3つです。
うちの仕事なら、たまに引数「見つからない場合」を使うときはあるでしょうが、残りの引数を使うことはとても稀だと思います。

■XLOOKUP関数は「スピル」します。

VLOOKUPと同じ使い方をするなら、スピルの元になるセルに数式を入れるだけで、他のセルには自動的に数式が埋まります。
数式のコピーが不要ということですね。

「スピル」を説明するのは難しいです。手元でやってみてください。
「自動的に数式を埋めてくれる」と書きましたが、実際には元になるセル以外のセルには数式は入っていません。

スピルで埋まったセルを見ると、数式がグレーになっています。"ゴースト" というそうです。
ダブルクリックすると、セルの中には何も入っていません。それでも値は表示されます。

Xlookup_vlookup

■列を抜き出したり、入れ替えたりが簡単

「列数の多い表で、特定の列だけ見えるようにしたい」ということがあります。

ちょっと前に、90列ほどある表から列をいくつか抜き出したことがありました。それも、並びを入れ替えて。
「12列目が一番左で、6列目がきて、23列目で、次が19列目で……」といった感じで。

90列もあると、飛び飛びの列だけが見えている状態にするのは、嫌になるほど面倒です。

そんなときも、XLOOKUP関数なら簡単です。

XLOOKUP関数では、引数「検索値」に表1行目の列見出しにある文字列を指定して、引数「検索範囲」では1行目全部を選ぶだけです。
(MATCH関数の要領ですね。)

で、その範囲から「検索値」が見つかったときに値を戻す「戻り範囲」には、表の2行目から下全部の範囲を選択します。
(引数「検索範囲」と「戻り範囲」は同じ大きさでないといけません。)

Xlookup_retuirekae

■引数「検索範囲」と「戻り範囲」を別々に指定できます。

XLOOKUP関数では、引数「検索範囲」と「戻り範囲」を別々のセル範囲にできます。

ということは、XLOOKUP関数では、表の列のどこであっても「検索範囲」と「戻り範囲」に指定できるということです。
右端でも左端でも途中でもどこの列でも検索値を探せて、どこの列からでも値を戻せます。
(この考え方は "行" に対しても同じです。)

なので、これまではINDEX関数とMATCH関数を組み合わせていた作業ですが、それも不要になるでしょう。
社内での使い方を考えると、全部XLOOKUP関数で対応できると思います。

「同じ結果が出るから、どちらのやり方でもよい」ということではないです。

これまでは2つの関数を組み合わせなければできなかったことが、1つの関数でできます。
効率の良さと、関数で何をしているかの読み解きやすさでいって、XLOOKUP関数を使うべきです。

うちの仕事でXLOOKUP関数が役立つと感じたところは以上のようです。
ぜひ、お手元で試してみてください。何か気づいたことがあったら私にも教えてくださいね。

| | コメント (0)

より以前の記事一覧