質問: エクセル シート2枚の比較・抽出、英数字・日付など iwao32と申します。 excelについてお教え下さい。またまた躓いてしまいました。どなたか助けてください。 先日同じような質問をさせていただいたのですが、別パターンの質問です(セルの中身が違います。)。 以下の例で示します。 sheet1 sheet2 a列 b列 c列 a列 3 x3 y3 2 5 x5 y5 4 1 x1 y1 5 4 x4 y4 2 x2 y2 という2枚のsheetがあるとき、sheet1のa列とsheet2のa列を比較して、sheet1の中で、sheet2のa列にあるものだけ、sheet3に、 sheet3 a列 b列 c列 2 x2 y2 4 x4 y4 5 x5 y5 というものを作りたいのですが、ここで問題なのは、x1~x5、y1~y5が、例えば、 20111220 2011-12-20 h12l 2011/12/20 12月20日 空欄 のように、日付(スラッシュ入り、マイナス入り)、数字+漢字、空欄など、だったりすることです。 全くの初心者なので、細かくお教えいただけると幸いです。 よろしくお願いいたします。
回答: >日付(スラッシュ入り、マイナス入り)、数字+漢字、空欄など、だったりすることです。 それは、まずいやり方です。 データを入力する際には、統一された形式で入力する様にして下さい。 但し、もしも、sheet1のb列とc列に、日付を表しているもの以外では、数値データが一切存在していない場合には、以下の様な方法があります。 まず、sheet3のa1セルに次の数式を入力して下さい。 =if(index(sheet2!$a:$a,row())="","",index(sheet2!$a:$a,row())) 次に、sheet3のb1セルに次の数式を入力して下さい。 =if(isnumber(1/(vlookup($a1,sheet1!$a:b,columns($a:b),false)<>"")),if(isnumber(text(vlookup($a1,sheet1!$a:b,columns($a:b),false),"0000-00-00")*1),text(vlookup($a1,sheet1!$a:b,columns($a:b),false),"0000-00-00")*1,vlookup($a1,sheet1!$a:b,columns($a:b),false)),"") 次に、sheet3のb1セルをコピーして、sheet3のc1セルに貼り付けて下さい。 次に、sheet3のa1~c1の範囲をコピーして、同じ列の2行目以下貼り付けて下さい。 尚、例えば2011111は、2011年1月11日なのか、2011年11月1日なのかを区別する事が出来ない事からも判ります様に、8桁以外の数字のみで表された日付を変換する方法というものは存在しません。 又、12月20日の様に、年を指定せずに入力した場合には、そのセルにその日付を入力した年の12月20日として記録されてしまいますから、例えば2011年1月以降になってから、12月20日と入力した場合、入力した人間が2010年の12月20日のつもりで入力していても、実際に残るデータは2011年12月20日になってしまいます。 これらの事から判ります様に、年が表示されないデータや、数字のみで日付を表しているデータが含まれている場合には、sheet1に入力されているデータに誤りがあるのかないのかを、前もって確認しておく必要があります。 この様に、元のデータの中に、正しい日付を表していないデータが含まれている恐れがありますから、上記の方法で集計した結果を入念にチェックして、誤りの有無を必ず確認して下さい。 その上で、前述の様なミスを誘発する恐れを避けるためにも、今後、日付データを入力する際には、年月日が全て含まれていて、年と月、月と日との間には、スラッシュ等を挟んだ形式に、全ての日付データを統一する様にして下さい。