質問: excelの関数を使ったテスト作成 excel2003で作った英単語と意味のデータを番号1~50までと指定した範囲をランダムで20問選んで、印刷したいんですけど、どうやったらいいか教えて下さい。 毎回手作業でやらずに自動化して、wordの文書に貼り付けしたいんですが、出来ますか?教えて下さい。よろしくお願いします。
回答: こんにちは。#2のwendy02です。 >抽出した英単語と訳語が一致しないのですが、二つを一致することは可能でしょうか? テスト問題だから、英単語と訳が別々になるのではなかったのでしょうか? わざと、バラバラになるようにしたのです。それで、線を引いて、一致させるという方法で、これは良い!と思ったのですが......。残念です。(というか、もし、訳語が並べ替えせずに済むなら、すでに、そういうソフトウェアがあると思います。最初、私は、vbaで作っていたのですが、良いものがあるので、開発はやめてしまいました。"p-study" というソフトです。個人でお使いになる分には、フリーソフトウェアです。) 今度は、vlookupを使います。 a列は、1~50 まで番号が振ってあります。 b列は、英単語が、b1~b50があり、 c列は、訳が、c1~c50まであります。 d列は、同じく d1からd50まで =rand() e列は、 e1から、e50 まで、 =if(and(rank(d1,$d$1:$d$50)>=$f$1,rank(d1,$d$1:$d$50)<=$f$2),rank(d1,$d$1:$d$50),0) f列に、[単語番号の範囲]を入れます。 仮に、ここでは、 f1 20 f2 40 g列は、 g1から、g50まで、 =if((rows($e$1:$e$50)-countif($e$1:$e$50,0))>=row(a1),index($e$1:$e$50,small(index(($e$1:$e$50<>0)*row($e$1:$e$50),,),countif($e$1:$e$50,0)+row(a1)),1),"") ------------------------------------------------------- 出力部分 h列 h1:~ =if(isnumber(g1),vlookup(g1,$a$1:$c$50,2),"") i列 i1:~ =if(isnumber(g1),vlookup(g1,$a$1:$c$50,3),"") ---------------------------------------------------------- 完成図(alc-svl 11+英辞郎+p-dicによる) 例 g h i 10 alumnus 【名】男子の卒業生,同窓生 30 bastion 【名】(城の)稜堡 27 backlash 【名】反発,反動 19 archipelago 【名】群島,列島 21 aspen 【名】<植>アスペン 23 aura 【名】オーラ,独特の雰囲気 なお、入力の式が入れ終わってから、挿入やレイアウトを整えるとよいです。そのほうが分かりやすいかと思います。 もし、別のシートに[出力部分]を移動する場合は、 範囲を選択して、alt キーを押しながら、ドラッグすると、シートタブが選択できますので、それで、別のシートに数式を壊さずに移動が可能です。計算部分は、どれほど汚くても、出力部分さえ、きれいで出せればよいので、上手に作れば、wordでなくてもよいかもしれません。 なお、これは、私が、数年してきたことの延長上にありますので、お答えさせていただきました。