- ベストアンサー
Excel:シート間参照し置換したい
初心者です。異なるシート間における表を参照し、置換の ような事がしたいのですが、VLOOKUPが使えるのでしょうか? やりたいのは、下記の通りです。 Sheet1のような表があります。 Sheet2のA列を参照し、Sheet1のB列を変換し、 Sheet3のような結果を得たいのです。 近似値もできるみたいなのでVLOOKUPを使おうと 思ったのですが、「含む」は論理値でどう指定すればいいか 分からず困っています。 そもそもVLOOKUPでできるかも疑問ですし... 教えてください、よろしくお願いします。 Sheet1 A列 B列 12345 りんご、みかん、イチゴ 67891 いんげん 23456 チョコ、あめ 67890 みかん、りんご 56789 あめ Sheet2 A列 B列 りんご くだもの みかん くだもの いちご くだもの いんげん 野菜 チョコ おかし あめ おかし Sheet3 A列 B列 12345 くだもの 67891 野菜 23456 おかし 67890 くだもの 56789 おかし
- ranrinrun
- お礼率61% (8/13)
- オフィス系ソフト
- 回答数3
- ありがとう数2
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
これも残念ながら一筋縄ではいかないと思います。 前回のご質問もそうですが、そもそも「一つのセルに複数のデータ」というのが、 Excelの基本的な考え方としてはイレギュラーなので、処理も難しくなってしまいますね。 (まぁ、そうせざるを得ない状況もあるんですが…) さて。 Sheet3のA列については、 Sheet3!A1:=Sheet1!A1 として相対参照で素朴に引けば解決ですね。 問題はB列ですが… A案 Sheet1のB列を[区切り位置]でばらしてから、VLOOKUPで一致検索 1.Sheet1のB列を選択する。 2.データ>区切り位置>[カンマやタブなど…]>次へ [その他]にチェックを入れる>[その他]の枠内に読点"、"を入力する>次へ [表示先]にC1を指定>完了 これで、Sheet1のC列以降にデータが一つずつ入りますから、 後は、普通にVLOOKUPを重ねるだけです。 3.Sheet3!B1:=VLOOKUP(VLOOKUP(A1,Sheet1!$A$1:$C$99,3,0),Sheet2!$A$1:$B$99,2,0) おそらくこれが普通の処理です。 B案 Sheet2を、A列を基準に昇順で並べ替えてから、VLOOKUPで近似検索 1.Sheet2のA:B列を選択する 2.データ>並べ替え>最優先されるキー:A列,昇順> オプション>[ふりがなをつかわない]>OK>OK 3.Sheet3!B1:=VLOOKUP(VLOOKUP(A1,Sheet1!$A$1:$B$99,2,0),Sheet2!$A$1:$B$99,2,1) 挙動が直感的に判り難いので、トラブルが起こりそうな気がします。 お勧めしません。 C案 Sheet1のB列の最初のデータを数式で切り出して、VLOOKUPで一致検索 1.Sheet1!C1:=IF(ISERROR(FIND("、",B1)),B1,LEFT(B1,FIND("、",B1)-1)) 2.Sheet3!B1:=VLOOKUP(VLOOKUP(A1,Sheet1!$A$1:$C$99,3,0),Sheet2!$A$1:$B$99,2,0) これも、まぁ、よく見る処理です。 D案 数式一発でやってみる 1.Sheet3!B1:=INDEX(Sheet2!$B$1:$B$99,MATCH(FALSE,ISERROR(FIND(Sheet2!$A$1:$A$99,VLOOKUP(A1,Sheet1!$A$1:$B$99,2,0))),0)) を配列数式として入力。 ※通常の数式は、入力した後Enterキーで確定しますが、 配列数式を入力するときは、CtrlとShiftを押しながらEnterで確定します。 略解 VLOOKUPでIDから対応するグループを引く。 ⇒FINDでSheet2!A列の各行の値をグループから探して、見つかるかどうかを判定 ⇒MATCHでエラーでない(値を含む)ものの行位置を取得 ⇒INDEXで対応する行位置のデータを取得 「Sheet2にりんごがない場合でもみかんを見つけてくだものを返す」スグレものですが、 ある程度慣れた人でないと、実際の運用は難しいかもしれません。 長乱文陳謝
その他の回答 (2)
参考です。 Sub Macro1() Dim r As Integer, i As Integer Dim rowpos As Integer Dim myItemNo As Double Dim myItem As String Dim myAnswer As String Dim Lookuptable As Variant Lookuptable = Worksheets("Sheet2").Cells(1, 1).CurrentRegion.Value 'sheet2の情報をメモリ上に持ってくる r = UBound(Lookuptable, 1) '行数を得る rowpos = 1 With Worksheets("Sheet1") Do While .Cells(rowpos, 1).Value <> "" myItemNo = .Cells(rowpos, 1).Value myItem = .Cells(rowpos, 2).Value myAnswer = "" For i = 1 To r If InStr(myItem, Lookuptable(i, 1)) > 0 Then '初めての分類名のみ処理する If InStr(myAnswer, Lookuptable(i, 2)) = 0 Then If myAnswer = "" Then myAnswer = Lookuptable(i, 2) Else myAnswer = myAnswer & "," & Lookuptable(i, 2) End If End If Next If myAnswer = "" Then myAnswer = "該当なし" Worksheets("Sheet3").Cells(rowpos, 1).Value = myItemNo Worksheets("Sheet3").Cells(rowpos, 2).Value = myAnswer rowpos = rowpos + 1 Loop End With End Sub
お礼
できました!うれしいです、ありがとうございます♪
- n-jun
- ベストアンサー率33% (959/2873)
Excel:条件付き文字列の結合方法 http://okwave.jp/qa3304401.html こちらの逆バージョンと言う事でしょうか。 シート1及びシート2の1行目は項目名があり、 シート3にはデータは無記入であるとした時、 シート3の2行目以降に置換した結果をだします。 Sub Test2() Dim Dic As Object Dim r2 As Range, r3 As Range Dim v As Variant, vv As Variant Dim key As Variant Dim i As Integer Set Dic = CreateObject("Scripting.Dictionary") With Sheets("Sheet1") v = .Range(.[A2], .Cells(Rows.Count, "B").End(xlUp)).Value For i = 1 To UBound(v, 1) Dic(v(i, 1)) = Split(v(i, 2), "、") Next End With With Sheets("Sheet2") Set r2 = .Range(.[A2], .Cells(Rows.Count, "B").End(xlUp)) End With Set r3 = Sheets("Sheet3").Range("A2") For Each key In Dic.keys With Application vv = .Index(r2, .Match(Dic.Item(key)(0), r2.Columns(1), 0), 2) End With If IsError(vv) Then r3.Value = key r3.Offset(, 1).Value = "該当なし" Else r3.Value = key r3.Offset(, 1).Value = vv End If Set r3 = r3.Offset(1) Next End Sub シート3のA列に既にデータがあるような場合、 質問内容を勘違いしているかも? その時は、すいません。
補足
さっそく、ご回答いただきありがとうございます。 できました!ありがとうございます!! ただ、実は、マクロがまったく分からなくて... 今回の分はこれでできそうですが、列の行が増えたり、ずれたり したものやじゃっかん内容の違うものもやることになりそうで、 その時の応用が効かなくて。。。 関数などで行う方法がありますでしょうか? ご存知でしたら、教えてください!
関連するQ&A
- Excel:条件付き文字列の結合方法
Excel本当の初心者です。ヘルプなど使って、自分なりにがんばって 考えたのですが、やりたいことがどうしてもできず、お力を貸して ください! やりたいのは、下記の通りです。 Sheet1のような表があります。カテゴリー毎にID が 付いていて、表は20,000行位あります。 同じID(カテゴリー)のものは、C列の商品名を”、”で 結合して、1行にまとめたいのです。 Sheet2のような結果を得たいのです。 Sheet1 A列 B列 C列 ID カテゴリー 商品名 12345 くだもの りんご 12345 くだもの みかん 12345 くだもの イチゴ 67891 野菜 いんげん 23456 お菓子 チョコ 23456 お菓子 お煎餅 Sheet2 A列 B列 C列 ID カテゴリー 商品名 12345 くだもの りんご、みかん、イチゴ 67891 野菜 いんげん 23456 お菓子 チョコ、お煎餅 Sheet1のA列とB列を「フィルタの重複レコードを無視する」を したものをSheet2のA列とB列に貼り付けて、ISNUMBERとFIND を使ってと思ったのですが、Sheet2のC列で商品名の結合を"、 " で結合しようと思ったのですが、重複IDがない物もあれば、 10個も20個もあるものもあるので、CONCATENATEではできなくて... どんな関数を使えば良いのでしょうか? それと、事前にSheet1にフィルタをかけてSheet2に貼り付けたり ぜずに、Sheet2のA列とB列とも関数でやる事はできるのでしょうか? あともうひとつ、教えてただきたい事があります。 いつも一番上の行に式を入れて、下にドラッグすることで 下の行にコピーしているのですが、20,000行もあるので この方法だと大変なので、行数をしていして、コピーする 方法とかあれば教えてください! 一度にいくつもすみませんが、教えてくださると 嬉しいです。
- ベストアンサー
- オフィス系ソフト
- エクセル VLOOKUP うまくできない
シート1のA列に りんご みかん いちご シート2のA列に名前、B列に金額 りんご 100 みかん 200 いちご 300 と入力しています。 シート2から同じ名前の金額を探し出し シート1のB列に入力したいのですが うまくいきません。 シート1のB列に =VLOOKUP(A1,シート2!$A$1:$B$3,2) とし、下までオートフィルしました。 しかしシート1の結果は りんご 300 みかん 200 いちご #N/A となります。 シート1にも、りんごが100としたいのですが どうすればいいでしょうか? よろしくお願いします。 (図はシート1です)
- ベストアンサー
- オフィス系ソフト
- エクセル AVERAGEを取るときに
平均値を取りたいのですが 範囲が少し複雑だったのでどのように式を作ったらいいのか わかりません。 シート1に A列 りんご みかん ばなな このようにデータがありそれぞれシート2にある りんご の個数の平均値をB列に求めたいのですが シート2には A列 B列 りんご 3 8 9 みかん 5 9 10 このように果物の種類の項目名が1番上にしかなく 個数はそれに対して必ず3行あるので VLOOKUPなどを使うとりんごと書かれている真横のセルしか 参照しないので常にその項目の横のセルから3行を参照したい のですが どうしたらよいでしょうか? 教えてください。よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- EXCEL関数について
EXCEL関数について EXCEL2003を使用しております。 お知恵を拝借願います。 「りんご」、「いちご」、「なし」は「グループ1」 「バナナ」、「メロン」は「グループ2」というように、 果物を20個のグループに分けます。 それぞれのグループの果物は、1個から10数個まで様々です。 Sheet2、A列、A2~A100セルに果物名、 Sheet2、B列、B2~B100セルにグループ番号(1~20)がランダムに入力されています。 ここで、Sheet1のA2セルに「りんご」と入力すると、 Sheet1のB2セルにグループ番号「1」が返せるような関数はありますでしょうか? 「VLOOKUP」で試してみたのですが、数字ではなく果物名から検索したいのと、 数字が重複しているので使えないことに気付きました・・・。 何卒ご教示頂きたく宜しくお願い致します。
- ベストアンサー
- オフィス系ソフト
- エクセル ブック内のシート間での行の参照?
エクセルの同じブック内のシート間で、セルを参照するのではなく、行参照?させたいのですが・・・。 例えば、、 シート1 A B C D 1行目 りんご みかん いちご ぶどう 2行目 赤 オレンジ 赤 紫 と入力すると同じようにシート2にも入力されるようにしたいのと、1行目と2行目の間に行を挿入しても同じようにシート2にも挿入されたり、 さらにはA列・B列のみ入力されたりするようにしたいのですが、(C列D列には別々のデータを入力したい)どのような方法がありますでしょうか?説明がわかりにくく申し訳ないのですが、宜しくお願いします。
- ベストアンサー
- オフィス系ソフト
- VLOOKUP関数で参照するものがないとき最後のデータが表示される
他に同じような質問があるのかもしれませんが、探せなかったので質問します。 タイトルの通りなのですが、VLOOKUP関数を使ったときに検索条件が一致しない場合、エラーとして表示されるのではなく、参照の対象となっているデータの最後のデータが表示されます。これはバグでしょうか?それともEXCELの仕様尾なのでしょうか? また、どうしたら参照先にない検索条件であることがわかるでしょうか?どなたかご回答お願い致します。 例) 【式】 =VLOOKUP(A1,Sheet1!A1:B3,2) 【結果:Sheet2】 A B 1 444 みかん 【参照先:Sheet1】 A B 1 111 いちご 2 222 りんご 3 333 みかん
- ベストアンサー
- オフィス系ソフト
- 表を利用した名前の定義・入力規則設定について
はじめまして。 エクセルの入力規則・名前の定義でどうしても分からない事が ありましたので、教えて頂けますでしょうか? 【前提】以下のような表が作成されているとします。 A列 B列 果物 りんご 果物 みかん 果物 いちご 野菜 ピーマン 野菜 にんじん 野菜 なす その他 肉 その他 魚 【要望】 セルC1に、果物のみ(「りんご」「みかん」「いちご」)が表示 されたドロップダウンリストを作成します。 同様に、セルD1に、その他のみ(「肉」「魚」)が表示 されたドロップダウンリストを作成します。 【質問】 要望を満たす為に、入力規則を設定したいのですが、 >前提にある表の中から、 >A列が果物であるデータだけを取り出し、 >そのB列をリストの元の値とする とする方法が分かりません。 「りんご」「みかん」「いちご」だけを選択し、名前定義をする、 という方法もあると思いますが、 そうではなく、あくまで「果物」というキーを指定して 名前を定義したいのです。 以上、よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 複数条件に合致する場合のみセルを参照する
複数条件に合致する場合のみセルを参照する関数式を探しています。 A B C 1 みかん イ 5 2 りんご ロ 3 3 いちご イ 2 4 みかん ニ 8 5 りんご ホ 6 上記のような表があって別シートに A B C 1 みかん イ と入れるとC1に『5』が参照値として表示されるような関数です。 複数の関数を組み合わせれば出来そうな気がするのですがわかりません。 どなたか教えて下さい。 よろしくお願いします。
- 締切済み
- オフィス系ソフト
- ACCESSでフォームの明細で他の値を参照させたい
ACCESS2010でフォームで明細行のコンボボックスを、他のテキストボックスの値を使って 行単位で動的に変更したいのですが、どのようにしたらよろしいのでしょうか 例えば、 1行目のAのコンボボックスで「果物」を選択したら、Bのコンボボックスは「リンゴ・みかん・イチゴ」を表示させたい 2行目のAのコンボボックスで「野菜」を選択したら、Bのコンボボックスは「きゅうり・きゃべつ」を表示したい もちろん、テーブルに下記のように保存されています 【分類】|【名称】 野菜|きゅうり 野菜|きゃべつ 果物|りんご 果物|みかん 果物|イチゴ
- ベストアンサー
- その他(プログラミング・開発)
- ドロップダウンリストを二つ作る
A B 1 果物 りんご 2 野菜 トマト という表があったとします。 A に リストで果物か野菜を選択できるような式を入れ 果物を選択すると、Bはりんごかみかんを選択できるような式を入れたいです。 正し、上記の表は、シート1 選択するためのリストの一覧はシート2に表示させるものとします。 いろいろ調べましたがどうやってもできませんでした。 やり方教えてください。 エクセル2010使用です。
- ベストアンサー
- Excel(エクセル)
お礼
やっぱり関数だと一筋縄にいかないですか。 マクロの勉強始めましたが、なかなかで... 1つのセルに複数あるデータの数がとても多いので、 D案でやってみました!でも、これは私が応用できるか が問題ですね... いつもありがとうございます。感謝です!