オフィス・ブールは、Excel全般について皆さまのお仕事をサポートします。
|
|
VBA編へ
●複数の条件を設定したいとき
|
SUMIF、COUNTIF関数は、条件にあったものだけを集計したり、
件数を数えたりする場合に非常に便利な関数ですが、ちょっと
よくばって2つ以上の条件で集計しようとすると、とたんに困って
しまいます。
それは、これらの関数が2つ以上の条件に対応できないことに起因します。
そんなとき、「配列数式」を用いるとうまく処理できます。
例えば、以下のような場合を考えます。
ここで、A列が 女、B列が 20以上 のデータ件数を求めたいとします。
その場合、いったん結果を表示させたいセルをクリックしておいてから、
上部の数式バーに、=SUM(IF(A2:A8="女",IF(B2:B8>=20,1,0))) と入力し、
[Shift]+[Ctrl]+[Enter] で確定します。
以上のようにして式を確定すると、表示は{=SUM(IF(A2:A8="女",IF(B2:B8>=20,1,0)))}
と変化します。 式の両側に{}(中かっこ)がつくことで配列数式になったことが確認できます。
そして結果を求めるセルには 2 と表示され、該当件数は2件であることがわかります。
IF関数は、ご承知のように記述部分が3つのパートに分かれていて、最初の部分に条件式を記入し、
次の部分は条件が満たされたときの処理を、最後の部分は条件に合わなかった場合の処理を記述します。
したがって、2つのIF関数の条件にあった場合は数値の1が返され、条件に合わないセルには0が入りますので、それをSUM関数で合計することでカウントと同じ結果を得る仕組みに
なっています。
また、合計値を求める場合は、1 の変わりにB列の範囲を指定します。
例 {=SUM(IF(A2:A8="女",IF(B2:B8>=20,B2:B8,0)))}
このようなことは、オートフィルタやフィルタオプションでもできなくはないですが、
毎回複数の操作が必要だったり、別な場所に条件設定のためのエリアが必要だったりと
すっきりいきません。
|
●関数の範囲指定をしたくないとき
|
計算式や関数で、参照データの範囲指定をしなければいけないとき、
「あとでデータが増えるかもしれないな」と思うことがありませんか?
そんなとき、現在のデータで範囲指定をしてしまうと、データの追加があるたびに
範囲指定をやり直さなければいけなくなってしまいます。(途中に挿入する場合は問題ありませんが)
こういう場合、セル番地ではなく列名だけを範囲として与えてやることで
その後のデータ追加に対応できることがあります。
例えば、A列のA1からA8にデータが入っており、それにたいしてMAX関数で
最大値を求めなければいけないようなとき、通常は=MAX(A1:A8)とします。
この場合は、もしデータがA9に追加されると、その都度に範囲を
=MAX(A1:A9)と書き換えてやらなければいけなくなります。
そこで、=MAX(A:A)のように列名だけを範囲情報として与えてやると、データがたびたび
最後に追加されても問題なく計算してくれるようになります。
ただし、計算式および関数はA列以外の場所に入れる必要があります。
|
●一行おきに計算をさせたいとき
|
一行おきに入力された「後期得点」だけを合計するとします。
「後期得点」について、
シートの行番号を基準に見ていくと、3行目、5行目、7行目・・・のように、奇数の行ごとに
入力されています。ということは、得点が入ったセルの行番号を調べ、奇数なら得点の値を
別セルに取り出し、それを足し合わせれば「後期得点」を求めることができることがわかります。
そこで、まずROW関数を使ってセルの行番号を調べます。「=ROW()」という式を入力すると、その式が
入力されているセルの行番号がわかります。
行番号が奇数かどうか調べるには、行番号を「2」で割って余りを求め、これが「1」なら
奇数と判定します。ある数値を「2で割った余り」を調べるには、MOD関数を使い、
「MOD(ROW(),2)」という式を組み立てると判定できます。
こうして求めた値が「1」なら、D列に数値を取り出し、「1以外」なら空欄とします。
場合分けには、IF関数を使います。D3セルの式では、「条件式」を「MOD(ROW(),2)=1」
(行番号を2で割った余りが1である)とし、1のときB3セルの内容をD3に、1でないとき空欄""を
D3に出力するようにしています。こうして取り出したD列の得点をSUM関数で合計すれば完成です。
どうしても別の列を使いたくなければ「複数の条件を設定したいとき」で紹介した配列数式を用います。
以下のように数式を入力し、Ctrlキーと Shiftキーを押しながら Enterキーを押します。
=SUM(IF(MOD(ROW(B2:B9),2)=1,B2:B9))
↓
{=SUM(IF(MOD(ROW(B2:B9),2)=1,B2:B9))}
式の両側に{ }(中かっこ)がつくことで配列数式になったことが確認できます。
この式の意味は、まずB2からB9の行番号をROW関数で取り出し、それぞれを2で割った余りを求めていきます。
余りが1かどうかをIF関数で判定し、1のセルのみをSUM関数で合計することで求めたい結果がでます。
|
●計算式がエラーになる場合を回避したいとき
|
よく割り算の式を立てていて、分母に当たるセルの値がたまたま0になったとき、エラーになって
しまうことがあります。この場合のように0のときには空欄、もしくは別な表示をさせたいとき、
ISERROR関数が便利です。
ISERROR関数は、引数(カッコの中)に指定した計算式にエラーがないかどうか調べる時に使うもので、
IF 関数といっしょに使えます。
例えば、計算結果がエラーであれば空白を表示し、エラーでなければ計算結果を表示したいという場合には、
以下のような式を立てることになります。
=IF(ISERROR(計算式),"",計算式)
例で示すと、
上の図で、そのままA列をB列の値で割っていくと、4行目と7行目で「#DIV/0!」のエラーになってしまいます。このとき
=IF(ISERROR(A2/B2),"",A2/B2)という式にすることで、エラーになることを回避することができます。
これは、ISERROR(A2/B2)関数の実行結果がエラーである場合、TRUE(真)の戻り値が返ってくるので、IF関数の
左側の部分("")が実行され、エラーで無い場合は右側の部分(A2/B2)が実行されるためです。
|
●入力した計算式を他人にいじられたくないとき
|
作成したExcelの表を、自分ではなく他の人に使ってもらわなければいけないとき、せっかく入力した計算式を
誤って消されてしまわないか、不安なときがあります。このようなとき、特定のセルにだけ保護をかけることができます。
以下の順で操作を行ってみてください。
●まず、すべてのセルのロックを解除。
(ワークシートの初期設定では、すべてのセルに[保護]の[ロック]がかかっています。)
(1)[全セル選択] ボタン(ワークシートの行番号と列番号が交差している部分)をクリック。
すべてのセルが選択される。
(2)メニューの [書式(O)]−[セル(E)] をクリックし、[保護] タブをクリック。
(3)[ロック(T)] チェック ボックスをオフにする。
(4)[OK]ボタンをクリック。
●次に数式が入力されているセルを選択。
(1)メニューの [編集(E)]−[ジャンプ(G)] をクリック。
[ジャンプ]ダイアログボックスが表示される。
(2)[セル選択(S)]ボタンをクリック。
(3)[選択オプション]で[数式(F)]を選択し、[OK]ボタンをクリック。
これで数式の入力されているセルすべてが選択される。
●最後に選択されているセル範囲にロックを設定する。
(1)メニューの [書式(O)]−[セル(E)] をクリックし、[保護] タブをクリック。
(2)[ロック(T)] チェック ボックスをオンにする。
(3)[OK]ボタンをクリック。
(4)メニューの [ツール(T)]−[保護(P)] をポイントし、[シートの保護(P)] をクリック。
(5)他のユーザーが保護を解除できないようにするには、[シート保護]ダイアログボックスの[パスワード]テキストボックスにパスワードを入
力し、[OK] をクリックして [パスワードの確認(R)] ダイアログボックスにもう一度パスワードを入力。
(6)[OK]ボタンをクリック。
パスワードでは、大文字と小文字が区別されるので、大文字と小文字を区別
し、指定したパスワードを正確に入力する。
以上で、本人以外誰も計算式を変更することができなくなります。
|
●「ワイルドカード」を使った検索条件の指定(COUNTIF関数)
|
表の中の「長崎支店」と「佐世保支店」という単語の存在するセルの件数をカウントしたいといように、一度に2つの検索条件で
検索する場合、COUNTIF 関数では1つの検索条件しか指定できません。
このようなとき、ワイルドカードを使うとCOUNTIF 関数でも数えることが出来ます。(もちろんDCOUNT 関数でもできますが)
「ワイルドカード」は、あいまいな検索条件を指定する場合に使うもので、記号は「*(アスタリスク)」と「?」の 2 種類です。「?」は文字数を制限します。
例)*支店* → 支店という文字を含むもの
支店* → 支店という文字で始まるもの
*支店 → 支店という文字で終わるもの
支店?? → 支店の後に 2 文字続くもの
例えば「長崎支店」と「佐世保支店」のセルの個数を数えたい場合は、検索条件を「*支店」とします。
=COUNTIF(A1:A100,"*支店")・・・・こんな感じです。いかがでしょうか。
|
●VBAで、セル内容を数式から値へ変換する最も簡単な方法
|
セルに数式が入っていて、そのセルの値のみが必要であり、その式が参照しているセル自体は
あとで不要になることがあります。 でも、そんな場合でも参照先のセルを削除するわけにはいかないですよね。削除してしまったら、
参照先が不明となりエラーが表示されてしまいます。
そんなときワークシート上での作業であれば、数式の入ったセルを別なセルへコピーして、貼り付け
をする際にメニュー「ファイル」から「形式を選択して貼り付け」を選択することで、値のみを貼り付けを
実行することができます。 しかし操作が面倒であったり、場合によってはメニューに「形式を選択して貼り付け」が見つからないこと
があったりします。
またマクロやVBAを使ってコードで記述する際も、「マクロ記録」を使うと以下のような長いコードが記録されてしまい、
分かりにくいものになります。
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
こういう場合は、次のように記述することで簡単にムダな操作なく数式から値への変更が実行できます。
Selection = Selection.Value
また、次のような書き方もできます。状況によって使い分けてください。
Range("A1") = Range("A1").Value
Cells(1, 1) = Cells(1, 1).Value
(ただし動作は Windows Me + Excel 2000で確認しています)
|
●数字の末尾が"000"のデータだけを抽出したいとき
|
数値である限り、オートフィルタで、末尾が"000"を抽出することはできません。表示形式を [文字列] にしても、うまくいかないでしょう。
こういう場合は、作業列を1つ追加して、完全な[文字列]の列を作成します 。
例では、A列に対象となる数字が格納されていて、B列に作業用の列を設けることとします。
(1) セル B1 に =TEXT(A1,"@") という式を入力します。
(2) セル B1 の内容をA列の数字が格納されている行数分だけ、下の行にコピーします。
これで、列 B は文字列の数字に変換されたので、オートフィルタの (オプション...)で、[ 000 ] [ で終わる ] にして、[OK] ボタンをクリックすれば、抽出できます。
|
●8桁の数字を日付形式に変換する方法
|
ときどき20021122 のように数字で入力してあるセル内容を2002/11/22 形式の日付に変換したいときがあります。
このようなとき、次の方法を知っていると便利です。
ここでは「DATEVALUE関数」を用いる方法と「区切り位置指定ウィザード」を利用する方法を紹介します。
【DATEVALUE関数を用いる方法】
この方法では、対象セルそのものの値を変換するのではなく、別なセルに変換後のデータを作成することになります。
セル A1 に 20021121 という数値が入力されているとき、任意のセルに、
=DATEVALUE(LEFT(A1,4)&"/"&MID(A1,5,2)&"/"&RIGHT(A1,2))
という式を入力します。
しかし、そのままでは日付連番として表示されているので、次の操作で
日付で表示されるように設定を変える必要があります。
(1) メニューの [書式(O)]→[セル(E)...] で、"セルの書式設定"ダイアログボックスを表示。
(2) [表示形式] タブの [分類(C):] リストボックスで、[日付] をクリックし、[種類(T):] リストボックスで、[1997/3/4]をクリック。
(3) [OK] ボタンをクリックし、ダイアログボックスを閉じる。(Excel2000の場合)
以上で完了です。
【「区切り位置」を使う方法】
「区切り位置」を指定してやることで、直接に対象セルを日付として扱うことができるようになります。
(1) メニューの [データ(D)]→[区切り位置(E)...] で、"区切り位置指定ウィザード"を起動。
(2) ウィザード画面の [1/3] と [2/3] の画面はスキップする( [次へ >] ボタンを押す)。
(3) ウィザード画面の [3/3] の画面で[列のデータ形式] の [日付(D):] を選択する。(コンボボックスは [YMD] のまま)
(4) [完了(F)] ボタンをクリックし、ウィザードを終了。
以上で完了です。
元のデータを、そのまま残しておきたいかどうかで使い分ければよいと思います。
|
●AND条件で判定をさせたいとき
|
IF関数を使って条件を判断することはよくありますが、2つ以上の条件が重なるととたんに面倒なことになります。
例えば次に示すような合否判定用の表があり、その結果をIF関数を使って行う場合を考えて見ます。
「国語」の点数が50点以上の者を”合格”とするには、=IF(50<=A2,"合格","不合格")と記述することは皆さんおわかりだと思います。
これが「国語」と「数学」の両方の得点が50点以上のときと2つの条件を設定しなければならなくなると、とたんに難しくなります。
方法としては2通りあり、1つはそのままIF関数を入れ子状態(ネスティング)にしていく方法です。
例)=IF(50<=A2,IF(50<=B2,"合格","不合格"),"不合格")
この方法では非常に計算式が見にくいものとなり、条件が3つ以上重なった場合、バグの原因にもなりかねません。
そこでおすすめは論理積を利用する方法です。いわゆるANDで条件を列挙していく方法です。
例)=IF(AND(50<=A2,50<=B2),"合格","不合格")
この式ではまずAND(50<=A2,50<=B2)の部分を判定し、条件を満たしていればTRUE、そうでなければFALSEが返されますのでIF関数から見れば1つの条件式のように見えます。
この方法ではAND(条件1,条件2,・・・)のかっこの中に条件を並べて記述するだけですので見やすく、いくつでも(30個まで)並べて書くことが出来ます。
同様にOR(論理和)も設定できます。
|
●フィルタで抽出したデータ件数を表示させたいとき
|
オートフィルタで抽出したデータが何件であるかを、表示させたいときがあります。COUNTA関数では
すべてのデータ件数を数えてしまうので、ここではそのまま使えません。
このようなときはSUBTOTAL関数を使うと便利です。SUBTOTAL関数はリストまたはデータベースの集計値を返す
関数で、いくつかの集計方法が選択できます。詳しくはExcelのヘルプを参照してください。
書式はSUBTOTAL(集計方法, 範囲1, 範囲2, ...)という形式で指定します。
例を示して見ましょう。
A列に県名が、B列にランクが7件入力されているとします。オートフィルタ機能を使うことで簡単にランクごとの
抽出を行うことができますが、データ件数が非常に多いときなど、同時にデータ件数も表示させたい時があります。
このようなときは、件数を表示させたい場所に次の式を入力します。
=SUBTOTAL(3,B2:B8)
集計方法で3を指定しているのは、抽出リスト内でCOUNTA 関数を利用することを表します。範囲はデータ全体の
範囲を指定します。こうすることで抽出したデータの件数をいつでも表示させることができます。
|
●氏名、住所等にふりがなを振るとき
|
ふりがなを表示したいセルにPHONETIC 関数を使用すると、自動的にふりがなが表示されます。(初期モードはカタカナ)
例えばセル番地A2に氏名が”田中”と「入力されており、その読みをA1に表示させたいのであれば、A1に=PHONETIC(A2)と入力する
ことでA1に”タナカ”と表示させることが出来ます。
カタカナでの表示がいやならば次の手順でひらがな表示に変えることが出来ます。
【ふりがな表示の変更手順】
(1) フリガナを表示させる漢字の部分を範囲選択
(2) [書式(O)]-[ふりがな(T)]-[設定(T)]
(3) [ふりがなの設定]ダイアログボックス表示
(4) [ふりがな]タブを選択
(5) [種類]セクションの[ひらがな(H)]のラジオボタンをクリック
(6) [OK]でダイアログボックスを閉じる
以上でカタカナ表示からひらがな表示に変更されます。
ただしあくまでも漢字で入力したときの読みをそのまま表示させることになるので、正しい読みになっているとは限りません。
例)忠義(ただよし)を”ちゅうぎ”の読みで変換する
このような場合に、A1のふりがなをただしい読みに修正したいのであれば、 文字列に確定させたほうが便利です。
PHONETIC関数を削除してもかまわない場合は、修正したいセルを選択し、 コピーをして、そのままもとの場所に「形式を選択して貼り付け」を実行します。
その際に、「値のみ」の項目を選んでおくとそのまま関数が文字列に置き換わります。
その後で通常の文字の修正を行えば完了です。
関数を残しておきたいのであれば、貼り付け先を別なセルにしてあげればよいでしょう。
|
●日付入力で曜日までを自動表示させたいとき
|
日付を入力する時に、曜日までが自動で表示されればいいなと思うことがあります。
そんなときセルの書式設定でユーザ定義を利用すると、簡単に曜日が表示できるようになります。
方法は、まず日付を表示したいセルに例えば2003/1/1(どんな日付でもよい)と入力します。
すると自動的にセルの書式が”1997/3/4”と設定されます(セルの書式設定で確認)。 このままでは曜日は表示されませんので、
日付の入ったセルを右クリックし、セルの書式設定を選択します。
表示形式タブの左側にある「分類」リストの最下段に「ユーザ定義」がありますので、それを選択します。
すると右側「種類」のテキストボックスに”yyyy/m/d”の書式が表示されます。
この書式を次のように変えることで曜日まで表示されるようになります。
yyyy/m/d"("aaa")"→2003/1/1(水)と表示
また、別なセルに曜日だけを表示させるには、(例えばA1に日付を入れてB1にその曜日のみを表示させる)
以下のようにTEXT関数を利用することで実現できます。
例)B1に=TEXT(A1,"aaa")と入力すると、B1のセルに曜日だけが表示される。
|
●「Alt」+「Enter」キーで改行した複数のデータを元に戻したいとき
|
2,3個のセルであればそのセルの中身を表示させて、「Alt」+「Enter」キーを押した位置(改行コードが存在している場所)にカーソルを移動して、
「Del」キーを押して改行コードを削除すれば、元に戻すことができます。※改行コードは目に見えません
しかしそういうセルがたくさんある場合は、もっと別な方法をお勧めします。
1)置換機能を用いて改行コードを削除
メニューの[編集(E)]→[置換(E)]でダイアログボックスを表示して、[検索する文字列(N)]に[Ctrl]キーを押しながら[J]キーを押して入力します。画面上は何も変わりません。
[置換後の文字列(E)]には何もせず、[置換(R)]ボタンまたは、[すべて置換(A)]ボタンをクリックします。
「Ctrl」+「J」の代わりに「Alt」+「Enter」キーでも同じ結果になりました。
2)CLEAN関数を使って印刷できない文字を文字列から削除する。
ヘルプを見ると、「CLEAN 関数は、他のアプリケーションで作成されたデータの中に、使用しているシステムでは印刷できない文字が含まれているときなどに使います。たとえば、CLEAN 関数を利用して、データ ファイルの先頭や末尾に含まれている印刷できない制御コードを削除することができます。」
とあります。
これを利用して別なセルに文字列のみの情報を転記します。
改行コードはこの「印刷できない文字」(制御コード)に含まれるので、転記先のセルに=CLEAN(元のセル番地)と入力し、実行します。
すると文字列のみが転記され、改行のないデータを得ることが出来ます。後はこの式をコピーして使えば、複数のデータも一回の処理で済ませることが出来ます。
|
●メールアドレスの自動リンクを解除したいとき
|
Excelではメールアドレスを入力したときに、そのメールアドレスへのリンクが自動的に張られてしまいます。それで他の作業中うっかりそのリンクをクリックしてメーラーを起動してしまったことがある人は案外多いのではないでしょうか。
通常の解除方法としては、アドレス上で右クリック→「ハイパーリンク」→「ハイパーリンクの削除」で1つずつ解除していきますが(設定直後に「Ctrl」+「Z」キーで解除という手もあり)、2度手間の感はまぬがれません。
どうせなら最初からリンクを張らせないようにしたい、ということならアドレスを入力する際に、先頭にシングルクォーテーション「'」を付けて入力することをお勧めします。
これなら完全な文字列として認識するので、リンクがつきません。
また、Excel2002の場合は、メニューバーから「ツール(T)」→「オートコレクトのオプション(A)」を開いて「入力オートフォーマット」タブの「インターネットとネットワークのアドレスをハイパーリンクに変更する」のチェックを外して下さい。
これで自動的に入力させない機能の設定は完了です。
|
●セル中の文字列を均等割付けしたいとき
|
セルの中の文字を均等割付したいとき、よく文字と文字の間にスペースを入れて均等に配置しようと
することがありますが、なかなかバランスよくいきません。
せっかくExcelにも均等割付の機能が付いていますので、これを使った方が簡単でしかも見栄えよく
均等割付ができます。
まず均等割付したいセルを選択し、メニューの [書式(O)]→[セル(E.]→[配置] タブを開きます。
[文字の配置] で [横位置(H)] 欄の▼ボタンをクリックしてドロップダウンリストを表示し、[均等割り付け] を選択します。
これできれいに文字が揃えられます。
|
●セルを結合せずに文字をセンタリングしたいとき
|
他の操作との兼ね合いで、どうしてもセルを結合させたくないときがあります。そんなとき、複数のセルにまたがるようにして
文字を中央に表示したい場合はどうしたらよいでしょう?
文字の左側にスペースキーで空白を埋めていき、適当な位置で文字を入力するという方法もあります。しかし一発で中央を
探し当てるのが難しく、何回も試行錯誤しなくてはなりません。
そんなときセルの書式設定を利用すれば便利です。手順は、
1)文字が入ったセルから中央揃えしたい範囲までのセルを選択しておきます。
2)メニューバーから「書式」→「セル」と選び、「配置」タブを表示させます。
3)「横位置」リストから”選択範囲内で中央”を選び、OKを押します。
これでセルを結合せずに、文字を複数セルにまたがった位置の中央に表示させることが出来ます。
|
●ブック間でリンクを張りたいとき
|
複数のブックをリンクさせて参照元ブックの内容を更新すると、自動的に参照先のブックもそれに連動して値が変化するようにしたいときがあります。
ではどのようにすれば設定できるのでしょうか。2つのブックをリンクさせる場合で説明します。
まず同時に2つのブックを開き、両ウィンドウを画面に並べます。並べ方はメニューバーの「ウィンドウ」→「整列」で整列方法を指定します。
参照元のシートをアクティブにして、リンクさせたいセルをコピーします。
次に参照先のシートをアクティブにして、コピー先のセルを選択します。
メニューバーより「編集」→「形式を選択して貼り付け」を選び、一番下の「リンク貼り付け」ボタンをクリックします。すると数式バーに次の式(外部参照式)が表示されます。
='[ブック名.xls]ワークシート名'!セル番地
ただし参照元のブックが開かれていないときは、ドライブ名からのフルパスが表示されます。これは自動的にブックが置かれている環境によって変化するので、あまり気にする必要はありません。
すべての作業が終わったら、いったん参照先ブック(ファイル)を保存します。
次回に参照先ブックを開く際は、「開いているブックには、ほかのファイルへの自動リンクが設定されています。このブックを更新し、他のブックの変更を反映しますか?」というメッセージが表示されますので「はい」で応答します。
これで常に2つのブック(ファイル)は連動することになります。
|
●印刷に条件が付くとき
|
表を印刷する際に、元の表をいじらずにある条件をつけて印刷したいときがありませんか?
そんなときは「ファイル」→「印刷プレビュー」→「設定ボタン」→「シート」タブと選んで、目的の印刷項目のチェックボックスにチェックを入れることで実現できるものが結構あります。
□枠線……セルの境界線も印刷する
□白黒印刷……セルや枠に色をつけてある場合に、その色を印刷させない
□簡易印刷……表を罫線なしで印刷する
□行列番号……行列番号を付けて印刷する
また「改ページプレビュー」で、印刷範囲を境界線をドラッグして変更することも簡単にできます。
|
●ブックを他人に見られたくないとき
|
ブックを他人に読まれたくないときは、パスワードをかけて保存することが出来ます。
ブックにパスワードをかけると、ブックを開く際に必ずパスワード入力を要求され、パスワードを知らないと開くことが出来なくなります。
ただしパスワードを設定しても、ファイルの削除は誰でもできてしまいますので、ファイルのロックとは異なります。
手順は次の通りです
「ファイル」→「名前を付けて保存」→ダイアログの右上「ツール」→「全般オプション」ダイアログで「読み取りパスワード」欄が表示されるので、パスワードを入力します。
その際、設定したパスワードは、必ずメモなどに書き留めておいてください。(作成した本人も開けなくなります)
また、パスワードでは大文字と小文字が区別されますので注意して入力してください。
パスワードの文字数は、半角英数で15文字までです。(全角文字でもできますが、警告メッセージがでます)
最後に、[パスワードをもう一度入力してください] ボックスにもう一度パスワードを入力し、[OK] をクリックして[保存]すれば完了です。
さらにパスワード設定画面で、「読み取り専用を推奨する」にチェックを入れると、ブックオープン時に以下の警告メッセージが表示されるようになります。
"○○を変更し、保存する必要がなければ読み取り専用で開いてください。読み取り専用で開きますか?"
「はい」で応答すると、ファイルを誤って更新することもなくなります。
|
●表示されているセルのみのコピーしたいとき
|
オートフィルタなどでデータを抽出したあと、そのデータだけをコピーしようと思っても画面に表示されていないデータまで
一緒にコピーされてしまいます。
こういう場合はコピーしたい範囲を選択した後、「編集」→「ジャンプ」で下段の「セル選択」ボタンを押し、現れた選択オプション画面で「可視セル」にチェックを入れます。
この状態でコピー&貼り付けを行うと、抽出したデータのみをコピーすることができます。
|
●セル幅の異なる表を上下に並べたいとき
|
セル幅が異なる表を上下に並べたくても、上の表で規定しているセル幅のために下の表が
うまく作成できないことがあります。
そのようなときは無理にセル幅をいじるよりも、別シートに2つ目の表を作成しておき、
図としてその表を張る付けるときれいに並べられます。
まず別シートに表を作成しコピーします。
次に貼り付けたいシート上で「Shift」キーを押しながら「編集」を選択し、「図の貼り付け」
または「図のリンク貼り付け」で表を貼り付けます。
こうすると、もとのセル幅にとらわれずに表を上下に並べることが
できます。
「図のリンク貼り付け」で貼り付けると、コピー元の表を修正した場合、その結果もそのまま反映
されて便利です。
|
●シート上のすべてのオブジェクトを選択したいとき
|
ワークシートにオートシェイプなどのオブジェクトを複数配置し、後でその位置をずらす必要が出てきたとき、
一括してオブジェクトを選択できたら便利です。
そういう場合は「編集」→「ジャンプ」でダイアログボックスが表示されるので、下段にある「セル選択」ボタンを押してオブジェクト項目を選択すると、一気に
すべてのオブジェクトが選択できます。
|
●楽して何度も同じデータを入力したいとき
|
同じデータをキーボードから再入力せずに入力する方法は3通りあります。
1つは「リスト」から入力するやり方で、入力したいセルを選択後、「データ」→「入力規則」で「入力値の種類」欄を「リスト」と指定します。
「元の値」欄には、リストの項目にしたいデータを「,」(カンマ)で区切って入力すればOKです。
または既にリストにしたいデータがシート上にあるならば、そのセル番地を指定すれば同じようにリスト表示されます。
ただし、そのリストデータが別シートに作られている場合は、データに範囲名をつけておく必要があります。(そのままでは指定できません)
付け方は、リストデータすべてを選択した状態で、シート左上にある名前ボックスに適当な名前を入力します。
こうした上で「元の値」欄で、「=」を付けて範囲名を入力すれば同様の設定ができます。
2つ目は、セルを選択後「Alt」+「↓」を同時に押して、今まで入力したデータをリスト表示させます。この場合は「入力規則」の設定は必要ありません。
これなら、上下の矢印キーでデータを選択し、「Enter」キーを押すだけで済みます。(リストは重複しないデータが五十音順に並んでいます)
3つ目は、入力直後に「Ctrl」+「D」で、再度同じデータを呼び出す方法です。
状況に応じて使い分ければ、入力速度がかなり向上しますよ。
|
●グラフ作成後に元データの一部を非表示にしたいとき
|
グラフの元になる表を後から非表示にすると、標準ではグラフ内のデータも消えてしまいます。
元データを非表示にした後も、グラフだけは以前と同じように表示させたいときは、グラフの枠(グラフエリア)を選択した状態で「ツール」→「オプション」を選びます。
次に「グラフ」タブを選択、「可視セルのみプロットする」のチェックボックスをオフにします。
|
●作業中に「メモリ不足」が表示されるとき
|
ワークシート上におおきなデータを展開していると、「メモリ不足」のメッセージが表示される場合があります。
このようなときは、次のことに注意してデータを入力することで、ファイルサイズが縮小され、パソコンのメモリを効率よく使用できるようになります。
- 1.必要最小限の長方形内に入力する
- データ入力は必要最小限の長方形のセル範囲に入力するようにします。なるべく範囲内に空欄のセルが含まれないようにします。
表の形は、横(列)方向へ長いものより、下(行)方向へ長くなるようにします。
- 2.数式をやめて数値にする
- 数式は数値よりメモリを消費するので、再計算する必要がない場合は計算結果の値のみを残すようにします。
- 3.書式は最小限の範囲で設定する
- なるべく空欄部分には書式を設定しないようにします。書式が設定されれば、そのぶん余計にメモリが消費されます。
- 4.ユーザー定義の表示形式を作成する
- 数値と文字を接続して表示する場合は、1つのセルにユーザー定義の表示形式を作成して下さい。
数値を入力したセルの隣のセルに文字を入力すると、メモリの消費量が大きくなります。(例)520円を表示する際に、A1に520、A2に"円"というように分けて入力しない。
- 5.数式の代わりに定義した名前を使用する
- 何箇所も同じ数式を使う場合は、直接数式を入力するよりも定義した名前を利用したほうがメモリ消費量を節約できます。(「挿入」→「名前」→「定義」で数式に名前を付けます)
- 6.オブジェクトを多用しない
- ワークシート上にグラフやオートシェイプなどのオブジェクトを多数配置すると、メモリを多く消費します。
- 7.大きな表はいくつかのワークシートに分割する
- 大きな表を1つのワークシートで持つとメモリを多く消費します。
表をいくつかに分割してそれらをリンクして作業できないか検討してみてください。
|
●重複入力を防止したいとき
|
セルへの入力を行うとき、同じデータを入力してはいけないときがあるかもしれません。
そんなときは「入力規則」を使うことで、簡単に重複チェックを行うことができます。
まず重複チェックを行いたい範囲をWorksheet上で選択しておきます。
次に[データ]→[入力規則]でダイアログボックスを開き「設定タブ」を選びます。
『入力値の種類』欄で一番下の『ユーザー設定』を選択します。
すると下段に『数式』欄が表示されますので、
『=COUNTIF(範囲,検索条件)=1』と入力します。
範囲には重複チェックを適用したい範囲を、検索条件には指定範囲の先頭セル番地を入力します。(範囲は絶対番地で、検索条件は相対番地で指定します)
これで同じ値が入力できなくなります。
さらにエラーメッセージも表示させたいときは、「エラーメッセージタブ」を選びます。
『スタイル』から『停止』を選択します。
『タイトル』と『エラーメッセージ』を適当に入力します。
「OK」ボタンを押して設定完了です。
COUNTIF関数は検索条件を満たすセルの個数を返しますので、1が返ってきたならば既に同じ値が範囲内に存在することになります。
チェック用数式の設定
エラーメッセージの設定
実行例
|
●エクスプローラからワークブックが開けないとき
|
もしある日突然、エクスプローラからファイルが開けなくなったら、以下の操作を試してみてください。
解決する場合があります。
1)「スタート」→「プログラム」からエクセルを起動する。
2)メニューから「ツール]→「オプション」と進み「全般」タブを開く。
3)「他のアプリケーションを無視する」を無効にする。
マイクロソフトによると
「エクスプローラで Excel ワークブックをダブルクリックすると、DDE メッセージが Excelへ送信され、ダブルクリックしたワークブックを開くよう指示します。
一方、Excelで [他のアプリケーションを無視する] がオンになっている場合、Excelは他のプログラムが送信した DDE メッセージを無視します。
この結果、エクスプローラから Excelへ送信された DDE メッセージは無視され、ダブル クリックしたワークブックは開かれません。」
と説明されています。
参照:
http://support.microsoft.com/default.aspx?scid=kb;ja;JP418292
DDE: Dynamic Data Exchange
Windows上でアプリケーションソフト同士がデータやコマンドを行なうための手順の一つ。
Windows 2.0から実装されているが、OLEなどに取って代わられ、現在ではあまり使われていない。
「IT用語辞典e-Words」より
|
●CSV形式のデータ読込み時に、前ゼロの数字が消えてしまうとき
|
CSVファイルをExcelで開いたときに、「0001」などの前ゼロのコード番号は数字とみなされ「1」に変換されてしまいます。
これを避けるためには、データをテキストとして読み込む必要がありますので、以下の操作を行ってください。
メニューバーの「データ」→「外部データの取り込み」→「テキストファイルのインポート」で読み込むCSVファイルを指定します。
その際にファイルの拡張子がCSVになっている場合は、「ファイルの種類」欄で”テキストファイル(*.txt)”を”すべてのファイル(*.*)”に変更しておきます。
(そうしないとウィンドウにファイルが表示されません)
そして「インポート」ボタンを押して読み込みます。
すると「テキストファイルウィザード」が起動しますので、まずファイル形式を選択します。今回の場合は上段の”カンマやタブなどの区切り文字によってフィールドごとに区切られたデータ”を選択し、「次へ」ボタンを押します。
「区切り文字」欄では”カンマ”にチェックを入れて「次へ」ボタンを押します。
今度は列ごとのデータ形式を聞いてきますので、前ゼロが存在する列を指定し、オプションボタンの”文字列”を選択します。
「完了」ボタンを押して、最後にデータを格納するワークシートを指定してあげればOKです。
|
●1行おきに書式設定したいとき
|
3番目の「1行おきに計算式を設定する」と、同じ考え方です。
「条件付書式」で行番号を2で割り、その値が0かどうかで書式設定するかしないかを決めます。
手順は次の通りです。
(1) 書式設定を行いたい範囲を全て選択。
(2) メニューバーから[書式(O)]-[条件付書式(D)] を選択。
(3) [セルの値が] の右側にある「▼」より[数式が] を選択。
(4) 空白欄に [=MOD(ROW(),2)=0] と入力し、[書式(F)] をクリック。
(5) 以下は任意の書式を選択。OKで設定完了。
|
●複数のグラフのサイズを統一したいとき
|
そのままグラフを選択しても、どこにもグラフエリアのサイズを指定する欄がありませんよね。
この場合は、まずワークシートの左下に見えている「図形の調整」の右横「オブジェクトの選択」矢印(白で表示)をクリックします。
この状態で、グラフ上で右クリックして「オブジェクトの書式設定」を選んでください。
するとサイズと書かれたタブが見つかると思いますので、その「サイズ」と「高さ」の欄に任意の値をセンチメートルで入力します。
この操作を複数のグラフに対して行えば、同じサイズのグラフを配置できます。
|
●明細と合計値が合わないとき
|
明細行でセルの書式設定の小数点以下の桁数を0にしていると、SUM関数の結果と表示された数値の合計とが一致しない場合があります。
これは明細で表示されている数値は、あくまでも見かけ上の数値で、実際の数値ではないためにおこります。
実際の数値が小数点以下続いている場合は、SUM関数では丸めた数ではなく実際の数値の合計を出力しますので、このような現象がおこります。
これを防ぐには、明細の数値を実際の数値と見かけの数値とを一致させたものにすることです。
具体的にはROUND関数で四捨五入した数値に変換した上で合計を求めれば、必ず一致した結果になります。
これはROUND関数により、見かけだけではなく実際に数値を加工した結果が返ってくるため、後の計算での誤差がなくなるのです。
|
●入力した文字がセルの左端に近すぎて見にくいとき
|
入力した文字があまりにも左に寄りすぎて、左隣のセルの文字とくっつきすぎ、何だか見にくいなと思うときがありませんか。
こういうとき文字列の一つ前に空白を入れてもよいですが、Wordなどと同じようにExcelにもインデント機能がありますので、これを利用すると簡単に解決します。
対象となるセルを選択した後、ツールバーの「インデント」ボタンを押してください。1文字分だけ右に寄ります。解除する場合は「インデント解除」を押します。
どのボタンかわからない場合は、マウスポインタをツールバー上の絵の上にしばらく置いてみてください。
ボタンの機能説明が表示されます。
またはメニューバーから「書式」→「セル」→「配置」タブを選択して、インデント欄の0を1に変更します。
1を指定すると全角で1文字分右側に移動します。(若干1文字より右へ移動するようです)
指定した数値の数だけ右に移動しますが、最大で15までです。(Excel2000の場合)
|
●セルの選択時にメッセージを表示させたいとき
|
セルを選択したとき(セルポインタが特定セルへ移動したとき)に、こちらで用意したメッセージを表示させる方法です。
まずメッセージを表示させたいセルを選択しておきます。
次にExcelのメニューバーより「データ」→「入力規則」で[入力時メッセージ]タブを選択します。
“セルの選択時にメッセージを表示する”にチェックをつけます。(初期値では既にチェックがついています)
最後に下段の入力欄にタイトルとメッセージを入力してください。
これで完成です。
別なセルから当セルを選択しなおすと、メッセージがポップアップで表示されます。
入力シートでオペレータに入力指示を出す場合に便利です。
セルを選択したときの様子(Excel2000の例)
|
●セルやセル範囲に名前を付けたいとき
|
□セルやセル範囲に名前を付ける
何度も参照するセルやセル範囲に適当な名前を付けると、後でその数式やコードを見た場合、非常に分かりやすくなる場合があります。
例)合計範囲に名前を付けた場合 =SUM(支店別売上) と記述できます。
名前をつける方法は次の2つです。
1.名前ボックスで定義する場合
@名前を指定するセル、セル範囲を選択。
A数式バーの左横にある名前ボックスをクリック。
B適当な名前を入力。
CEnterキーで確定。
2.[挿入]メニューの[名前]で定義する場合
@名前を指定するセル、セル範囲を選択。
Aメニューバーで[挿入]→[名前]→[定義]と選択。(Ctrl + F3だと直接呼び出せます)
B名前欄に適当な名前を入力。
C「OK」ボタンを押す。
なお名前ボックスの▼ボタンをクリックすると、現在定義されている名前の一覧が表示されます。
一覧の一つをクリックするとそのセル範囲が反転表示されるので、その名前がどのセルに対して定義されているのかを確認することができます。
数式や定数にも名前をつけることが出来ます。(下図参照)
税率0.05にTAXという名前を付けたため、価格にTAXを掛けて消費税を出しています。
こういう計算式が何ヶ所もあった場合、税率が変わっても名前の定義のみを変更することで対応できます。
また税込額は「A2*税込額」で算出できます。
【名前をつけるときの注意点】
@名前の最初は、数字で始まる文字は使用できません。(“4月”など)
Aどうしても数字で始めたい場合は、数字の前に下線 (_) を付けるなどの工夫をしてください。(“_4月”など)
B2文字目以降には、文字、数値、ピリオド (.)、下線 (_) のいずれも指定できます。
C名前の大文字と小文字は区別されません。
Dセル参照と同じ名前は使用できません。($A$1、R1C1など)
Eスペースは使用できません。単語を区切る場合は、下線 (_) やピリオド (.) を使います。
F名前には、255 文字まで使用できます。
※実際にはありえませんが、セル範囲に253文字を超える名前を付けると、名前ボックスでそのセル範囲を選択できなくなるそうです。
□数式のセル参照を後から名前に変更する
@数式があるセルを選択。
(ワークシート上のすべての数式の参照を名前に変更するには、任意のセルを選択)
Aメニューバーで[挿入] →[名前] →[引用] を選択。
B[名前の引用] リスト中の目的の名前をクリック。
C「OK」ボタンを押す。
ただし、対象外の名前をクリックしたり、他のシートから参照していてアドレスの頭にSheet1などが付いている場合は、「置換する参照はありません。」とメッセージが表示され、変更できません。
こういう場合はExcelの置換機能を使って、自分でアドレスを名前に置き換えてください。
□名前の対応表をシートに貼り付ける
名前の一覧をワークシートに貼り付けることが出来ます。
各参照と名前の対応を確認するときに便利です。
@貼り付けたい位置にセルポインタを移動させます。
Aメニューバーで[挿入] →[名前] →[貼り付け] を選択。
B「一覧の貼り付け」ボタンを押します。
Cセルポインタの位置に一覧表が出力されます。(その位置にデータが存在していても、上書きされますので注意してください)
□行見出しまたは列見出しを使ってセルに名前を付ける
数値または数式が入っている表に見出しがある場合、その見出しをそのまま名前として使用できます。
@行見出しや列見出しを含めて、名前を指定するセル範囲を選択。
Aメニューバーで[挿入] →[名前] →[作成] を選択。
B[名前の作成先] ボックスで、[上端行]、[左端列]、[最下行]、または [右端列] チェック ボックスをオンにし、見出しを含む位置を指定。
例えばセルA5に“売上月”という列見出しが入っており、B5:G5に4,5,6,7,8,9という数字が入っている場合。
まずA5:G5を選択してください。
次に名前の作成を選択して[名前の作成先] ボックスで、[左端列]にチェックを入れてください。
そうするとB5:G5に“売上月”という名前が設定されます。
|
●生年月日から年齢を求めたいとき
|
A1に生年月日が入力されており、その年齢をB1に求める場合を説明します。
図のようにDATEDIF関数を使って生年月日から今日までの期間を計算し、それを年数で表示させてください。
DATEDIFは指定された期間内の日数、月数、または年数を返す関数です。
単位に下の記号を指定することにより、年数・月数・日数なども表示させることが可能です。
書式:DATEDIF(開始日,終了日,単位)
単位に指定できる記号の一部
"Y"…期間内の満年数
"M"…期間内の満月数
"D"…期間内の満日数
|
●ファイルを開けなくなったとき
|
このアイデアは私が考えたものではなく、ネット上で紹介されていたものです。
簡単な方法ですがかなり有効と思われたので、備忘録として掲載しておきます。
【復旧手順】
1.新規ブックを開く。
2.任意のセルに、開きたいブックの目的のセルまでのリンク式を入力する。
(例えば ='D:\[sample.xls]Sheet1'!A1)
3.目的のファイルが完全に壊れていなければ、 リンク先のセルの値が表示される。
4.値が表示されていることを確認して、他のセルについても同様の式を入力する。
5.最後にリンク式を埋め込んだ領域をコピー後、同じ位置に値貼り付けで、セルの内容を値に変換する。
【注意】
これでセルの値はなんとか復旧できますが、その他の情報(書式設定、罫線等)はあきらめるしかないようです。
|
●セルに入力した時間で計算をしたいとき
|
セルに入力された時間は自動的に1以下の数値に変換されてしまいます。
したがってそのまま計算しようとすると「時間×時給」のような計算ができません。
この場合は時間が入力されたセルを24倍し、元の数値に戻してから計算すればうまくいきます。
下の例(給料の欄)で説明します。
8:30は標準の書式に戻すと「0.354166666666667」となっています。
したがって上段の式を「=A2*B2」とすると正しい結果が出ませんが、下段の式を「=(A3*24)*B3」とすれば「A3*24」→8.5となるので、意図した結果を出すことが出来ます。
|
●サブフォルダをリストアップしたいとき
|
マクロブックが置かれている場所に存在するサブフォルダをピックアップして一覧表示します。
Dir命令で属性をvbDirectoryとすると、フォルダのみが抽出対象となります。
この場合、Dir命令の実行結果として次の2つの記号も出力されるので、除外するコードも入れておきます。
.(ピリオド):現在のフォルダ(カレントディレクトリ)。
..(ピリオド2つ):ひとつ上のフォルダ。
Public Sub サブフォルダをリストアップ()
Dim i As Long
Dim myFileName As String
myFileName = Dir(ThisWorkbook.Path & "\*.*", vbDirectory)
i = 1
Do While myFileName <> ""
If (GetAttr(ThisWorkbook.Path & "\" & myFileName)
And vbDirectory) = vbDirectory Then
If myFileName <> "." And myFileName <> ".." Then
Cells(i, 1).Value = myFileName
i = i + 1
End If
End If
myFileName = Dir()
Loop
End Sub
|
|