• ベストアンサー

マクロのマスター検索のルーチンで困ってます

下記のようなフローを作成し、下記のマクロを組んでみたのですが、エラーで困ってます。どなたか教えてください。 (フローを貼り付けられないので、ごめんなさい) Sub Macro() '必要なファイルを読み込む Workbooks.Open Filename:="C:\Documents and Settings\Administrator\My Documents\売上げデーター\seihin_m.xls" Workbooks.Open Filename:="C:\Documents and Settings\Administrator\My Documents\売上げデーター\s0708.xls" Dim g_book As String Dim m_book As String g_book = "s0708.xls" m_book = "seihin_m.xls" '検索用変数 Dim M_cc As String 'マスター製品コード Dim g_cc As String '月次製品コード Windows(g_book).Activate Range("A4").Select g_cc = ActiveCell Windows(m_book).Activate Range("A2").Select M_cc = ActiveCell 'If g_cc <> "" Then  '月次データーがスペースなら、END Do While M_cc <> g_cc     ※この行と次の行でエラー M_cc Offset(1, 0).Select Loop M_cc = ActiveCell.Value Windows("売上推移.xls").Activate Range("B1").Value = g_cc Range("A1").Value = M_cc '次の月次データーコードを読み込みマスターと検索に戻る End Sub

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

#01です。 >Worksheets(AA) >Worksheets(0708) シート名を指定するときは Worksheets("AA") Worksheets("0708") のように引用符で囲む必要があります。 あと、「エラーになりました」と書く場合は必ずエラーコードを書きましょう。今回の場合はミスが明らかななのでよいですが、エラーコードがないとわからない場合も多いです。

npsw
質問者

お礼

ありがとうございました。 ””で囲むことも忘れていたことをお許しください。 また、エラーコードをお知らせすることをしなかったことは、大変申し訳ありませんでした。 早速やってみてよくわかりました。 ありがとうございました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

直接質問と関係ないこともあるが >フローを貼り付けられないので、ごめんなさい フローは表現しにくいが、使うブック名、シート名、セル名などは整理して書けるでしょう。既回答者はベテランだから判ったのだと思うけれど、普通はコードは読解に苦労する。 箇条書きで処理を説明も出来ると思う。 ーー >Windows(g_book).Activate Range("A4").Select g_cc = ActiveCell 一々Activateする必要が無い書き方が出来る場合があるということ。 ーー また上記のようなのを、いつまでも続けてないで シート名ぐらいまでを Set Ws1=ブック名.シート名 ぐらいで定義して セルはWh1.Range(・・)などで参照できると思うよ。 コードの見通しがくっと良くなる。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

元のコードを生かすとしたら  Do While M_cc <> g_cc     ※この行と次の行でエラー   ActiveCell.Offset(1, 0).Select   M_cc = ActiveCell.Value  Loop ではないでしょうか。元コードは最初からエラーで動かないでしょう。 またマスタに該当するコードがないときはシートの最後の行までOffset(1, 0).Selectを繰り返してエラーになりますよ。 もし検索にFindメソッドを使うならこんな感じでしょう。ただしテストはしていませんので悪しからず。 Sub Macro1() Dim g_book As String Dim m_book As String '検索用変数 Dim trg As Range '必要なファイルを読み込む   Workbooks.Open Filename:="C:\Documents and Settings\Administrator\My Documents\売上げデーター\seihin_m.xls"   Workbooks.Open Filename:="C:\Documents and Settings\Administrator\My Documents\売上げデーター\s0708.xls"   g_book = "s0708.xls"   m_book = "seihin_m.xls"   Set trg = Workbooks(m_book).Worksheets(1).Range("A:A").Find( _     what:=Workbooks(g_book).Worksheets(1).Range("A4").Value, Lookat:=xlValues, LookIn:=xlWhole)   If trg Is Nothing Then     MsgBox "マスタに該当レコードなし"   Else     Workbooks("売上推移.xls").Worksheets(1).Range("B1").Value _       = Workbooks(g_book).Worksheets(1).Range("A4").Value     Workbooks("売上推移.xls").Worksheets(1).Range("A1").Value = trg.Value   End If End Sub なお質問のマクロにはワークシート名が書かれていないのも気になります。上記マクロでは全てWorksheets(1) = 左端のシート にしましたが、実際のシート構成が違うのなら修正してください

npsw
質問者

お礼

申し訳ありませんが、初心者である私に、補足での内容を教えて頂きたくお願いいたします。

npsw
質問者

補足

下記のところでエラーとなってしまいました。 いろいろと「オンラインヘルプ」で、試したのですが、良かったら教えてください。FINDを知らなかったので、すいません。 Set trg = Workbooks(m_book).Worksheets(AA).Range("A:A").Find( _ what:=Workbooks(g_book).Worksheets(0708).Range("A4").Value, Lookat:=xlValues, LookIn:=xlWhole) なお、シート名ですが、m_bookでは、「AA」g_bookでは、「0708」です。

関連するQ&A