バッテリー上がりぐらい助けてあげたいよ。

時間は夜の7時ごろ。某所で用を済ませて外へ出ると、出会った光景。

その男性は自動車のバッテリーが上がってしまったらしくて、そばを通った男性に声をかけて充電させてほしい旨を伝えていた。

ところが、声をかけられた方は、それを拒否。
すぐ隣で路上駐車してあった自動車に乗り込んで行ってしまった。

いやいや。特に急いでいた風でもなかったけど、バッテリーが上がってしまって困っている人を見捨てなくてもいいだろうに。

なんかの理由があって、声をかけてきた人のことを気に入らなかったのかもしれないけど。

あるいは、他の自動車も人も通りが少ない夜の路上で自動車を充電させてほしいと知らない人から声をかけられて、ハイハイと了承するほうがおかしいのかもしれない。
今どき、何をされるかわからないしね。「いいですよ」と背中を向けたら、いきなり刺されたとかあってもおかしくない。

とはいえ、どう見ても困っている様子だし、ブースターケーブルを持ったまま泣きそうな顔をしていたしで――かわいそうなので「大丈夫ですか」と声をかけたら、当然充電させてほしいと頼まれた。

もとよりそのつもりだったので、道路の反対側に路上駐車してあった自分の自動車を移動させてきた。

乗用車がすれ違いできるほどの道幅はあったけど、気持ち狭い道だし、ボンネット同士を向き合わせにしないといけないので、あちらの自動車の正面に止めるのに少々手間取った。

「ああ、さっき行っちゃった人は、これがやりたくなかったのかも……」と、思いついたけど、それにしてもだ――困っている人が目の前にいるのだし、もう少し対応というものがあったろうにとも思った。

「ごめんなさい。運転が得意じゃなくて。この道幅で向きを変えるのは自信ないです」とか言えば、バッテリー上がりを起こしていたほうも、「いえいえ。そんな。急に呼び止めてすみません」ぐらいの気持ちになれたろうに。

充電は無事終わり、特にトラブルはなく、その人は嬉しそうな表情でお礼を言ってくれて去っていった。
とはいえ、さっきもふれたように、知らない人から夜道で充電を頼まれてすんなり受けるのは危ないといえば危ない。

結果オーライではあったけれど、ひょっとしたら不用心なことをしてしまったのかもしれないという気持ちも少しある。

最近なかなか見かけることのない「バッテリー上がり」――夜に知らない人から頼まれた充電をすんなり了承してよいものかどうか。

こんなことが気になるなんて、なんて世の中だ。

| | コメント (0) | トラックバック (0)

Excel で別の文字列をセル内改行で付け加えて表示させる。

この記事は自分用の覚書です。
(Windows 10 Pro 64ビット + Excel2016 Office365 Business サブスクリプション  バージョン1806(ビルド10228.20080)

■数式で処理する。18年7月9日追記

T.N さん。

先に、ユーザー定義書式を使えばできると書きましたが、数式で処理できます。

「仕事で使うファイルは、できるかぎり誰もがわかりやすく作っておく」という大原則からすると、数式を使ったやり方のほうが、ぱっと見て何をしているかの理解しやすさが少しでも高いと思います。

="会長"&CHAR(10)&VLOOKUP(D5,A2:B3,2,FALSE)

といった数式になります。
セルの書式設定で「配置」タブを開き、「折り返して全体を表示する」にチェックしておくのは同じです。(なお、数式でのやり方のほうも■注意の内容は同じです。)

Hyoujikeishiki_cellnaikaigyou08

CHAR 関数は、使っているコンピュータの文字セットから、引数で指定した番号の文字を返します。

Widowsでの CHAR(10) は、改行コードを返します。

数式を見ると、「文字列・CHAR関数の戻り値・VLOOKUP関数の戻り値の3つのものを、& で結合している」とわかります。

先のやり方だと、「ユーザー定義書式」を知っていて、さらに Ctr + J のショートカットを知っていなければ、何をしているのかを理解できません。

消さなければならないものではないので、前の記事は以下に残しておきますが、誰にでもわかりやすくしておくには、この場合は数式を使うやり方を採ったほうがよいと思います。


T.N さん。

数式で文字列を抜き出してきているセルに、別の文字列をセル内改行の形で付け加えて表示させるやり方がわかりました。ユーザー定義書式を使ってできます。

Hyoujikeishiki_cellnaikaigyou01

1. セルの書式設定で「配置」タブを開き、「折り返して全体を表示する」にチェック
ここのチェックを必ず入れること。

2. 「表示形式」タブで「ユーザー定義」を選択。

3. 「種類」の欄が「G/標準」になっているのを消して、「@」を入力

4. 「@」の左右に表示したい文字列を入力

Hyoujikeishiki_cellnaikaigyou02

5. 入力した文字列と「@」の間にカーソルを置いて、Ctrl+J を押す。
Ctrl+J は改行コードを入れるショートカット。

6. カーソルを置いた位置に改行が入る。
改行マークなどの表示は何も見えない。

Hyoujikeishiki_cellnaikaigyou03

7. 「OK」をクリックすると、手順 4. で入力した文字列がセル内改行で表示される。
(画像では見やすいように中央揃えにしてあります。)

Hyoujikeishiki_cellnaikaigyou01_2


■注意

セルを F2 やダブルクリックで編集モードにしてから Enter キーを押すと、数式が表示されてしまう。

Hyoujikeishiki_cellnaikaigyou04

1. 表示形式で「標準」をいったん選んで OK をクリック。
セル内改行で表示させていた文字列が消えて数式だけが表示される。

Hyoujikeishiki_cellnaikaigyou05

2. セルを編集モードにして Enter キーを押す。
数式が返してくる文字列だけが表示される。

Hyoujikeishiki_cellnaikaigyou06

3. あらためてユーザー定義書式から、セル内改行で表示させる文字列を伴った書式を選ぶ。

Hyoujikeishiki_cellnaikaigyou07

| | コメント (0) | トラックバック (0)

出版元より高い Amazon での価格

新聞で紹介されていておもしろそうだと思った本を、Amazon でさっそく買おうとした。

それで、ふと気づいたのが「Amazon のページで表記されている価格のほうが、新聞の書評欄に載っている価格より高い」こと。

何かの間違いかと思って、出版元のサイトで確認してみた。
そちらに載っている価格は、新聞の書評欄に載っているものと同じだった。

おかしくないか? なんでそうなる。

買おうとしたのは次の2冊。いずれも電子書籍ではなく、紙の本だ。

で、各出版元にあるページがこちら。

前者の場合、出版元では2,052円(税込み)となっているけど、Amazonでは2,779円とかだったりする。後者の場合は、税込みで1,620円なのに、2,397円とかになってるしで。

おいおい。出版元が表示している価格より、高い価格で売ってるってどうなのよ。
僕は出版業界のルールは全くの門外漢なので、業界的にはぜんぜんおかしくないのかもしれないけどね……。

Amazon のサーバーは日本にないから、全然違う価格で売っても問題ないとか?

仮になんだかんだとややこしい大人の事情があるとしてもだ――気づかずに Amazon のボタンをクリックしてたら、数百円とはいえ無駄に高い価格で買ってたということだよな。
いち消費者としては、なんだかなあな気分だぞ。

今までも気づいてなかっただけで、Amazon で紙の本を買ったら、出版元の価格より高く買ってたのか?

どういうからくりに基づく、商習慣的・制度的・法的・論理展開の末の決着なんだろ――。わからんぞ。

'18/6/13追記:
さっき見たら、Amazon のページで両方とも出版元と同じ価格が表示されてた。なんだったんだろ? スクリーンショットを取っておくべきだったかな。

| | コメント (0) | トラックバック (0)

コハダ、覚えてる?

妻と入った回転ずし店。隣にいたカップルの男性の方が、目の前にいるお店の人にかけた言葉。

たしかに、あなたはコハダを注文していたよね。まだ来ないな――と思っても仕方がないくらい時間がかかっていたのかもしれない。

それにしても、「コハダ、覚えてる?」ってなんだろ? しかも、店員さんとはいえ、あきらかに年上だとわかる人に向かって言うには失礼な言い方だなあ。

礼儀ってものがあるだろうに。せめて「コハダ、まだですか?」ぐらいじゃないかと思うのだけど。

だいたい、「覚えてる?」って尋ねることに何の意味があるんだろ?

あなたは早くコハダが欲しい――。その目的を出来るだけ速やかに達成することを考えるなら、(注文が入っていたことを)覚えているかどうかの確認ではなく、コハダがまだ手元に来ていないことを告げるのが、より効果的だろうに。

そういうのを嫌味っていうんだ。

「そうだよ。嫌味を言ったんだよ」と最初からそのつもりだとしたら、いっしょにいる女性のことを思ってあげてほしいぞ。
いつか周りから「"そんな嫌味を平気で言う男" といっしょにいて、それでいいんだ」って思われて、彼女自身の評価を下げるときがくるよ。

というか、もう下がってるかもしれないけど。それも2人そろって。

まあ何にしても、いつでもどこでも、相手が誰であっても、「コハダ、覚えてる?」式の「嫌味による注意喚起」は、やめた方がよいと思うよ。

たとえ嫌味だとかなんだとかいう意識は何にもなくても、そんな尋ね方を受けて、嬉しい人はいないだろうし、「忘れないようにしっかりと覚えておかなくちゃ」なんて意識になるのか? といえばあやしいし。
それを続けていくことで、あなたにプラスになることがあるかというと、たぶん、それも無いだろうなあ。

見知らぬどこかのあなたへ。

他者も嬉しくないし、自分にもプラスにならない。だから、そんな言い方は早くやめなよと、僕としては言いたい。

| | コメント (0) | トラックバック (0)

Excel で2つのシートでセルの値を比較して検算する。

この記事は自分用の覚書です。
(Windows 10 Pro 64ビット + Excel2016 Office365 Business サブスクリプション  バージョン1805(ビルド9330.2087)

N.T さん。

2つのシートでセルの値を比較して検算するプロシージャです。

■課題

  • 1つのブックのなかで隣り合っている2つのシートにそれぞれ表が1つ載っている。それら2つの表の値が全く同じであるかを比較して検算する作業を楽にしたい。
  • ブックのなかのシートは3枚以上になることもある。
  • G列3行目のセルから比較していく。
  • 表の行数・列数はそのときどきで変わる。
  • どのセルの値が違っているかを、ぱっと見てわかるようにしたい。

隣り合っている2枚のシートということでしたので、右側のシートのさらに右に検算用のシートを挿入して処理するようにしました。
(このコードでは、離れたシート同士を比較することはできません)

2つの表で値が異なっているセルがあったら、検算用のシートで該当するセルを赤く塗るようにしました。

最後に、できあがった検算用シートの表示倍率を20%にしてあります。
もらったサンプルがけっこう大きな表だったので、20%で全体を眺めることができたもので。そこに赤いセルがなかったら、2つのシートにある表は全く同じということです。
(表示倍率を変えたいときは、最後の ActiveWindow.Zoom = 20 の行で 20 を変えてください。)

検算用のシートのシート名は、「検算用_左端のシートから数えた枚数」といった書式になります。
シートが2枚だったら、「検算用_3」というシートが右端にできます。

シートが3枚以上になることもあるということですが、比較したいシートをどうやって扱えば比較できるか、私のスキルではわかりませんでした。

幸い、ブックが出来上がった時点では、比較したいシート同士は隣り合って並んでいるということだったので、「比較するシートを左右に並べて、右側のシートを開いていることを確認してからこのプロシージャーを実行する。」ということにさせてください。

スキル不足ですみません。

G列3行目のセルから比較していくとのことでしたので、FOR...NEXTステートメントの繰り返しの初期値は、7 と 3 になっています。
コメントの中にも書いていますが、比較を始めたいセルの位置が変わったら、その部分を合わせて変えてください。

また、表の列数と行数がその都度変わってくるということで、表の最大列数と、最大行数を、それぞれ Cells(5, Columns.Count).End(xlToLeft).Column と Cells(Rows.Count, "G").End(xlUp).Row の部分で取得しています。

Cells(5, Columns.Count) としたのは、値の抜けがないセルが行の右端まで続いているのは5行目以降だったからです。
5 を選んだ理由は特にありません。一番上の行なので 5 としたまでです。

同じ理由で、Cells(Rows.Count, "G").End(xlUp).Row としたのは、空欄でないセルが並んでいるG列を基準にしたかったからです。
空欄でないセルが並んでいれば、どの列でもよいのですが、G列のセルから比較を始めるので、G列を基準にしておくのが自然な書き方かと思います。


Sub 二つシートでセルの値を比較して検算する()
'
'比較する二つのシートが左右に並んでいて、
'右側のシートを開いていることを確認してからこのプロシージャーを実行する。
'
    Dim i As Long
    Dim j As Long
    Dim 検算用シートの位置 As Long

    ActiveSheet.Copy After:=ActiveSheet
    検算用シートの位置 = ActiveSheet.Index '■1

    '■2
    For i = 7 To Worksheets(検算用シートの位置 - 2).Cells(5, Columns.Count).End(xlToLeft).Column
        For j = 3 To Worksheets(検算用シートの位置 - 2).Cells(Rows.Count, "G").End(xlUp).Row
            If Worksheets(検算用シートの位置 - 2).Cells(j, i).Value <> Worksheets(検算用シートの位置 - 1).Cells(j, i).Value Then
                Worksheets(検算用シートの位置).Cells(j, i).Interior.Color = 255
            End If
        Next j
    Next i

    '■3
    With Worksheets(検算用シートの位置)
        .Name = "検算用シート_" & 検算用シートの位置
        .Range("A1").Select
    End With

    ActiveWindow.Zoom = 20
'
'比較する二つのシートが左右に並んでいて、
'右側のシートを開いている状態からこのプロシージャーを実行しているので、
'右側のシートをさらに右にコピーして、検算用のシートとして挿入する。
'この状態で、二つのシートと検算用シートは、セルの値がまったく同じであるはず。
'それを確認するために表の値を比較していく。
'
'■1
'挿入された検算用シートが、一番左端のシートから何枚目にあるかを、整数で取得し、変数 検算用シートの位置 に代入。
'取得した値は、検算用シートの左にある二つのシートの位置を指定するのに使う。
'
'■2
'検算用シートの位置から 2 を引くと、左に2枚目のシートを指定できる。
'1 を引くと左に1枚目(すぐ左となり)のシートを指定できる。
'
'Columnプロパティで、検算用シートから左に2枚目のシート上にある表が何列あるかを取得して、変数 i に代入する値の最終値として使っている。
'表が何列あっても対応できるようにしている。
'G列のセルから値の比較を始めたいので、変数 i の初期値は 7 にしてある。比較を始めたい列が変わったら、7 の部分をそれに合わせる。(G列は7列目)
'列数を数える基準となるセルの行が変わったら、Cells(5, Columns.Count) の 5 の部分をそれに合わせる。
'
'Rowプロパティで、検算用シートから左に2枚目のシート上にある表が何行あるかを取得して、変数 j に代入する値の最終値として使っている。
'表が何行あっても対応できるようにしている。
'3行目のセルから比較を始めたいので、変数 j の初期値を 3 にしてある。比較を始めたい行が変わったら、3 の部分をそれに合わせる。
'行数を数える基準となるセルの列が変わったら、 Cells(Rows.Count, "G") の "G" の部分をそれに合わせる。
'
'検算用シートから左に2枚目のシートと1枚目のシートのセルの値を比較して、同じでなければ、検算用シートの該当セルを赤く塗る。
'セルを赤くすることで、二つのシートの同じセルで値が異なっている(どちらかのシートでセルの値が間違っている)ことがわかるようにしている。
'
'■3
'二つのシートのセルを比較する検算の繰り返しが終わったら、
'検算用シートのシート名を「検算用シート_検算用シートの位置」に変える。
'「検算用シート_3」というようなシート名になる。
'
'検算用シートの全体が見えるように表示倍率を 20% にする。
'シート全体を見渡せるようになるので、赤いセルがあったらわかる。
'
End Sub

| | コメント (0) | トラックバック (0)

«Excel でワークシートのヘッダーやフッターを一括で置換する。