- ベストアンサー
VLOOKによる転記
エクセルで、VLOOKupを使って並びが違う別のシートから転記するにあたり、基本的なやり方はなんとなく理解できたのですが リストも大量にあり 列も沢山ある場合 1つ1つ転記()入力したいセルに式を入れていかないとだめなんでしょうか? 100項目で20列ある表だと2,000回同じ動作をしないといけないのでしょうか? レベル低い質問で申し訳ありません。 ご指導よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
フィルハンドルドラッグでコピーするのでは駄目でしょうか。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/input_autofir.htm 対象範囲を絶対参照にすれば問題ないと思うのですが。 http://kokoro.kir.jp/excel/absolute-position.html
その他の回答 (3)
- kagakusuki
- ベストアンサー率51% (2610/5101)
まず、下の添付画像を御覧下さい。 もし、質問者様が御利用になられているサイトでは画像が表示されていない場合には、下記のURLのページを御覧下さい。 【参考URL】 VLOOKによる転記【OKWave】 http://okwave.jp/qa/q8510313.html 下の画像の例では、Sheet1に元データがあり、VLOOKUP関数を使用して、Sheet2とSheet3にデータを転記させております。 Sheet2の様に、列の並びが元データと同じ場合には、B3セルに次の関数を入力してから、B3セルをコピーして、B3~F16のセル範囲に貼り付けます。 =IF(COUNTIF(Sheet1!$A$3:$A$16,$A3),IF(VLOOKUP($A3,Sheet1!$A$3:$F$16,COLUMNS($A:B),FALSE)="","",VLOOKUP($A3,Sheet1!$A$3:$F$16,COLUMNS($A:B),FALSE)),"") 一方、Sheet3の様に、列の並びが元データと異なっている場合には、B3セルの関数を次の様にします。 =IF(COUNTIF(Sheet1!$A$3:$A$16,$A3),IF(VLOOKUP($A3,Sheet1!$A$3:$F$16,MATCH(B$2,Sheet1!$A$2:$F$2,0),FALSE)="","",VLOOKUP($A3,Sheet1!$A$3:$F$16,MATCH(B$2,Sheet1!$A$2:$F$2,0),FALSE)),"") その際、「$」の有無に注意して下さい、「A1」の様に「$」が付いていない場合には、その関数が入力されているセルを他のセル、例えば右下のセルにコピーしますと、「B2」の様に参照先のセルの列番号と行番号の双方が変わってしまいます。 この様に、列番号や行番号が変わってしまう参照形式を相対参照と言います。 又、「$A1」の様に列番号を示すアルファベットと行番号を示す数字の双方の前に「$」が付いている場合は、その関数が入力されているセルを他のセル、例えば右下のセルにコピーしても、「$A$1」の様に列番号も行番号も変わりません。 この様に、列番号や行番号が変らない参照形式を絶対参照と言います。 又、「$A1」の様に列番号を示すアルファベットの前にのみ「$」が付いている場合は、その関数が入力されているセルを他のセル、例えば右下のセルにコピーしますと、「$A2」の様に行番号は変わりますが、列番号は変わりません。 これは、列番号の前にのみ「$」が付いているために、列番号のみが絶対参照となり、「$」が付いていない行番号は相対参照となるためです。 同様に、「A$1」の様に行番号を示す数字の前にのみ「$」が付いている場合は、その関数が入力されているセルを他のセル、例えば右下のセルにコピーしますと、「B$1」の様に列番号は変わりますが、行番号は変わりません。 これは、行番号の前にのみ「$」が付いているために、行番号のみが絶対参照となり、「$」が付いていない列番号は相対参照となるためです。 余談になりますが、Sheet3の様に行の並びと列の並びの双方が、元データと異なっている場合には、必ずしもVLOOKUP関数にこだわる必要は無く、HLOOKUP関数やINDEX関数を使っても同様の事を行う事が出来ます。 =IF(COUNTIF(Sheet1!$A$3:$A$16,$A3)*COUNTIF(Sheet1!$B$2:$F$2,B$2),IF(HLOOKUP(B$2,Sheet1!$B$2:$F$16,MATCH($A3,Sheet1!$A$3:$A$16,0),FALSE)="","",HLOOKUP(B$2,Sheet1!$B$2:$F$16,MATCH($A3,Sheet1!$A$3:$A$16,0),FALSE)),"") =IF(COUNTIF(Sheet1!$A$3:$A$16,$A3)*COUNTIF(Sheet1!$B$2:$F$2,B$2),IF(INDEX(Sheet1!$B$3:$F$16,MATCH($A3,Sheet1!$A$3:$A$16,0),MATCH(B$2,Sheet1!$B$2:$F$2,0))="","",INDEX(Sheet1!$B$3:$F$16,MATCH($A3,Sheet1!$A$3:$A$16,0),MATCH(B$2,Sheet1!$B$2:$F$2,0))),"")
お礼
大変ご丁寧な説明有難うございます。 大変参考になり助かりました。
数式をひとつ作成すればコピーペーストで可能です。 エクセルの数式のセル参照には、絶対参照、複合参照である列絶対参照、行絶対参照、相対参照の4つあります。 これを覚えないと数式を構成出来なくなります。詳細は下記参照。 http://www.kenzo30.com/ex_kisosyo/ex_ks_syokyu3.htm VLOOKUPのセル参照は項目名、データ範囲は下記方法で変更は不用です。 項目の指定は列絶対参照 データ範囲:絶対参照 VLOOKUPは参照元の列の何番目のデータを取得するか数値指定する必要があり、一般的には手入力します。 データを取得する表に取得したい列番号をあらかじめ入力し、それを行絶対参照で指定すれば数式は1つで済みます。 印刷時に列番号は印刷させたくない場合は、その行を非表示にするか印刷範囲から除外すれば良い。 例として添付図のように元データがG3~K7、参照先がB3~E7とします。 B1~E1は参照元の列番号を入力する事にしています。 B3=VLOOKUP($A3,$G$3:$K$7,B$1,0) B3の式をE7までコピペで表は完成です。
お礼
ご丁寧な回答有難うございます。 大変助かりました。
- aokii
- ベストアンサー率23% (5210/22062)
コピーすればそのまま貼り付けできます。 $A$1等の$の使い方と式内の文字を自動で作って=を付ける方法を調べてみて下さい。
お礼
回答有難うございます。 助かりました!
お礼
早々のご回答ありがとうございました。 助かりました。