先日、セミナーを受講されている方と、休み時間に雑談していたら「ああ、そういえば、シートの名前に"履歴"って使えないんですね~けっこう実務では使いたい名前なのに、なんで使えないんですかぁ?」と聞かれました。なんとも懐かしい話題です。もちろん私も知っていましたが、でも、すっかり忘れていました。なので「なぜ使えないのか」という理由と、それでもシート名に"履歴"と表示するにはどうするのかという裏技をご紹介します。
この件、ご存じない方もいるでしょうから、まずはやってみましょう。
シート見出しをダブルクリックして"履歴"と入力しました。まだEnterキーは押していません。ここでEnterキーを押すと
こうなります。何となく意味は分かりますが、その理由は釈然としませんよね。"予約語"というのは、よくプログラミング言語で使われる用語です。たとえばVBAであれば、広域変数を宣言するときに使うGlobalという単語は、VBAにとって特別な意味を持つ単語ですから、このGlobalという語を変数名に指定することはできません。
このように、システムやプログラムが内部で使用する特別な単語だから、勝手に使わないでね、っていうのが一般的に"予約語"です。ちなみにVBAでは、予約語のことを"キーワード"などと呼んだりもします。今回、シート名に"履歴"という単語を指定しようとしたら「その"履歴"は予約語だから使えません」と怒られました。ただ、ここで言う"予約語"というのは、VBAなどプログラミング言語で使われているというよりも、単純に「それ、Excelが内部で使う単語です」みたいな意味です。VBAとは関係ありません。実はExcelには、何かの操作をすると、Excelが自動的に「履歴」という名前のシートを作成するという機能が存在します。そのとき、すでに同じ名前の「履歴」シートがあったら困りますので、使用が許されていないんです。ではその、Excelが自動的に「履歴」シートを作成する操作をやってみましょう。
すでに、どこかのフォルダに名前を付けて保存してあるブックを開きます。名前を付けて保存していないと、操作の途中で保存するように促されます。これから行う操作は、現在のExcelでは推奨されていない機能ですので、リボンからは実行できません。まずは、クイックアクセスツールバー(QAT)に必要なボタンを2つ表示します。
ひとつめは「ブックの共有(レガシ)」です。
"レガシ(Legacy)"とは「過去の遺産」みたいな意味の英単語です。要するに「この機能って、今は使わないでね」という意味です。2つめに追加するのは「変更箇所の表示...」です。
準備ができたら、まず1つめの「ブックの共有(レガシ)」をクリックします。実行すると[ブックの共有]ダイアログボックスが表示されますので、「新しい共同編集機能ではなく、以前の共有ブック機能を使用します」チェックボックスをオンにします。
もう、この時点で「あ、この機能使わないで!」というMicrosoftのメッセージが伝わってきますね。今回は、かまわず続けます。[OK]ボタンをクリックすると、上書き保存するという確認が表示されます。
これでブックを「共有ブック」として保存できました。共有ブックというのは、複数のユーザーが1つのブックを同時に編集し、各ユーザーが行った編集内容を、いつ、誰が、どこに何をしたか、という情報として記録し、任意の時点まで戻せるという機能です。それだけ聞くと、何やら便利機能のように感じるかもしれませんが、この「共有ブック」という仕組みがExcelに実装されたのは1990年代中頃のこと。まだ、普通のユーザーはインターネットの存在も知らず、これから企業内にLANが導入されるだろうな~という時期です。これからは、このように複数のユーザーが1つのファイルを同時に編集する時代が来るだろうな~来たらいいな~という希望も含めて実装されました。もちろん、クラウドなど存在せず、共有フォルダすら一般的ではなかった頃です。本来、1つのファイルを複数人が同時編集して、それぞれの情報を適切に管理するのはサーバーの仕事です。Excelのようなアプリケーションが単体で行える作業ではありません。それでもMicrosoftは、あえて「共有ブック」という機能を追加しました。その後、長い年月を経て、Excelの機能も劇的に進化し、Excelを取り巻く環境も大きく変化しました。その過程で、Excelには多くの新機能が追加され続けたのですが、どうにもこの「共有ブック」という仕組みが足を引っ張ります。新しい仕組みや機能をExcelに実装しようとすると「あ、やべ!これ、ブックが共有されてると矛盾しちゃうわ!そこ回避するのって、かなり面倒じゃね?つーか無理?」みたいなことが増えてきて、新機能の中には「ただし、共有ブックを除く」というのも珍しくありません。たとえば、共有ブックではVBAのコードを編集できません。
あまりにも時代を先取りしすぎた機能が「共有ブック」です。Excelの黒歴史だと私は感じています。ああ、ちなみに、私(だけじゃありませんけど)の経験では、「共有ブック」にすると、かなりの高確率でブックが壊れて開けなくなります。そもそも実装に無理のある黒歴史機能ですから、それもやむを得ませんよね。余談ですが、現在のようにクラウドが発達した時代でしたら、1つのブックを複数人が同時編集することも可能です。Excelには新しく「共同編集」という機能が実装されました。これを使えば、何も問題なく、Googleスプレッドシートのように同時編集が可能になります。詳しくは下記ページをご覧ください。
さて、話を戻しましょう。なぜ「履歴」という語をシート名に指定できないのかです。先の手順で「共有ブック」として保存したら、任意のセルを編集して上書き保存します。
QATに追加した2つめの「変更箇所の表示」を実行すると、次のようなダイアログボックスが開きます。
最後の[新しいシートに変更箇所の一覧を作成する]チェックボックスをオンにして[OK]ボタンをクリックすると、
[履歴]という名前の新しいワークシートが追加されます。内容はこんな感じです。
このときExcelが[履歴]シートを作成するので、ユーザーには"履歴"というシート名が許されていないんです。まぁ、仕組み的に言ったら、こんなの回避するのは簡単です。天下のMicrosoftが、対応できないなんてあり得ないです。これ、回避できないんじゃなくて、回避しようという気がなかったのでしょう。ユーザーが不便に感じる、という点が軽視されたのでしょうね。90年代って、そういう時代でした。まぁ、いずれにしても、このように、シート名に"履歴"という語は指定できないということです。
もし「どーしてもシート名に"履歴"と表示したい!そうでないと業務に支障が出る!」という方のために、苦肉の策をご紹介します。ただし、先に申し上げておきますが、これからご紹介する方法は「シートの名前に"履歴"という文字列を指定する」ということではありませんよ。それはできないのですから。あくまで「シート名に"履歴"と表示する」方法です。
これは、思考が柔軟な人でしたら誰でも思いつく"発想の転換"です。下図をご覧ください。
ちゃんとシート名に「履歴」と表示されています。こうして1枚だけシートが存在している状態なら、何も違和感がないでしょう。では隣に、似ている文字で「学歴」というシートを並べてみます。
縦に並べた方が分かりやすいかな?
いかがですか?よ~く見ると「履歴」の後ろが、少しだけ広く感じませんか?そう、実はこれ「履歴」ではなく「履歴 」です。"履歴"の後ろに半角スペースを1つ入れました。「履歴1」と「履歴2」は別の文字列です。同じように「履歴」と「履歴 」も別の文字です。だって「履歴 」は3文字ですから。Excelで「履歴」シートは作れませんが「履歴 」シートなら作れます。もちろん、同じ発想で「履 歴」や「 履歴」も可能です。
実はもうひとつ裏技があります。いや、正確にはありましたです。以前から知っていて、私自身もときどき使っていた方法なのですが、本稿を書くにあたって、あらためて確認したら期待する結果になりませんでした。なので、今後は使えなくなると思われますが、私のように愛用している人がいるかもしれませんので、注意喚起の意味で書いておきます。それは「シート見出しの文字列内で改行する」というテクニックです。まずは、この方法が使えた古いExcel 2013の画面で解説します。
上図のシート名は「東京都千代田区」です。しかし実際には、"東京都"と"千代田区"の間に改行コードを入力しています。改行コードを入力するには、Ctrl + Jを押します。なぜ、Ctrl + Jで改行コードが入力されるのかについては、長くなるので割愛します。気になる方は次の動画をご覧ください。改行コードに関して詳しく解説しています。
さて、上図の「東京都千代田区」ですが、途中に改行コードを入力したにもかかわらず、普通に表示されています。な~んだ、意味ないじゃん!と落胆するのは早計です。実はシート見出しの改行って、それをヘッダーやフッターに指定するとき有効になります。
印刷時のヘッダーやフッターにシート名を指定したとき、それが自動的に改行されるという、一発芸的な古典的テクニックです。そして、ここで注目したいのは、シート見出しの中では改行コードが無視されるということです。したがって「履歴<Ctrl + J>」のように入力すれば、シート見出しに「履歴」と表示できるわけです。
ということで、それほど機会は多くありませんが、どうしても「履歴」シートを作りたいとき、私はこうしていました。ところが!現在私が使っているExcelで試してみたら、予期しない結果になりました。ちなみに私が使っているExcelは"Insider Program"という、いわばベータ版でバージョンは2209です。実際にお見せします。上記と同じように、シート見出しに「東京都<Ctrl + J>千代田区」と入力しました。
な、なんと!シート見出しの中で改行されてしまうではありませんか。さらに、「履歴<Ctrl + J>」って入力すると、こうなります。
Excel 2013では、シート見出しに直接<Ctrl + J>で改行コードを入力できましたが、今のExcelでは却下されます。まぁ、シート見出しの直接入力で改行コードが却下されるのは、Excel 2016からの仕様なので知ってましたけど。なので、私はいつもVBAを使っていました。
Activesheet.Name = "履歴" & vbLf
あるいはVBAでしたら、今のExcelでは使われていない[シート名の変更]ダイアログボックスを表示して、ここに入力するという手もあります。このダイアログボックスでシート名を編集するときは、改行コードが除去されません。ちなみに私は、このダイアログボックスにショートカットキーを割り当てて愛用しています。
シート見出しを直接編集できるようになったのは、記憶では確かExcel 97からです。それ以前の、Excel 5.0/95では直接編集ができず、このダイアログボックスを使っていました。現在のExcelでは、この[シート名の編集]ダイアログボックスを表示するコマンドが存在しないので、いずれにしてもVBAが必須です。さて、このようにVBAを使って改行コードを挿入すると、次のようになります。
これは期待する結果ではありません。なお、Insider Programではなく、永続ライセンス版のExcel 2016では従来どおりの動作です。
Insider Programはベータ版のようなものですから、まだ確定ではありません。新機能として実装されたものの、製品版には採用されなかった機能もあります。なので、まだ何とも言えませんが、おそらく今後のExcelでは「改行コードを利用して"履歴"と表示する」方法は、使えなくなるのではないかと思います。もし、私のようなことをしている人は、今のうちから覚悟しといてください。