• ベストアンサー

転記 マクロ VBA

VBA初心者です。今シートが2つあり、一つは「明細」シート、もう一つは「入力」シートです。明細シートは3万行程あり、列はA~Sまであります。入力シートも全く同じ列並びでA~Sまであります。共にA列が伝票No.という項目になっており、今このA列にどんどん伝票No.を入力していき、最後に転記ボタンを押して残りのB~S列を明細シートから一発転記できるマクロができないかと考えております。どなたか詳しい方教えて頂けないでしょうか。宜しくお願い致します。

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

  • ベストアンサー
  • akina_line
  • ベストアンサー率34% (1124/3287)
回答No.3

こんにちは。  まず、下記サイトをご参照下さい。   http://www.officepro.jp/excelvba/   VBAの基礎が載っています。  つぎに、どこから作ったら良いか見当が付かない場合、機能をばらして中核機能をつくってから、周辺機能を作ると良いです。具体的には、以下のようなステップで作ってはどうでしょう。  1.Inputbox関数で読み込んだ伝票Noを明細シートのA列から検索し、見つけたらその行のB列以降の値をMsgbox関数で表示する。  2.1のプログラムを修正し、InputBoa関数の変わりに入力シートのA2セルから読み込み、B2セル以降に書き出すようにする。  3.2のプログラムを改良し、Inputbox関数で繰り返し回数を入力し、A2からその回数分繰り返すようにする。  3万行のデータの検索するのは、VBAにしても遅いと思います。明細シートのデータが頻繁に変わらないのであれば、テキストファイルにして配列上に読み込んで検索したほうが、高速化になると思います。 では。

tsson
質問者

お礼

初心者の私に、また不勉強な私にご丁寧なご指導ありがとうございます。お勧めのサイトを参照させていただきました。非常に分かり易く感じます。

その他の回答 (3)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.4

申し訳ない 初心者には厳しいかもしれないが 何でも聞けばいいというものではありません 質問の内容は、解説書等でも最初の方に書かれている 基本的なマクロの組み合わせで出来る処理です 基本的なことが解っていなければ、回答を貰っても 理解できないのではと思います まずは、解説書やakina_lineさんお勧めのサイトをご覧ください

tsson
質問者

お礼

本当におっしゃる通りだと思います。ご指摘ありがとうございます。再度勉強してから出直します。

  • higekuman
  • ベストアンサー率19% (195/979)
回答No.2

VBA初心者とのことですが、どの程度分かっているのでしょうか? そして、どこまで試してみたのでしょうか? とっかかりさえつかめない、というレベルでしたら、VBAではなく、#1がおっしゃるようにVLOOKUP関数を使ったほうが良いと思いますよ。

  • akina_line
  • ベストアンサー率34% (1124/3287)
回答No.1

こんにちは。  マクロではなく、関数でやってはいかがですか。   関数    VLOOKUP(検索値,範囲,列番号,検索の型)   例:入力シートB2のセルを明細シートから検索する式    =VLOOKUP($A2,{入力シートの全体範囲},2,FALSE)   1行目はタイトルが入っていると仮定して、2行目から式を入れます。詳しくはヘルプを見てもらうとして、「検索値」は明細シートのA列から検索するための値で、入力シートのA2ですね。「範囲」は明細シートのデータの入っている範囲です。この場合、シート全体でよいと思います(データがB列から入っているような場合は、B列以降の範囲を指定します。)。「列番号」明細シートの何列目を替えるか指定するためのものです。B列を返したいので、2を指定します。  この式のままセルの右下をドラッグしてコピーすると列番号は2のままなので、各列ごとに、Cは3、Dは4・・・としてやる必要があります。これが面倒な場合、入力シートの2行目に1,2,3,4・・・というデータを入れ、式を下のように変えるとよいでしょう(B3に入れます。)。   =VLOOKUP($A3,{入力シートの全体範囲},B$2,FALSE)  なお、検索する表が大きいと、データ入力中に待ち状態になるかもしれませんので、自動計算をOFFにしておくほうがよいかもしれません。 では。

tsson
質問者

補足

早速のご回答ありがとうございます。実際今はその関数でやっていまして、ところがファイルのデータが非常に大きいのに困っています。そこでその対策としてマクロをと考えています。何とかなりませんでしょうか?