エクセルでの関数で、日付から曜日を表示させたいという作業は度々使われると思います。次に曜日を求める二つの方法をご紹介したいと思います。
まずはエクセルの関数で求める方法ですが、A1セルに日付が入力されているとしてA2セルに曜日を求めたい場合、A2セルで「=TEXT(A1,"aaa")」「=TEXT(A1,"aaaa")」などと入力してください。"aaa"または"aaaa"というのはセルの曜日の書式設定のことで「ユーザー定義」と同じ状況のことを指定しています。
次に関数を使わないで求める方法ですが、どのセルでも構いませんが、例えばA1セルに日付を西暦で入力してください。そのセルを選択し、右クリックしメニューの「セルの書式設定」を選びます。そして「表示形式」→「ユーザー定義」と選択、「種類」の箇所に次のような定義文を入力してみてください。
2007年12月1日を入力した場合
・m"月"d"日("aaa")" → 表示は「12月1日(土)」となります。
・ggge"年"m"月"d"日("aaaa")" → 表示は「平成19年12月1日(土曜日)」となります。
・yy/m/d(ddd) → 表示は「07/12/1(Sat)」となります。
・yyyy/mm/dd(dddd) → 表示は「2007/12/01(Friday)」となります。
使用するにあたっての注意点としては、全角文字を表示させたい時は""(ダブルクォーテーション)で囲むように入力してください。
エクセルのデータ上に、次のようなデータが記述されているとします。
【エクセル上のデータ】
A列 B列 C列
ア A ア
イ a
ウ A
エ S
オ P
カ W
キ G
ケ B
コ H
セルD1の部分に「=IF(VLOOKUP(C1,A1:B9,2)="A","○","×")」と入力したとします。意味としては、A1からB9の範囲を元として、A列の中にセルC1に記述されている「ア」という文字がある場合の左側から2列目、つまりB列の文字が「A」の場合、セルD1に「○」を表示させます。
つまり、セルC1の値がア,イ,ウの場合は、「○」を、セルC1の値がア,イ,ウ以外の場合は「×」をD列内に表示させるという関数になります。しかし難点は、B列の値を見ても分かるとおり、大文字小文字のAとaの判断が出来ないという点です。
「A=CHAR(65)」なので、「=IF(VLOOKUP(D1,A1:B9,2)=CHAR(65),"○","×")」としても大文字小文字の判断が出来ません。
その区別を付けたい場合ですが、「A=65」と指定することができますので、「=IF(CODE(VLOOKUP(D1,A1:B9,2))=65,"○","×")」と入力すると大文字小文字を区別して判断してくれます。この関数式で判断すると、セルC1の値がア,ウの場合は、「○」を、セルC1の値がア,ウ以外の場合は「×」をD列内に表示させるという関数になります。
エクセルを使用している人が使いたい機能の一つとして、セルにつけた色を判断してそのデータを抽出する機能があると思います。しかし標準の機能ではできないので、関数を使って実行してみましょう。まずはセルの色を指定してデータ抽出をしてみましょう。エクセルではオートフィルタというデータを抽出して表示させる機能がありますが、これはセルの値によって判断するものであって、セルの色での判断は出来ないようになっています。
では、どうしたらセルの色別に表示が出来るのでしょうか。まずはセルの色を取得する関数を使い、セルの色別に値を設定して分けます。その列を使ってオートフィルタ機能を使うと、セルの色別に表示させることが可能になるという事になります。
【セルの色(ColorIndex)を取得する関数】
Function iro(objCell As Range) As Integer
Application.Volatile
iro = objCell.Interior.ColorIndex
End Function
上記のコードを使って各セルのColorIndex値を取得して表示させます。例えば、A5のセルの色を取得しB5に値を表示するのであれば、B5のセルに「=iro(B5)」と入力してください。するとB5にA5のセルのColorIndex値が表示されます。これを取得したい行全てに設定して、この値に対してフィルタをかければ色別に表示することが出来ます。参考にして実行してみてください。
エクセルにデータを検索する時に、「'」などの文字が含まれていると「NULLが不正」というメッセージが出たりして取り込むことが出来ません。
例えば、「'12'34」という文字を検索する時に、2と3の間のシングルクォーテーションは置換をすることで取り除く事が出来ても、先頭のシングルクォーテーションは除去する事が出来ないので、取り込むデータ数が多いほど、手作業での除去が非常に手間になってきます。
これを解決するには次の方法があります。セルA1に「'1234」と入力されている場合、セルB1に「=A1」と指定してセルB1を値の貼り付けをすることで先頭のシングルクォーテーションを取り除く事ができます。ただしこの方法は、数字が文字列扱いになってしまい、不具合が出ることもあるのであまりお勧めできません。
次の解決方法としては、セルB1に「=VALUE(A1)」と指定し、セルB1を値貼り付けをするということです。VALUEを指定すれば値を数値として扱ってくれます。
今後の為に参考に出来るサイトとして、こちらのサイトをご紹介します。
http://www.relief.jp/itnote/archives/000321.php
※値貼り付けの方法は、関数指定して表示されているセルをコピーします。右クリックで指定して貼り付けを選択し、「値の貼り付け」で貼り付けると関数が除去できて、表示されている文字(数字)だけを貼り付けてくれます。
次のような表が2つあるとします。
【Aファイル】
セル A B C
1行目 商品№ 分類№ 名称
2行目 11 21 ABC
3行目 12 22 DEF
4行目 13 23 GHI
【Bファイル】
セル A B C D E
1行目 商品№ 分類№ 名称 コード 金額
2行目 1 2 あいう 11000 100
3行目 11 21 かきく 55000 200
4行目 3 4 さしす 90000 300
この「Aファイル」の商品№+分類№と合致するデータを「Bファイル」から検索をして、その行ごとに別ファイルに抽出する関数は存在するでしょうか。一致するのは複数行あると思うので、複数抽出する方法などもあれば教えていただきたいです。
というような質問があるとします。少し複雑だとは思いますが、以下の関数を参考にしてみてください。
1.別ファイルにシート名「検索条件」というシートを作成します。
2.シート「検索条件」のA2セル:「=[【Bファイル】]Sheet1!$A$2」
B2セル:「=[【Bファイル】]Sheet1!$B$2」
C2セル:「=[【Bファイル】]Sheet1!$C$2」
D2セル:「=[【Bファイル】]Sheet1!$D$2」
E2セル:「=[【Bファイル】]Sheet1!$E$2」
と入力しておきます。これはE2の次はF・G・Hと、同様に必要な分だけ関数をコピーしてください。
3.1行目の左側から「商品No」「分類No」「商品名」「コード」「金額」と名前を入れておきます。
4.抽出元のデータがあるシート上で、「商品№」の1行目の所に「=DGET([【Bファイル】]Sheet1!$A$1:$E$***,"商品No",検索条件!A1:C2)」と入力してください。ここでの「***」とは「2」で指定した最終行の番号になります。
5.次に「分類№」の1行目:「=DGET([【Bファイル】]Sheet1!$A$1:$E$***,"分類No",検索条件!A1:C2)」
「商品名」の1行目:「=DGET([【Bファイル】]Sheet1!$A$1:$E$***,"分類No",検索条件!A1:C2)」
「コード」の1行目:「=VLOOKUP(C2,[【Bファイル】]Sheet1!$C$1:$E$***,2,FALSE)」「金額」 の1行目:「=VLOOKUP(C2,[【Bファイル】]Sheet1!$C$1:$E$***,3,FALSE)」と入力します。
これでできると思うので、参考にしてみてください。
複数の条件を指定して、たくさんのデータの中からデータを抽出する場合、エクセルの関数でもできますが、もっと簡単に行うにはフィルタオプションを設定してみるのも良い方法だと思います。以下のようにしてフィルタを利用してデータを抽出してみてください。
1.シートの余白部分に抽出したい条件を指定してみてください。例えば項目名が「住所」だとしたら、条件には「北海道」「青森」のように都道府県を入れてみてください。
2.メニュー→「データ(D)」→「フィルタ(F)」を選択→「フィルタオプションの設定(A)」を選択して、データが入っている範囲を全て指定します。
3.ダイアログボックスが表示されたら、「抽出先」内の「選択範囲内(F)」にチェックが付いています。次に「リスト範囲(L)」に指定された範囲が選択されているのを確認してください。
4.「検索条件範囲(C)」の右側にあるマークの部分をクリックしてください。
5.検索条件範囲を指定するダイアログボックスが表示されますので、条件が入力されているセルをマウスで指定してください。
6.「OK」ボタンを押します。
7.条件に当てはまるデータだけが抽出され、該当以外は非表示になります。
8.検索条件を外して全て表示させるにはメニューバー→「データ(D)」→「フィルタ(F)」→「すべて表示(S)」を選択してください。
このように指定すれば、関数を使って抽出しなくても簡単にデータが抽出できます。
アクセスなどのデータベースで作成したデータをダウンロードによる方法ではなく、アクセスのマクロ「エクセル変換」という機能を使いエクセルに移行した場合、エクセルシート側で例えばVLOOKUPやSUMIFの関数を使って集計表などを作成をしていると、セル上に「#N/Aエラー」と表示されることがあります。
アクセスからエクセルに変換されたデータというのは文字認識が不可能なのか?と思われる方もいると思います。しかしこのような場合、アクセスからエクセル変換した場合の数値ですが、もし書式設定が「標準」となっているならば、エクセルでは数値データは右詰表示されるところが、アクセスからの変換データの場合は左詰で表示されているかもしれないので、まずは確認しましょう。
この場合、エクセルが数値を文字列として認識しているので、数値と判断せずに関数が認識できないという現象が発生する可能性があります。したがって手間がかかりますが、一つ一つの関数式を修正する、または文字扱いとなっている数字を数値に修正して貼り付けなおす必要があると思います。
これが面倒だという時は、場合によっては「VALUE関数」を使っての対処ができます。ほとんどの場合、数字が文字列扱いになってしまい関数が認識されなくなったというケースが多いと思いますので、そこの書式を確認し、数値に修正しなおして再度参照してみるようにしてください。
