質問: excelでのデータ検索とセルへの値挿入 お世話になります。excelマクロ初心者です。 sheet1のa列に数字、b列・c列空欄、d列に語幹、e列に語幹の意味、f列に単語名、g列に単語の意味が入っており、f列の総数はおおよそ7000程です。 sheet2のa列に数字、b列に数字または空欄、c列に数字または空欄、d列に語幹(ハイフンを含んだアルファベットの1部)、e列にd列語幹の意味が入力されています。 語幹別に、新規の単語を取得するたびに、sheet2の語幹部分をソートし、a列の数字が更新され、その後、sheet1のa列数字が更新され、a列・f列をキーとして、昇順にソートされます。 当初想定した以上にの語幹の数が増えてしまったので、その重要度を、sheet2のb列、c列に記録して、そのデータを、sheet1のb列、c列に転記せざるをえなくなっております。 現在、sheet1のa列に値について、1行目から、個別にsheet2a列を検索し、b列・c列のデータを検索し、これを転記するマクロを組んでいるのですが、1行ごとに検索するため、おおよそ、45秒もかかっています。 これを短縮する方法としては、検索した値を、配列変数のたとえば、iに、a列の同じ数字の行数を取得して、b列・c列に一括して、sheet2の数字(空欄の場合は空欄)をそのまま転記することだと思うのですが、残念ながら、自分では組み立てられません。 どなたか、ご教示いただければ幸いです。 なお、ご教示いただいた内容を単純にマクロに転記するようなことではなく、自分なりに消化できてから、再度ご連絡をさしあげたいと思いますので、ご理解いただければと思います。 お手数をおかけしますが、よろしくお願いします。
回答: シート上で更新すると画面更新等、多量になれば時間がかかります。 案1.表更新処理の前後で画面更新を停止/開始を行う。 application.screenupdating = false '画面更新停止 (更新処理) application.screenupdating = true '画面更新開始 案2.各シートデータ範囲のデータを変数として取り込み、処理完了後にコピーする。 データは、cells(行,列)と同様に変数(行,列)として取り扱える。 以下に配列を使用したサンプルコードです。 dim st1, st2 as variant st1 = worksheets("sheet1").range("a1:g7000") st2 = worksheets("sheet2").range("a1:g7000") for i = 1 to 1000 for j = 1 to 7000 if st1(i, 1) = st2(j, 1) then st1(i, 2) = st2(j, 2) 'b列 st1(i, 3) = st2(j, 3) 'c列 exit for end if next next worksheets("sheet1").range("a1:g7000") = st1