• ベストアンサー

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

下記のようなフローを作成し、下記のマクロを組んでみたのですが、エラーで困ってます。どなたか教えてください。 (フローを貼り付けられないので、ごめんなさい) 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

  • npsw
  • お礼率33% (35/103)

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

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

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

npsw
質問者

お礼

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

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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

  • エクセルのマクロ

    お世話になります。 Book1.xlsというファイルから、不特定のファイルを開き、一定の作業の後、閉じる場合のマクロについて伺います。 name1、name2のファイルを開き、vlookup関数を入力する場合のマクロの記載は、サイトを検索し、下記のようにすればできました。 Dim name1 As String Dim name2 As String sub macro1() 省略 Workbooks.Open Filename:=name1 Workbooks.Open Filename:=name2 Windows("Book1.xls").Activate Range("C6").Select ActiveCell.FormulaR1C1 = _ "=VLOOKUP(RC1,'[" & name1 & "]sheei1'!C1:C155,R1C,FALSE)" Range("C7").Select ActiveCell.FormulaR1C1 = _ "=VLOOKUP(RC1,'[" & name2 & "]sheei1'!C1:C155,R1C,FALSE)" (省略) ***************************** Windows("name1").Activate ActiveWindow.Close  Windows("name2").Activate ActiveWindow.Close ***************************** として、呼び出したファイルを(保存せず)閉じたいのですが、("name1")("name2")の部分の記載方法を教えてください。よろしくお願いします。

  • エクセルVBAで、複数のブックからデータベースを作りたい

    こんにちは。VBAをはじめたばかりの者です。 変数の使い方で教えていただきたいことがあります。 Dim myFLName As String myFLName = ThisWorkbook.Path & "\001.xls" Workbooks.Open Filename:=myFLName, ReadOnly:=True Workbooks("dbase.xls").Activate Range("A2").Select ActiveCell.Value = 1 ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("R3") ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("C2") ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("R2") ActiveCell.Offset(1, -3).Select 001.xls~(連番でない)200.xlsくらいまでのファイルがあり、 同じフォルダにdbase.xlsを作って1ブックから1レコードになるようにしたいと 思います。 こんな感じで1行目はできたのですが、2行目の1列目に「2」を入れ、 2列目からは001.xlsの次のブックを開いてセルの中身をコピーしたいのです。 変数の使い方がよくわからないのですが、教えていただけますでしょうか。 よろしくお願いいたします。

  • 毎回最終セルを探す。

    お世話になります。 マクロは組めないので、 マクロの記録で作ってみましたが、 ActiveCell.SpecialCells(xlLastCell).Select Range("A8356").Select これは、ctrl+end で、最終行を選び、 Home で、A列に行き、カーソルで1行下げました。 そうすると、("A8356")と、固定されてしまい、 次の『Book2』のデータは、下に蓄積されずに、 同じところから上書きをされてしまいます。 ちなみに、全文を載せさせていただきます。 どうすればよいのでしょうか? よろしくお願い致します。 ActiveCell.SpecialCells(xlLastCell).Select Range("A8356").Select Workbooks.Open Filename:= _ "C:\Documents and Settings\t.t\My Documents\Book2.xls" Range("A1").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.Copy Windows("6965.xls").Activate ActiveSheet.Paste ActiveWindow.SmallScroll ToRight:=8 Columns("T:T").Select Range("T8327").Activate Application.CutCopyMode = False Selection.Style = "Comma [0]" ActiveWorkbook.Save Windows("Book2.xls").Activate ActiveWindow.Close ActiveCell.SpecialCells(xlLastCell).Select Range("A8409").Select End Sub

  • ■ エクセルマクロについてです。初級?

    エクセルのマクロでデスクトップにあるエクセルファイルを開くにはどうしたらいいのでしょうか? 現在は、エクセルファイルA.xls B.xlsという2つを開いていて、マクロを実行することができるのですが、これをA.xlsだけ開いている上体で、実行したいのです。 なので、デスクトップに置いてあるB.xlsファイルを開くコマンド?というか、関数が知りたいのですが、どうしたらいいのでしょうか? 現在はこのような感じになっております。 Sub Macro2() ' ' Macro2 Macro ' マクロ記録日 : 2008/9/10 ユーザー名 : ' ' ActiveCell.FormulaR1C1 = "12345" Range("G17").Select ActiveCell.FormulaR1C1 = "129876" Range("G18").Select Windows("B.xls").Activate Range("N16").Select ActiveCell.FormulaR1C1 = "8/4/2008" Range("N17").Select ActiveWorkbook.Save Range("O16").Select ActiveWorkbook.Save ActiveWindow.Close End Sub

  • 2013VBでオーバーフローエラー(2)

    よろしくお願いします。 前回の質問ではエラーの出た部分しか表示していなかった為、回答して頂いた方に 十分な情報が提供できずすみませんでした。 下記がエラーの出た部分までの全プログラムです。 Dim book1 As String 'ブック名1 Dim book2 As String 'ブック名2 Dim book3 As String 'ブック名3 Dim book4 As String 'ブック名4 Dim myday As Date Dim ITI1 As String 'アドレスの格納 Dim ITI2 As String 'アドレスの格納 Dim ITI3 As String 'アドレスの格納 Dim ITI4 As String 'アドレスの格納 Dim ITI5 As String Dim ITI6 As String Dim ITI7 As String Dim ITI8 As String Dim myRange As Range 'コードの個数 Dim myRange1 As Range Dim answer As Integer Dim bunki1 As Integer Dim c As Double 'カウント Dim n As Double 'カウント 'ワークブックの設定 Workbooks("A.xls").Activate book1 = Worksheets("ブックシート設定").Range("c3") 'コピー元 'book2 = Worksheets("ブックシート設定").Range("c5") book3 = Worksheets("ブックシート設定").Range("c7") 'A 'book4 = Worksheets("ブックシート設定").Range("c9") bunki1 = Worksheets("ブックシート設定").Range("c16") myday = Worksheets("ブックシート設定").Range("c14") 'コピー元非表示を表示にする Workbooks(book1).Activate Sheets("B").Select Sheets("B").Select Columns("G:J").Select Selection.EntireColumn.Hidden = False Columns("j:q").Select Selection.EntireColumn.Hidden = False 'コードの個数を数える Workbooks(book1).Activate Sheets("B").Select ITI4 = Range("b65536").End(xlUp).Address '----b列の最終行から上方向の終端セルを選択 Set myRange = Worksheets("B").Range("b6", ITI4) answer = Application.WorksheetFunction.Count(myRange) Set myRange1 = Worksheets("B").Range("e8") For c = 1 To answer 'データー個数のカウント If myRange1.Offset(c) = myday Then n = n + 1 Next 'オーフィルターの設定 Workbooks(book1).Activate Sheets("B").Select ITI1 = Range("b65536").End(xlUp).Address '----b列の最終行から上方向の終端セルを選択 ITI7 = Range(ITI1).Offset(, 11).Address Range("a8", ITI7).AutoFilter FIELD:=5, Criteria1:=Format(myday,"yyyy/m/d") >>>>>ここでオーバーフローエラー 前回指摘されたCriteria1:=mydayをCriteria1:=Format(myday,"yyyy/m/d") に追加変更しました。 読みにくいかもしれませんがよろしくお願いします。

  • エクセルマクロ フォルダ内のファイル検索で

    よろしくおねがいします。 下記で、どうも指定フォルダ内のファイル名を検索できていないようで 条件の"ないなら"に反応して中断するハズがファイルを開いてしまいます。 思ったのですが、bufの設定にファイル名は指定できないのでしょうか? Sub Start8() Dim buf As String, IptA As String Const Path As String = "C:\001\" IptA = Workbooks("AAA.xls").Sheets("Sheet1").Cells(1, 1).Value buf = Dir(Path & "" & IptA & ".txt") If buf = "" Then Range("A2").Select ActiveCell.FormulaR1C1 = "" & IptA & "は見つかりません" Exit Sub Else Range("A2").Select ActiveCell.FormulaR1C1 = "" & IptFN & "が見つかりました" End If Workbooks.OpenText Filename:= _ "C:\001\" & IptA & ".txt" End Sub

  • エクセル 検索コピーマクロ

    マクロで検索、抽出して別ファイルに保存したいのですが、 以下のようなマクロを教えてもらったのですが コピー先のセル位置を任意の位置に直したいのですが、 どうしてもわかりません どの部分をどう直せばよいのでしょうか? Option Explicit Sub copyTodayData() Dim dateToday As String Dim tempDate As String Dim lastrow1 As Long Dim lastrow2 As Long Dim i As Long Dim fileA As String Dim anotherBook As String Dim anotherFilePath As String fileA = ThisWorkbook.Name anotherBook = "別のファイル.xls" anotherFilePath = "C:\Documents and Settings\日本太郎\デスクトップ\どこかのフォルダ" '問い合せダイアログの表示をOFFにします Application.DisplayAlerts = False 'ファイルを開く ChDir anotherFilePath Workbooks.Open Filename:=anotherFilePath & "\" & anotherBook '問い合せダイアログの表示をONに戻します Application.DisplayAlerts = True 'ウインドウの切替 Windows(fileA).Activate '今日の日付を取得 dateToday = Date 'データ最終行を取得 lastrow1 = Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To lastrow1 If Cells(i, 1) = dateToday Then 'Range(Cells(i, 1), Cells(i, 4)).Copy 'コピー Windows(anotherBook).Activate 'ウインドウの切替 lastrow2 = Cells(Rows.Count, 1).End(xlUp).Row '別ブックの最終行 Cells(lastrow2 + 1, 1).Select ActiveSheet.Paste Windows(fileA).Activate 'ウインドウの切替 End If Next i MsgBox "実行しました" End Sub たぶん、lastrow2 = Cells(Rows.Count, 1).End(xlUp).Row '別ブックの最終行 Cells(lastrow2 + 1, 1).Select ここらへんというのは、わかりますが、 どこをどう変えたらいいかわかりません

  • エクセル2000マクロ操作

    ネッワーク上でつながっているクライアントパソコンのファイルを よみに行く操作を変数を使って処理しようとしていますがうまくいきません ロジックは下記の通りです。 Dim namae As String  Range("k3").Select 'k3にはパソコン名pcs17694が入っています。 namae = ActiveCell.Value ActiveCell.Value = namae Workbooks.Open(Filename:="\\namae\c\機器管理\masuta.xls").RunAutoMacros Which:= _ xlAutoOpen 教えてください。 以上

  • マクロの意味について

    下記の様なマクロがあります。意味が理解できていません。 教えてもらえないでしょうか。 Windows("aaa.XLS").Activate Dim tbl, gyo, burank Range("i4").Select Set tbl = ActiveCell.CurrentRegion tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1, tbl.Columns.Count).Select Stop Selection.Copy Windows("bbb.XLS").Activate Sheets("ccc").Select Range("B2").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Application.CutCopyMode = False Range("A2").Select Application.CutCopyMode = False ActiveCell.Formula = "=B2&C2&D2" Range("A2").Select Selection.Copy gyo = 0 Do gyo = gyo + 1 burank = Worksheets("ccc").Cells(gyo, 2).Text Loop While burank <> "" Range(Cells(3, 1), Cells(gyo - 1, 1)).Select    ActiveSheet.Paste Application.CutCopyMode = False Range("A2").Select

  • エクセルマクロ教えて下さい。

    業務の中でエクセルマクロによる効率化が望めそうなので見様見真似でマクロを作ってみました。 動作は思った通り行くのですが検索が上手くいきません。 どなたかご教示お願い致します。 以下コード Dim Ran As String Dim Hn As String Dim i As Long i = 0 Do While i < 300 Ran = 1+i Hn = Range("K" + (Ran)) Cells.Find(What:=(Hn), After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False, SearchFormat:=False).Activate ActiveCell.Offset(0, -7).Activate Range("G" + (Ran), "K" + (Ran)).Cut ActiveCell i = i + 1 Loop End Sub 上記コードのFIND文で検索をした際にセルの値が100やB50等は正常に見つかるのですが 100Aや100E等数値の後に英語がくるとFindの検索にひっかかりません。 改善しようと努力してみたもののわかりませんでした。 添削やアドバイス、改善方法を教えて下さい。

専門家に質問してみよう