JustAnswer のしくみ:

  • 専門家に質問
    知識豊富な専門家があらゆる質問にお答えするために常に待機しています。
  • 専門家が丁寧に対応
    E メールやサイト内オンラインメッセージなど、さまざまな手段で回答を通知。
    必要に応じてフォローアップの質問をすることもできます。
  • 満足度 100% 保証
    専門家からの回答を確認し評価をすることで、支払うかどうかを決めます。

tsukuba_frogに今すぐ質問する

tsukuba_frog
tsukuba_frog, ITエンジニア
カテゴリ: IT・インターネット
満足したユーザー: 41
経験:  IT Professional
65805256
ここに IT・インターネット に関する質問を入力してください。
tsukuba_frogがオンラインで質問受付中

excel2003 VBA使用 全てコピペできませんのでコードの1部を抜粋します。 処理速度を早くしたいのですが、どこをなおしたらいいのかわかりません。 やっている内容はAと

質問者の質問

excel2003 VBA使用
全てコピペできませんのでコードの1部を抜粋します。
処理速度を早くしたいのですが、どこをなおしたらいいのかわかりません。
やっている内容はAとBのシートの差分をしています。シートAは問題ないくらいの処理速度ですが、シートBを新しいブックにインポートしそこから下記コードの処理をしようとすると
10分位かかってしまいます。当方VBAは初心者です。よろしくお願いいたします。

' --- 各CODEの検索と貼付 --- ここの処理の高速化が必要
For i = 2 To LineCount
BomCode = Worksheets("Sheet2").Cells(i, BomCodeCol).Value ' --- 資材CODEを検索キーに設定
' BomName = Worksheets("Sheet2").Cells(i, BomNameCol).Value ' --- 品名(日本語)
' BomSpec = Worksheets("Sheet2").Cells(i, BomSpecCol).Value ' --- 仕様(日本語)の検索
' BomMake = Worksheets("Sheet2").Cells(i, BomMakeCol).Value ' --- MAKER名の検索
' BomTori = Worksheets("Sheet2").Cells(i, BomToriCol).Value ' --- 取引先名の検索

' aWorkBook.Activate
If BomCode = "" Then ' 資材CODEが無い時
Worksheets("Sheet1").Cells(Worksheets("Sheet1").Range("A1").End(xlDown).Row + 1, 1).Value = "該当なし"
YLine = Worksheets("Sheet1").Range("A1").End(xlDown).Row
Else
Set Obj = Worksheets("Sheet1").Cells.Find(BomCode)
If Obj Is Nothing Then ' 資材CODEが見つからない時
Worksheets("Sheet1").Cells(Worksheets("Sheet1").Range("A1").End(xlDown).Row + 1, 1).Value = BomCode
YLine = Worksheets("Sheet1").Range("A1").End(xlDown).Row
Else ' 資材コードが見つかった時

YLine = Worksheets("Sheet1").Cells.Find(BomCode).Row
End If
End If
' その他情報を設定
Worksheets("Sheet2").Cells(i, BomNameCol).Copy Destination:=Worksheets("Sheet1").Cells(YLine, 4) ' 品名
Worksheets("Sheet2").Cells(i, BomSpecCol).Copy Destination:=Worksheets("Sheet1").Cells(YLine, 6) ' 仕様
Worksheets("Sheet2").Cells(i, BomMakeCol).Copy Destination:=Worksheets("Sheet1").Cells(YLine, 8) ' メーカ
Worksheets("Sheet2").Cells(i, BomToriCol).Copy Destination:=Worksheets("Sheet1").Cells(YLine, 10) ' 取引先
Next i
投稿: 4 年 前.
カテゴリ: IT・インターネット
専門家:  tsukuba_frog 返答済み 4 年 前.


まず、このソースコードに対して速度面に関する一般的なアドバイスをさせていただきます。

 Set Obj = Worksheets("Sheet1").Cells.Find(BomCode)
のところでシート上の全てのセルに対しての検索を行っています。
ここで検索対象の範囲を列なり行なり絞る事ができるのであれば、
例えばB列からC列までだけでよいのであれば
 Set Obj = Worksheets("Sheet1").Range("B:C").Find(BomCode)
などとして、検索する範囲を絞った方が速度は向上します。

それとその後
 Else ' 資材コードが見つかった時
 YLine = Worksheets("Sheet1").Cells.Find(BomCode).Row
で、再び同じ検索を行ってしまっています。
ここは上で行った検索結果を再利用する形で
 YLine = Obj.Row
とした方が効率的です。

次に、おそらく行っている事は資材マスターのシートを資材コードで検索して
それによって得られた品名や仕様等の情報をsheet2にセットしているのだと思いますが、
プログラムを少し大きく改造できるとすれば、
手順の流れだけ説明しますと

1. ご質問で貼り付けていただいた処理の前に、
 まず資材マスターの情報を読み込むためのDictionaryオブジェクトをnewして作成し、
 資材マスターの内容を一行ずつ取得し、資材コードをキー、その他の項目品名・仕様などの情報をArrayに入れたものを値としてセットする
2. 貼り付けいただいた処理の中で、Sheet1に対してFindする代わりにDictionaryオブジェクトに対して検索するようにする

とすると、毎回シートの内容を検索するのに比べれば相当な高速化が見込めます。
ちょっと敷居が高いかもしれませんが、上記のキーワードで
VBAの解説書を引いたりやWeb検索等して頂くとさほど難なくご理解頂けるかと思います。

また、別なアプローチとしましては、既にご存知であれば恐縮ですが
Excelにはこのような用途に便利なVLOOKUP関数というものが用意されています。
正直申しますと貼り付けいただいたソースコードの中で、資材コードが見つからなかった時の処理の意図がよく分からないのと
品名や仕様などがセットされた後Sheet2をどう使うのかが分からないため
VLOOKUP関数がそのまま利用出来るかは微妙ですが、
一度お知りになっておくと、今後何かの時に役に立つと思いますので
お調べ頂く事をおすすめします。

JustAnswer メディア掲載:

 
 
 
Ask-a-doc ウェブサイト:簡単な質問がある場合は、さまざまな分野の専門家が回答してくれるサイトに投稿してみてはいかがだろうか。Justanswer.jp は特にお薦めだ。
10 月以来、JustAnswer.jp では一時解雇や失業、契約解除に関する法的な質問が急増している。
justanswer.jp/legal といったウェブサイトでは、
法律に関する確実な回答が得られる。
過去 30 日で JustAnswer のトラフィックは 14 パーセント上昇し、ページ閲覧回数は 40 万に近付いている...ストレスや高血圧、飲酒、心臓の痛みに関する質問にいたっては 33 パーセントという増加率を記録した。
グッド モーニング アメリカに出演しているキャリア専門家の Tory Johnson は、注目の在宅ビジネスとして、さまざまな分野の専門家がユーザーの質問に答える JustAnswer などを紹介。
専門家として登録するには、かなり厳しい審査をパスしなければなりません。
 
 
 

ユーザーの声:

 
 
 
  • なかなか解決できないトラブルだったのですが、解決までとことん相談にのってくださいました。また、パソコンをうまく使いこなせていない私でも解りやすくアドバイスしてくださいました。 本当に助かりました! 大阪府 黒崎
< 前へ | 次へ >
  • なかなか解決できないトラブルだったのですが、解決までとことん相談にのってくださいました。また、パソコンをうまく使いこなせていない私でも解りやすくアドバイスしてくださいました。 本当に助かりました! 大阪府 黒崎
  • パソコンの操作は熟知している訳でもなく不慣れですが何回もの質問に丁寧に答えていただき問題解決しました、大変助かりました、感謝しています。 兵庫県明石市 後藤
  • 回答が早く、2日間対処には時間がかかりましたが、80%諦めていたものが解決したので、とにかく感謝の一言です。 ありがとうございました。 千葉県野田市 金澤
  • まずは親身になって回答をして頂ける専門家であったこと。説明が簡潔でわかりやすく、質問者が気持ちの整理をしやすい配慮が伺えた。 岐阜県 石川
  • 短時間で的確なアドバイスを受けることができ、かつ、回答に対する質問に対しても直ちに真摯な回答が得られました。 大阪府高槻市 川嶋
  • 専門知識のある経験豊富な方に出会う機会のない人でも、このサイトで実現出来ることは素晴らしいことだと思いました。 専門家が辛抱強く回答をしてくださる姿勢にも感謝いたしました。 茨城県日立市 池田
 
 
 

専門家の紹介:

 
 
 
  • DKK2002

    DKK2002

    ITエンジニア

    満足した利用者:

    711
    NTTコミュニケーションズ .com Master★★
  • http://ww2.justanswer.com/uploads/KW/kwskmkt/2011-7-4_13263_DSC04002.64x64.JPG DKK2002 さんのアバター

    DKK2002

    ITエンジニア

    満足した利用者:

    711
    NTTコミュニケーションズ .com Master★★
  • http://ww2.justanswer.com/uploads/RU/rushqk/2011-9-24_21937_CIMG0197.64x64.jpg rushqk さんのアバター

    rushqk

    ITエンジニア

    満足した利用者:

    94
    AV機器開発設計
  • http://ww2.justanswer.com/uploads/OC/oct1290/2012-4-17_123618_akodesu.64x64.JPG oct1290 さんのアバター

    oct1290

    ITエンジニア

    満足した利用者:

    38
    日本製PCメーカー顧客、企業サポート官庁PCサポート海外3店舗のPC修理業
  • http://ww2.justanswer.com/uploads/HO/holodecks/2011-10-21_0147_20111021091343.64x64.jpg holodecks さんのアバター

    holodecks

    情報整理戦略コンサルタント

    満足した利用者:

    2
    化学科卒システム計画研究所 - シニアシステムエンジニア、ディー・リンク株式会社 取締役
  • http://ww2.justanswer.com/uploads/SP/Spinnaker0921/2011-5-28_232633_Spinnaker.64x64.JPG Spinnaker0921 さんのアバター

    Spinnaker0921

    ITエンジニア

    満足した利用者:

    0
    PC/WS製造・サポート専門です。
  • http://ww2.justanswer.com/uploads/OB/obody/2015-6-17_162039_photo.64x64.jpg Nobody_1963 さんのアバター

    Nobody_1963

    ITエンジニア

    満足した利用者:

    58
    Windows Expert
  • /img/opt/shirt.png dueprocess さんのアバター

    dueprocess

    ITエンジニア

    満足した利用者:

    341
    中央大学卒・行政書士事務所経営・特定行政書士
 
 
 

IT・インターネット についての関連する質問