- ベストアンサー
マクロのマスター検索のルーチンで困ってます
下記のようなフローを作成し、下記のマクロを組んでみたのですが、エラーで困ってます。どなたか教えてください。 (フローを貼り付けられないので、ごめんなさい) 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
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#01です。 >Worksheets(AA) >Worksheets(0708) シート名を指定するときは Worksheets("AA") Worksheets("0708") のように引用符で囲む必要があります。 あと、「エラーになりました」と書く場合は必ずエラーコードを書きましょう。今回の場合はミスが明らかななのでよいですが、エラーコードがないとわからない場合も多いです。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
直接質問と関係ないこともあるが >フローを貼り付けられないので、ごめんなさい フローは表現しにくいが、使うブック名、シート名、セル名などは整理して書けるでしょう。既回答者はベテランだから判ったのだと思うけれど、普通はコードは読解に苦労する。 箇条書きで処理を説明も出来ると思う。 ーー >Windows(g_book).Activate Range("A4").Select g_cc = ActiveCell 一々Activateする必要が無い書き方が出来る場合があるということ。 ーー また上記のようなのを、いつまでも続けてないで シート名ぐらいまでを Set Ws1=ブック名.シート名 ぐらいで定義して セルはWh1.Range(・・)などで参照できると思うよ。 コードの見通しがくっと良くなる。
- zap35
- ベストアンサー率44% (1383/3079)
元のコードを生かすとしたら 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) = 左端のシート にしましたが、実際のシート構成が違うのなら修正してください
お礼
申し訳ありませんが、初心者である私に、補足での内容を教えて頂きたくお願いいたします。
補足
下記のところでエラーとなってしまいました。 いろいろと「オンラインヘルプ」で、試したのですが、良かったら教えてください。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」です。
お礼
ありがとうございました。 ””で囲むことも忘れていたことをお許しください。 また、エラーコードをお知らせすることをしなかったことは、大変申し訳ありませんでした。 早速やってみてよくわかりました。 ありがとうございました。