Excelでデータを別シートに引っ張ってくる方法

このQ&Aのポイント
  • Excelで値を検索し、返す際に、返す値の横にあるデータを別のシートのセルの下に一緒に引っ張る方法を教えてください。
  • シート1の指定したセルの値を検索し、検索結果の隣にあるデータをシート2の指定した場所に引っ張ってくる方法を教えてください。
  • ExcelのVLOOKUP関数やINDEX関数を使って、シート1からデータを検索し、シート2に引っ張ってくる方法を教えてください。
回答を見る
  • ベストアンサー

excelでデータを別シートに引っ張ってきたい

excelで値を検索し、返す時、返す値の横にあるデータを違うシートのセルの下に一緒に引っ張ってきたいときの関数(方法)を教えてください。 素人なので分かりにくいと思いますが、お知恵をお借りしたいと思います。 あるデータのシートの検索値を別シートに持ってきたいのですが、シート1をシート2のようにしたいのです。 /は空白 例)シート1 /A B C D E 1(1) □ ○ ▽ ◎ 2 (2) ▼ ■ ◇ ◎ シート2 / A B C D 1 (1) □ 2 /○ ▽ ◎ 3 (2) ▼ 4 /■ ◇ ◎ 分かりにくいかもしれませんが、 シート1の(1)(A1)を検索すると、シート2(B1)に□(これはVLOOKで引っ張ってこれるのはわかります。) 次にシート1の(C1)○をシート2の(B2)へ持ってきたいのです。シート1(D1)(E1)はシート2の(C2)(D2)へ。 しかもシート1のC列は空白セルもあり、シート1のC列が空白の場合、下にずれることなくシート1の(D1)(E1)はシート2の(C1)(D1)へ。下記<図a>のようになるようにしたいのです。 そして、シート2のA列に検索値として入力する(1)や(2)の値は連番ではなく、(2)の次に(5)に飛んだりします。(2)の行のC列にデータがあっても、(5)のC列にデータはないこともあります。<図b> <図a> /A B C D 1 (1) □ ▽ ◎ 2 (2) ▼ ◇ ◎ <図b> / A B C D 1 (1) □ 2 /○ ▽ ◎ 3 (2) ▼ 4 /■ ◇ ◎ 5 (5) □ ▽ ◎ 6 (7) ▼ ◇ ◎ vlookとかCLUMN関数とか考えてはみたのですが、どうもうまくいきません。 毎回作成するデータなのですが、毎回コピペで作成しています。 とても面倒なので(1)を検索したらデータが一瞬で検索できるようにしたいと試みてはみたものの、私の知識では不可能でした。 関数では無理なのでしょうか。。。 関数はあまり詳しくないので分かりやすい方法があれば、教えていただければ助かります。 関数に詳しい方、よろしくおねがいいいたします。 関数にはこだわっていません。違う方法があればそれも含めておねがいいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

>シート2のA列に検索値として入力する(1)や(2)の値は連番ではなく、(2)の次に(5)に飛んだりします。 と書かれておられるという事は、Sheet2のA列の値は、関数によって表示されたデータなどではなく、全て手入力されたデータであると考えて宜しいのですね?  それでしたら次のような方法になると思います。  まず、Sheet2の表示は、1行目からではなく、2行目から始まる様にして下さい。  その上で、Sheet2のB2セルに次の関数を入力して下さい。 =IF(AND(ISNUMBER(1/(VLOOKUP($A1,Sheet1!$A:$C,3,FALSE)<>"")),$A2<>"",ROWS($2:2)>1),IF(COLUMNS($B:B)=1,"【行を空けて下さい】",""),IF(IF(ISERROR(1/(VLOOKUP(IF($A2="",$A1,$A2),Sheet1!$A:$C,3,FALSE)<>"")),$A2="",OR(AND($A2<>"",COLUMNS($B:B)>1),ISERROR(1/(VLOOKUP(IF($A2="",$A1,$A2),Sheet1!$A:$E,COLUMNS($B:B)+2-($A2<>"")*(COLUMNS($B:B)=1),FALSE)<>"")))),"",VLOOKUP(IF($A2="",$A1,$A2),Sheet1!$A:$E,COLUMNS($B:B)+2-($A2<>"")*(COLUMNS($B:B)=1),FALSE)))  次に、Sheet2のB2セルをコピーして、Sheet2のC2~D2の範囲に貼り付けて下さい。  次に、Sheet2のB2~D2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。  以上で準備は完了で、後はSheet2のA2以下に検索値を入力して行きますと、御希望通りの検索結果が得られると思います。  尚、Sheet2のA列において、Sheet1のC列の検索結果が空欄とはならない検索値が入力されている行の1つ下の行は、Sheet1のC列~E列の検索結果を表示させるために使用せねばなりませんから、そのA列のセル(御質問文の例における「/」となっているセル)は検索値を入力せずに、空欄としなければならない筈ですので、もしも間違えて検索値を入力してしまった場合には、「【行を空けて下さい】」という表示が現れる様になっております。

mikoossan
質問者

お礼

お礼が遅くなりました。 データを作成する時間がなく、昨日作成してみました。すごい!ちゃんと思った通りの位置に思った通りに引っ張ってこれました。 シート1の変更があった場合に自分でも関数を変更できるか試みましたが、私の頭では無理そうで(笑) 頭のいいかたの式ってすごいですね。感動しました。 これからもお願いしたいぐらいです。 本当に助かりました。有難うございました。

mikoossan
質問者

補足

もうひとつ教えていただきたいのですが、実はシート1のD列は数字で、それに15をかけた数字をシート2のC列へ持ってきたいのです。 なんせ15をかければよかったので、別シートを作成し、シート2を入力フォームとして入力フォームのC2 を別シートで参照し、参照したセルに15をかけることにしました。 しかし、コピーしたときに#VALUE!が出てしまいます。 ISERROR関数等使用しても消すことができませんでした。 これは消すことはできないのでしょうか。教えていただいた式に関数を入れようとしたのですが、うまくいきませんでした。 もし、いい方法があれば教えていただきたいなと思います。 無理なら、後から#VALUE!だけ消せばいいかなとも思っていますが、見た目が良くないなと少し気になってます。 おわかりになられましたらよろしくお願いします。

その他の回答 (5)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.6

>参照したセルに15をかけることにしました。 >しかし、コピーしたときに#VALUE!が出てしまいます。 >C2のセルへコピーしたのですが、うまく15でかけた数で表示がされませんでした。  もしかしますと、参照先であるSheet1のD列のデータが、実際には数値データではなく、改行等の何らかの「印刷出来ない文字」を含んでいる文字列データになってはいないでしょうか?  試しに、Sheet1において、D列に数値(の様に見えるデータ)が入力されている行の中の、未使用の列の所にあるセルに、次の関数を入力してみて下さい。 =LEN(INDEX($D:$D,ROW()))  その際、表示される数値が、「D列に入力されている数値の桁数」よりも多い数になってはいないでしょうか?  もし、上記の関数によって表示される数値が、「D列に入力されている数値の桁数」よりも大きい場合には、D列に入力されているデータは数値データではなく、何らかの「印刷出来ない文字」を含んでいる文字列データという事になります。(上記の関数は、D列に入力されているデータが、本当に数字のみから成り立っているのかどうかを確認するためだけのものですから、確認し終えた後では、削除してしまって構いません)  もし、D列に入力されているデータに「印刷出来ない文字」が含まれている場合には、本来であれば、元データであるD列に入力されているデータの中から、「印刷出来ない文字」を削除してしまった方が良いのですが、それが困難である場合には、Sheet2のC2セルに入力する関数を少し変更して、次の様な関数にされると良いと思います。 =IF(AND(ISNUMBER(1/(VLOOKUP($A1,Sheet1!$A:$C,3,FALSE)<>"")),$A2<>"",ROWS($2:2)>1),"",IF(IF(ISERROR(1/(VLOOKUP(IF($A2="",$A1,$A2),Sheet1!$A:$C,3,FALSE)<>"")),$A2="",OR($A2<>"",ISERROR(1/(VLOOKUP(IF($A2="",$A1,$A2),Sheet1!$A:$E,4,FALSE)<>"")))),"",IF(ISNUMBER(CLEAN(VLOOKUP(IF($A2="",$A1,$A2),Sheet1!$A:$E,4,FALSE))+0),CLEAN(VLOOKUP(IF($A2="",$A1,$A2),Sheet1!$A:$E,4,FALSE))*15,VLOOKUP(IF($A2="",$A1,$A2),Sheet1!$A:$E,4,FALSE))))

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

No.2・3です。 No.3の数式がちゃんと表示されない!というコトですので・・・ もしかして配列数式になっていないのではないでしょうか? No.2の操作方法と一緒で Shift+Ctrl+Enterで確定すればおそらくお望み通りの表示になるはずです。 しかし、No.1さんの補足に >実はシート1のD列は数字で、それに15をかけた数字をシート2のC列へ持ってきたいのです。 とありましたので、 もう一度数式を載せてそれに15を掛け算する方法もありますが、手っ取り早くVBAでやってみました。 ↓の画像で左側がSheet1・右側がSheet2とします。 尚、Sheet1で空白セルがあるのはC列だけ!と前提です。 画面左下のSheet2のSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストし、Sheet2のA列にデータを入力してみてください。 (Sheet2のC列は15倍した数値にしています) Private Sub Worksheet_Change(ByVal Target As Range) 'この行から Dim i As Long, c As Range, wS As Worksheet Set wS = Worksheets("Sheet1") If Intersect(Target, Range("A:A")) Is Nothing Or Target.Count <> 1 Then Exit Sub If Target <> "" Then With Target Set c = wS.Range("A:A").Find(what:=.Value, LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then i = c.Row If .Offset(, 1) <> "" Then MsgBox "このセルは入力できません" .Value = "" .Offset(1).Select Exit Sub Else .Offset(, 1) = wS.Cells(i, "B") If WorksheetFunction.CountBlank(wS.Cells(i, "C").Resize(, 3)) = 0 Then .Offset(1, 1) = wS.Cells(i, "C") .Offset(1, 2) = wS.Cells(i, "D") * 15 .Offset(1, 3) = wS.Cells(i, "E") Else .Offset(, 2) = wS.Cells(i, "D") * 15 .Offset(, 3) = wS.Cells(i, "E") End If End If Else MsgBox "該当データなし" .Value = "" .Select End If End With End If End Sub 'この行まで ※ Sheet2のB~D列に数式が入っていると数式も消えてしまいますので、 新しいSheetで試してみてください。m(_ _)m

mikoossan
質問者

お礼

お礼が遅くなり申し訳ございません。有難うございました。 VBEすごいですね。修正したいとき、VBEがわかる人があまりいないので、関数の方がいいかなと個人的に思いました。 シート1枚だけを日付をつけてフォルダ指定し保存したいのでそこはVBEでしたいと思っています。 また質問すると思いますので、よろしくお願いいたします。 有難うございました。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

>もうひとつ教えていただきたいのですが、実はシート1のD列は数字で、それに15をかけた数字をシート2のC列へ持ってきたいのです。  15を掛けなければならないのはSheet1のD列の値だけであり、その他の列の値に関しては、そのまま表示すると考えれば宜しいのでしょうか?  それでしたらまず、Sheet2のB2セルに次の関数を入力して下さい。 =IF(AND(ISNUMBER(1/(VLOOKUP($A1,Sheet1!$A:$C,3,FALSE)<>"")),$A2<>"",ROWS($2:2)>1),"【行を空けて下さい】",IF(IF(ISERROR(1/(VLOOKUP(IF($A2="",$A1,$A2),Sheet1!$A:$C,3,FALSE)<>"")),$A2="",ISERROR(1/(VLOOKUP(IF($A2="",$A1,$A2),Sheet1!$A:$E,2+($A2=""),FALSE)<>""))),"",VLOOKUP(IF($A2="",$A1,$A2),Sheet1!$A:$E,2+($A2=""),FALSE)))  次に、Sheet2のC2セルに次の関数を入力して下さい。 =IF(AND(ISNUMBER(1/(VLOOKUP($A1,Sheet1!$A:$C,3,FALSE)<>"")),$A2<>"",ROWS($2:2)>1),"",IF(IF(ISERROR(1/(VLOOKUP(IF($A2="",$A1,$A2),Sheet1!$A:$C,3,FALSE)<>"")),$A2="",OR($A2<>"",ISERROR(1/(VLOOKUP(IF($A2="",$A1,$A2),Sheet1!$A:$E,4,FALSE)<>"")))),"",IF(ISNUMBER(VLOOKUP(IF($A2="",$A1,$A2),Sheet1!$A:$E,4,FALSE)),VLOOKUP(IF($A2="",$A1,$A2),Sheet1!$A:$E,4,FALSE)*15,VLOOKUP(IF($A2="",$A1,$A2),Sheet1!$A:$E,4,FALSE))))  次に、Sheet2のD2セルに次の関数を入力して下さい。 =IF(AND(ISNUMBER(1/(VLOOKUP($A1,Sheet1!$A:$C,3,FALSE)<>"")),$A2<>"",ROWS($2:2)>1),"",IF(IF(ISERROR(1/(VLOOKUP(IF($A2="",$A1,$A2),Sheet1!$A:$C,3,FALSE)<>"")),$A2="",OR($A2<>"",ISERROR(1/(VLOOKUP(IF($A2="",$A1,$A2),Sheet1!$A:$E,COLUMNS($B:D)+2,FALSE)<>"")))),"",VLOOKUP(IF($A2="",$A1,$A2),Sheet1!$A:$E,COLUMNS($B:D)+2,FALSE)))  そして、Sheet2のB2~D2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。  以上です。

mikoossan
質問者

お礼

お礼が遅くなりました。 C2のセルへコピーしたのですが、うまく15でかけた数で表示がされませんでした。 なぜかは分かりません。質問に丁寧に答えていただき感謝しております。 最初の関数が求めていたものそのものでしたので、ベストアンサーにさせていただきました。 本当にありがとうございました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.2です! たびたびごめんなさい。 前回の数式では↓Sheet1に空白がある場合 右側画像の上のような感じになります。 下側の画像のような表示をご希望だったのでしょうかね? そうであればSheet2のB2セルに入れる数式は少し長くなりますが↓の数式に変更してください。 =IFERROR(IF(COUNTA(OFFSET(Sheet1!$B$1:$E$1,MATCH(IF($A2="",$A1,$A2),Sheet1!$A:$A,0)-1,,1))=4,IF($A2<>"",IF(COLUMN()=2,VLOOKUP($A2,Sheet1!$A:$B,2,0),""),VLOOKUP($A1,Sheet1!$A:$E,COLUMN(C1),0)),INDEX(OFFSET(Sheet1!$B$1:$E$1,MATCH($A2,Sheet1!$A:$A,0)-1,,1),,SMALL(IF(OFFSET(Sheet1!$B$1:$E$1,MATCH($A2,Sheet1!$A:$A,0)-1,,1)<>"",COLUMN($A$1:$D$1)),COLUMN(A1)))),"") やはり配列数式となりますのでShift+Ctrl+Enterで確定してください。 今回も外していたらごめんなさいね。m(_ _)m

mikoossan
質問者

お礼

ありがとうございました。 コピーした時にうまく参照されませんでした。 分かりにくい説明に丁寧にお答えいただき感謝しております。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! こういうコトでしょうか? ↓の画像で説明します。 左側がSheet1・右側がSheet2とします。 両Sheetとも、1行目は項目行として何らかの名目を入れておいてください。 データは2行目からあるという前提の数式です。 Excel2007以降のバージョンだという前提です。 Sheet2のB2セルに =IFERROR(IF($A2<>"",IF(COLUMN()=2,VLOOKUP($A2,Sheet1!$A:$B,2,0),""),INDEX(OFFSET(Sheet1!$C$1:$E$1,MATCH($A1,Sheet1!$A:$A,0)-1,,1),,SMALL(IF(OFFSET(Sheet1!$C$1:$E$1,MATCH($A1,Sheet1!$A:$A,0)-1,,1)<>"",COLUMN($A$1:$C$1)),COLUMN(A1)))),"") これは配列数式になってしまいますので、Shift+Ctrl+Enterで確定! この画面から数式をコピー&ペーストする場合は 上記数式をドラッグ&コピー → Sheet2のB2セルを選択 → 数式バー内に貼り付け  → そのまま(編集可能なまま)Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 これを列・行方向にオートフィルでコピーすると 画像のような感じになります。 仮にSheet1のC~E列に空白セルがある場合は左詰めで表示されます。 ※ Excel2003までの場合は上記数式は利用できませんので、別の方法を考える必要があります。 外していたらごめんなさいね。m(_ _)m

mikoossan
質問者

お礼

お礼が遅くなりました。昨日作成してみました。 kagakushikiさんの関数とは違うのにちゃんと思った通りの位置に引っ張ってこれました。 皆さん頭が良くて感動です! わたしの分かりにくい説明でここまで的確に回答いただけて感謝しております。 ありがとうございました。

mikoossan
質問者

補足

お伝え忘れていましたが、最初に回答いただいたものが求めていたものになります。 質問内容が分かりにくく申し訳ございません。 有難うございました。

関連するQ&A

  • EXCELの関数で別のシートからデータを取り出す方法について

    こんばんは。 excelの関数で次のようなことができますか? sheet1 A     B   C 123 125 122 sheet2 A    B    C     D 122            りんご 123           みかん 125            バナナ 上記のようなデータがsheet1とsheet2にあります。 sheet1のC列にA列のセルの番号と対応した商品を sheet2のA列とD列に対応データから引用できますか? (となりに並んでいないデータです。) 関数的にはvlookup,index,matchとかを使うとよさそうですが うまくいきません。 解決方法を教えてください。 よろしくお願いします。

  • excel 別シートへのデータの転記

    sheetが二枚あります。 sheet1 元データ sheet2 転出先(三種類あります) sheet1のA列に〇がついていたらsheet1Q列のシート名を見て、 転出先に同じデータがあるか?無ければ新規作成をするか? 新規作成をする場合には以下のように、 そのシート名の各セル番地にデータを転記。 sheet1のA列2行目移行同じ繰り返しで○があるか見に行く。 sheet1の1行目は項目名になります。 A2に○が付いていてQ列のシート名が100だった時 A2のデータを以下のように。 sheet1   sheet2(シート名は100) P列の値 → A7へ C列の値 → A8へ H列の値 → A9へ I列の値 → A10へ F列の値 → E5へ L列の値 → D6へ M列の値 → D7へ K列の値 → F9へ J列の値 → D8へ 続けてA4に○が付いていてQ列のシート名が100だった場合。 sheet1   sheet2(シート名は100) P列の値 → A12へ C列の値 → A13へ H列の値 → A14へ I列の値 → A15へ F列の値 → E10へ L列の値 → D11へ M列の値 → D12へ K列の値 → F14へ J列の値 → D13へ 以上のようなことがしたいのですが、 参考書でサンプルなどを見てやっているのですが、 なかなかうまくいきません。 コードのご教示をお願いたします。

  • Excelの関数またはマクロを教えて下さい。

    Exsel2000の関数で、現在以下の関数まで出来たのですが、これを応用して検索値「A1」を2つのセル「A1&B1」にしたいのですが、どうすればよいのでしょうか?どなたか方法を教えて下さい。 =VLOOKUP(A1,Sheet1!$A$1:$E$2000,4) 上記の関数から判るように、これは 例えばSheet2のC1のセルにこの式を入れる場合、A1と同じ内容の値を、Sheet1のA列から検索して、そして同じ行のSheet1のD列の値をSheet2のC1のセルに返すという関数です。 これを応用して、「A1と同じ内容…のA1を、A1&B1の2つが一致するセルを検索して、同じ列のSheet1のD列の値をSheet2のC1のセルに返すという関数にしたいのです。 どなたかおわかりになる方がおりました宜しくお願いいたします。 また、マクロを使う方法でも良いのですが、当方マクロは詳しくないので出来るだけ判りやすくお願いいたします。

  • エクセルで別シートの値を取得したいです。

    エクセルで質問があります。 別シートからセル値を取得したいです。 ただ、セル番地は行番号、列番号で指定し、 行、列番号はセルに入力してある値を使いたいです。 例 Aシート(値格納シート) B1セル値=1000 -------------- Bシート(値取得シート) A列=行番号入力 B列=列番号入力 C列=Aシートの取得関数 A2セル値=1 B2セル値=2 C2セル=1000(取得値) C2セルの関数に、A2とB2の値を使って Aシートのセル値を取得したいです。 よろしくお願いします。

  • VBA,二つのExcelのsheetにデータ保存

    VBA初心者です。 皆様のお力をお貸し頂きたく質問させて頂きます。よろしくお願いいたします。 質問内容は、下記になります。 Excelのsheet1には、縦列A,B,C・・・とデータが入っております。 sheet1の例 A B C sheet2は、入力するsheetです。 今回はA列の3行目からとします。 問題は、sheet1の縦の列をA,B,C,Dとすればデータの更新は、出来るのですが sheet1のデータのA,B,C一つ飛んでEまた一つ飛んでGという感じでsheet1のデータを 飛ばしてsheet2に表示、更新(保存)をしたいと思います。 ですので、sheet2のA列の3行目からA,B,C,飛んでE飛んでGとsheet1からデータを 表示させ、さらにsheet2の入力値が変更されると、sheet1のデータが入っている A,B,C,E,Gに更新される仕様です。 sheet1(データが入っています) A , B , C , E , G , 値1 , 値2 , 値3   , 値4 , 値5 sheet2(入力する、入力したデータは、sheet1へ更新される) A列 3行目 、sheet1の値1(A列)が入ります。 4行目 、sheet1の値2(B列)が入ります。 5行目 、sheet1の値3(C列)が入ります。 6行目 、sheet1の値4(E列)が入ります。 7行目 、sheet1の値5(G列)が入ります。 以上です。申し訳ございませんが、ご教授よろしくお願いいたします。

  • 別のシートにデータを出す方法

    シート1に 番号 A1に1 A2に2 A3に3 A4に4 データ↓ B1に43 B2に45 B3に47 B4に55 C1に733 C2に890 C3に826 C4に94 D1に57 D2に67 D3に41 D4に52 E1に301 E2に104 E3に719 E4に441 という表があるとします。 番号1の場合は、B1の43、C1の733、D1に57、E1に301というデータです。 シート2の、 A3に、1という数字(シート1のA1の、1という番号)をいれれば、 シート2の B3に、シート1の、B1の43というデータ。 C3に、シート1の、C1の733というデータ。 D3に、シート1の、D1の57というデータ。 E3に、シート1の、E1の301というデータ。 がでるようにしたいのですが、 VLOOKUPを使ってできますか? どのような関数の立て方したらいいでしょう? XPのExcel2003です。 よろしくお願いしますm(_ _)m

  • 基本の別シートの値と一致・不一致のチェック

    2つ目のシートのEセルとGセルの値が、1つ目のシートのAセルとQセルの値と一致しているかチェックをしたいのですが、 実際にどのような式を入れたら良いのかわかりません。 大変困ってしまっています。 何方か、ご教示頂けると大変幸いです。 1つ目のシートには基準となる値が入っています。2つ目のシートは入力されたデータが入っています。 比較するセルの値は1つ目のシートは空白は入っていませんが、2つ目のシートは、空白や全く違った値が入っています。 結果は、以下のように出力させたいです。 2つ目のシートのEセルの値と1つ目のシートのAセルの値が一致し、1つ目のQセルの値と2つ目のGセルの値が一致した時、2つ目のシートの最後の列へ『OK Aセルの値、Qセルの値』、 2つ目のシートのEセルの値と1つ目のシートのAセルの値は一致したが、1つ目のQセルの値と2つ目のGセルの値が一致しなかった時、2つ目のシートの最後の列へ『NG Aセルの値、Qセルの値』 1つ目のシートのフォーマットは、以下のようです。 Aセル     Qセル 果物     ランク オレンジ    B レモン     C バナナ     A パイナップル  D 2つめ目のシートのフォーマットは、以下のようです。 Eセル     Gセル 果物     ランク バナナ     D 空白      空白 スルメイカ   空白 鞄        B レモン      C メロン      A バナナ      A 以上 ご教示宜しくお願いいたします。

  • Excel シート間のデータの照合

    Excelで、シート間のお客様データ(だいたい各1万件)を照合します。下記は現在の照合方法ですが、これでは時間がかかるうえ手作業が多く発生しミスにつながります。頻繁に行う作業なので、関数でも、マクロでも、とにかくもう少し簡単にできる方法がありましたら、どうぞご教授ください。よろしくお願いします!! 【目的】 シート「sheet2008」には2008年度のデータ。シート「sheet2007」には「sheet2008」と同じ形式の2007年度のデータが入っています。シート「sheet2008」に、そのお客様の2007年度の担当営業マンを表示させたいのです。 【例】 列A(電話番号): 011-231-1112 列B(名前):佐藤 一郎 列C(住所):北海道札幌市中央区北1-1-1 列D(担当営業マン):鈴木 新規の列(2007年度の担当営業マン):鈴木  ・「sheet2008」「sheet2007」はほぼ同じデータですが、一部のお客様は名前が変わっていたり、住所が変わっていたりします。  ・「sheet2007」にないお客様が「sheet2008」にあったり、その逆があったりして、各シートのデータ件数は一致しません。  ・名前が同じでも住所が違うデータ、電話番号が同じでも担当営業マンが違うデータは別者として扱います。  ・「顧客ID」のような“必ずユニークな情報”は存在しません。 【現在の照合方法】 (1)「sheet2008」の各列の前に空白列を挿入する。  (データの1行目はタイトル行…B1:電話番号/D1:名前/F:住所/H:担当営業マン)  (データの2行目以降はデータ)     列A(空白行):     列B(空白行): 011-231-1112     列C(空白行):     列D(名前):佐藤 一郎     列E(空白行):     列F(住所):北海道札幌市中央区北1-1-1     列G(空白行):     列H(担当営業マン):鈴木 (2)「sheet2007」を列Aの電話番号で昇順に並べ替える。 (3)「sheet2008」の電話番号が「sheet2007」にあるかを調べる。     A2:「=IF(B2=(VLOOKUP(Sheet2008!$B2,Sheet2007!$A:$D,1,0)),"○","▲")」 (4)(3)で調べた「sheet2008」の電話番号と同じ行にある名前/住所が「sheet2007」にあるかを調べる。     C2:「=IF(D2=(VLOOKUP(Sheet2008!$B2,Sheet2007!$A:$D,2,0)),"○","▲")」     E2:「=IF(F2=(VLOOKUP(Sheet2008!$B2,Sheet2007!$A:$D,3,0)),"○","▲")」 (5)電話番号/名前/住所がすべて一致するデータについて、「sheet2007」にある担当営業マンの値を列Gに表示させる。     G2:「=IF((AND(A2="○",C2="○",E2="○"))=TRUE,(VLOOKUP($B2,Sheet2007!$A:$D,4,0)),"▲") (6)"▲"やエラー値で表示される計算結果について、目視で確認する。 (終了)

  • エクセルの空白を詰めて別シートに表示

    sheet1のデータを参照して、空白を詰めてsheet2へ表示させたいんです! sheet1(元データになるもの)  A列 |B列|C列・・・ 1行目A|100|100 2行目B|  |200 3行目C|100| 4行目D|  |200 5行目E|100| 6行目F|  |100 ・ ・ sheet2(sheet1でB列に入力があるものを抽出)  A列 |B列 1行目A|100 2行目C|100 3行目E|100 sheet3(sheet1でC列に入力があるものを抽出)  A列 |B列 1行目A|100 2行目B|200 3行目D|200 4行目F|100 sheet2のA1に下記の式を入力してA列とB列に数式をコピー =IF(COUNT(Sheet1!$B$1:$B$6)<ROW(A1),"",INDEX(Sheet1!A$1:A$6,SMALL(IF(Sheet1!$B$1:$B$6<>"",ROW($A$1:$A$6)),ROW(A1)))) すると下記のように表示されます。 A1=A     B1=100 A2=#NUM! B2=#NUM! A3=#NUM! B3=#NUM! 4行目から空白 sheet2のA2のところにエラーが出ていますが、「関数の引数」のところで「数式の結果」には「100」と 正解が表示されています。(B2、A3、B3も同様に)数式の結果のところには正解が表示されています。 答えの「#NUM!」のところに正解を表示させるには、どうしたらいいですか? 見よう見まねでつくったのもで。。。関数にあまり詳しくありません。 よろしくお願い致します。

  • エクセル(2003・2007)でデータ抽出し、別シートを作成するための

    エクセル(2003・2007)でデータ抽出し、別シートを作成するための関数を教えて下さい ●シート名:サンプルA                ●シート名:サンプルB   A  B    C   D  E・・        A  B     C   名前 日付1  日付2  備考      名前 日付1   備考 1 山田 2010/10/15 2010/10/10 ああ    1 鈴木 2010/10/18 うう 2 佐藤             いい       2 太田 2010/10/21 かか  3 鈴木 2010/10/18 うう     → 4 井上 2010/11/20 ええ 5 石田 2010/8/7 2010/10/7 おお 6 太田 2010/10/21 かか 具体的に上記のデータから【B列が本日から10日間以内かつC列がスペース】のデータのA・B・D行を別シートに作成する関数を教えて下さい よろしくお願いします ※なぜか文字がずれてしまってて、すいません・・・

専門家に質問してみよう