• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel/VBA ステップインと通常実行の違い)

Excel/VBA ステップインと通常実行の違い

nayuta_lotの回答

  • ベストアンサー
回答No.1

こんにちは >該当するIDがあれば、次の列にある毎月の入金額をthisworkbookに入力する          : >外部データX.xlsxはこのようなレイアウトになっています。 >123451月2月3月 >入金額100200300 データの持ち方ですが、4列目(D列)にIDコードを記入していて、 金額はIDコードの1行下のE列から記入されているということでしょうか?             ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  D  E  F  G 12345 1月 2月 3月     100  200  300 データのレイアウトを見る限り、そう解釈できるのですが・・ このあたりは、VBAの解釈について影響を与えるので正確に説明しましょう。 その前提で回答します。 1)R_X_Acc = .Cells.Find(Acc_ID).End(xlDown).Row  の.End(xlDown)はいりません。  連続したデータの最終行を取得するためのコードです。 あと、.Cellsはいらないのでは  ないでしょうか? 検索結果の位置を取得するためには   R_X_Acc = .Find(Acc_ID).Row  でよいと思います。 2)For ~ nextの中にある  ThisWorkbook.Worksheets(MySheet).Cells(20, 9 + m) = .Cells(R_X_Acc + 1, 1 + m)  この文ですが、1)に関連していますが、.Cells(R_X_Acc + 1, 1 + m)  つまり、R_X_Acc + 1は、 1)で取得した行+1行目を指定していますね。  ※検索値が該当した行+1行目  データが取得できていないのは、このR_X_Accを取得する際に、.End(xlDown)を使っているために  正しい位置を取得できていないことが原因ではないでしょうか?  また、1 + m とありますが、Withで、   With Workbooks("外部データX.xlsx").Worksheets("入金").Columns(4)  と指定していますので    Workbooks("外部データX.xlsx").Worksheets("入金").Columns(4) _       .Cells(R_X_Acc + 1, 1 + m)  となります。   .Columns(4).Cells(R_X_Acc + 1, 1 + m)という使い方はしたことはありませんが、  Columns(4)を受けて、後ろのCells(x,y)のyは、1がD列となり、2はE列、3はF列と  なるようですね。  従って、上記はD列 + mとなります。(m = 0~11)  金額をE列から置いているなら  ThisWorkbook.Worksheets(MySheet).Cells(20, 9 + m) = .Cells(R_X_Acc + 1, 2 + m)  とします。 それから、宣言の記載等を省略していますが、このような質問をするときは、きちんと載せて おきましょう。 そこに問題があるかもしれませんので・・ また、スキップ動作(F8)では上手く動いたというのは、よくわかりません。 普通にやれば、問題なく結果がでると思いますが・・ スキップでやった時にも、きちんと結果はでていましたか? エラーが出なくても、論理的なエラーもありますので、結果を確認してください。 以下、私のほうで動いた内容を記載しておきます。 <以下 参考> Sub test() Dim Acc_ID As Integer Dim X_Acc_ID As Object Dim R_X_Acc As Integer Dim MySheet As String MySheet = "MySheet" Acc_ID = 12345 With Workbooks("外部データX.xlsx").Worksheets("入金").Columns(4) Set X_Acc_ID = .Find(Acc_ID) If X_Acc_ID Is Nothing Then Else '列番号を取得 'R_X_Acc = .Cells.Find(Acc_ID).End(xlDown).Row ← .End(xlDown)はいらない '      ↑ このCellsはいらないのでは? R_X_Acc = .Find(Acc_ID).Row Dim m As Integer For m = 0 To 11 '---12か月 'ThisWorkbook.Worksheets(MySheet).Cells(20, 9 + m) = .Cells(R_X_Acc + 1, 1 + m) ← 1 + mではない ThisWorkbook.Worksheets(MySheet).Cells(20, 9 + m) = .Cells(R_X_Acc + 1, 2 + m) Next m End If End With End Sub それでは

mami7172
質問者

お礼

早速ありがとうございます。うまく動きました。 説明に不足がありまして申し訳ありません。ご想定の通りです。 ネットや本をみて見よう見まねで作っているのでそれぞれのコードをよく理解していませんでした。。。 改めましてありがとうございます。助かりました!

関連するQ&A

  • 【Excel VBA】データ貼り付けの開始位置について

    Excel2003を使用しています。 先日、こちらでアドバイスをいただきながら、下記のようなマクロを作りました。内容はあるセルの値と同じ名前のシートへデータをコピーするというものです。 Sheet1に貼り付け元のデータが表形式であり、必要なデータのみ該当のシートへコピーします。マクロ実行後は、別の新しいデータをSheet1へコピペして、またマクロを実行するのですが、その際、データの貼り付け開始位置を前回マクロを実行して貼り付けられたデータから2行空けたいのですが、可能でしょうか? ________________________________________________________________________________________________________________________________ Sub test3() Dim n As Long Dim i As Long Dim j As Long  Worksheets("Sheet1").Activate   For n = 4 To Cells(Rows.Count, 2).End(xlUp).Row    If Cells(n, 3).Value <> "" Then     With Worksheets(CStr(Cells(n, 3).Value))       i = .Cells(Rows.Count, 3).End(xlUp).Row + 1       Cells(n, 2).Copy .Cells(i, 2)       Cells(n, 7).Resize(, 2).Copy .Cells(i, 4)       Cells(n, 11).Copy .Cells(i, 3)     End With    End If    If Cells(n, 13).Value <> "" Then     With Worksheets(CStr(Cells(n, 13).Value))       j = .Cells(Rows.Count, 3).End(xlUp).Row + 1       Cells(n, 12).Copy .Cells(j, 2)       Cells(n, 17).Copy .Cells(j, 4)       Cells(n, 18).Copy .Cells(j, 6)       Cells(n, 11).Copy .Cells(j, 3)     End With    End If   Next n End Sub

  • VBA ワークシートオブジェクトがうまく使えない

    以下のサブプロシージャ、動きません。 Sub main() Dim Thissheet As Worksheet Set Thissheet = ActiveSheet Workbooks.Open Filename:="Book2.xlsx" Range("A1").Copy Destination:=ThisWorkbook.Thissheet.Cells(1, 1) Range("B1").Copy Destination:=ThisWorkbook.Thissheet.Cells(1, 2) ActiveWindow.Close End Sub 機能:Book1.xlsxで上記マクロを起動すると、Book2.xlsxを開きセルの一部ををBook1にコピーし、閉じる エラーメッセージ: コンパイルエラー メソッドまたはデータ メンバーが見つかりません。 Range("A1").Copy Destination:=ThisWorkbook.Thissheet.Cells(1, 1) この行のThissheet.で引っかかります。 ちなみにThissheetの代わりにWorksheets(1)を用いるとうまくいきます。 Thissheetを用いた場合、何がマズイのでしょうか? 以下の認識で書いてますが、誤りあるでしょうか? ThisWorkbook=マクロが納められているワークブック、つまりBook1.xlsx Activesheet= 行を実行した時にアクティブになっているワークシート、ここではBook1.xlsxのマクロ起動時のワークシート

  • EXCEL2000とEXCEL2003のVBAについて

    現在、EXCEL2000で下記のコードを実行しています。 が、EXCEL2003で実行すると、 .UsedRange.Copy myb のコードが実行されているのにコピー出来ていません。 ファイルは開いていて、エラーは出ていないのです。 問題点わかる方教えていただけますか? Sub 日別データ読込() Dim rngsaki As Range Dim pathmacrobook As String Dim namebook As String Dim motobook As Workbook Dim myb As Variant Set rngsaki = Workbooks("残高集計用.xls").Worksheets(3).Range("a2") pathmacrobook = ThisWorkbook.Path & "\CSV読込データ12\" namebook = Dir(pathmacrobook & "*.xls") Do While Not namebook = "" Set motobook = Workbooks.Open(pathmacrobook & namebook) Set myb = Workbooks("残高集計用.xls").Worksheets(3).Range("A65536").End(xlUp) With motobook.Worksheets("Sheet1") .UsedRange.Copy myb End With motobook.Close False namebook = Dir() Loop MsgBox "完了しました" End Sub

  • VBA 実行時エラー'1004' オートフィルタ

    お世話になります。Excel2003を使っております。 初歩的なことかもしれませんが、 原因がよくわかっていないため、教えて下さい。 フォームにあるコンボボックスのデータ 特定のシートの絞り込みを行います。 '========================= If ComboBox1 <> "" Then '空じゃないときに実行 With ThisWorkbook.Worksheets("データ") .Select .Range("A1").Select .Range("A1").AutoFilter Field:=ThisWorkbook.Worksheets("データ").Range("E1").Column, _ Criterial:=Me.ComboBox1.Text End With End if '========================= 上記のようなプログラムを書いてみましたが、 何故かエラーが出ます。 このような書き方ではまずいのでしょうか? 前までは、 '========================= Worksheets("データ").Select '基データを選択 If ComboBox1.Text <> "" Then '製品名が空じゃない場合 Selection.AutoFilter Field:=Range("E1").Column, _ Criteria1:=ComboBox1.Text End If '================== 上記の方法で行っていました。(上手くいっていました。) SELECT(Selection)を使うのはあまり良くないと聞いたため このようにWithを使って書いているのですが 実行時エラー '1004' アプリケーション定義またはオブジェクト定義のエラーです。 と出ます。 回答よろしくおねがい致します。

  • エクセルVBAで実行時エラー 91 が出ます

    エクセル2000です 各部署の棚卸を纏める為のVBAを作成しているのですが、実行時にエラーになってしまいます エラーメッセージは 「実行時エラー 91   オブジェクト変数またはWithブロック変数が設定されていません」 です ご教授お願いいたします Sub 棚卸() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("在庫集計票") Set sh2 = Worksheets("棚卸表") x = sh2.Range("A65536").End(xlUp).Row Z = sh1.Range("d2").Value ’部署番号 sh1.Range(Cells(5, Z), Cells(3000, Z)).ClearContents For i = 2 To x y = sh1.Range("A2:A" & Range("A2").End(xlDown).Row). _ Find(sh2.Cells(i, "a")).Row ’ここでエラーが発生します sh1.Cells(y, Z) = sh2.Cells(i, "c") Next i End Sub

  • VBA

    次のように偏差値を求めるプログラムを書くと、アプリケーションの定義エラーと表示されます。誰か理由をお教えください。 Sub hensati() With Worksheets("C") For i = 2 To 43 x = Cells(G, 1) y = Cells(G, 2) Cells(i, 3) = (Cells(i, 2) - x) / y * 10 + 50 Next i End With End Sub

  • Excel VBA 指定シートの取込

    こんにちは。 ExcelのVBAを使用して、異なるBookのシートを取込みたいのですが、 シートが無かった場合の処理方法がわかりません。 現在のコードは下記の様になっております。 With Workbooks.Open"BOOK1.xls" .Worksheets("Sh1").Cells.Copy ThisWorkbook.Sheets("Sheet1").Range("A1") .Worksheets("Sh2").Cells.Copy ThisWorkbook.Sheets("Sheet2").Range("A1") .Worksheets("Sh3").Cells.Copy ThisWorkbook.Sheets("Sheet3").Range("A1") .Close End With Book1に指定したシートが無い場合、何もしないようにしたいのですが、 どの様に書き換えれば宜しいでしょうか? よろしくお願いします。

  • VBA 初心者

    sheet1から、sheet2データを検索して抽出する練習をしているのですがerror"1104"が表示されます、なぜなのか分からないので投稿しました、よろしくお願いします。 sub test() dim sh1 as worksheets dim sh2 as worksheets dim  i  as  integer set sh1 = thisworkbook.worksheets("sheet1!") set sh2 = thisworkbook.worksheets("sheet2!") b = userform1.textbox1 for i = 1 to 10 sh1 .cells(i,2) = b b = b+1 x = sh1.cells(1,2) sh1.cells(i,3).value = worksheetfunction.vlookup(x,sh2.range("a1:d500"),2,false) next i end sub

  • VBA のコードについて

    すみません、以前にも同じようなご質問をさせて頂いたのですが、どうしても以下のマクロがうまく機能しません。 新しいブックは作成されるのですが、End If以降の検索結果が反映(コビー)されません。 コードに問題があるかアドバイス頂けますと幸いです。 どうぞ宜しくお願いいたします。 Sub sort() Dim i As Long Dim grp As String Dim newBookName As String Dim newBookPath As String Dim newBook As Workbook For i = 2 To 4 LOB = Workbooks("test").Worksheets("grpリスト").Cells(i, 2) newBookName = Workbooks("test").Worksheets("grpリスト").Cells(i, 2) & ".xlsx" newBookPath = ThisWorkbook.Path & "\" & newBookName '指定したパスにファイルが作成済でないかを確認。 If Dir(newBookPath) = "" Then '新しいファイルを作成 Set newBook = Workbooks.Add '新しいファイルをVBAを実行したファイルと同じフォルダ保存 newBook.SaveAs newBookPath Else '既に同名のファイルが存在する場合はメッセージを表示 MsgBox "既に" & newBookName & "というファイルは存在します。" End If With Workbooks("test").Worksheets("マスタ0701").AutoFilterMode = False With .Range(Cells(3, "B"), Cells(Rows.Count, "CK").End(xlUp)) .AutoFilter Field:=13, Criteria1:=grp '.CurrentRegion.Select Range(Cells(3, "B"), Cells(Rows.Count, "CK").End(xlUp)).SpecialCells(xlVisible).copy Workbooks(grp).Worksheets("Sheet1").Range("A1") '.AutoFilter End With End With Next i End Sub

  • EXCELのVBAについて教えてください。

    演習1というシートの(1,1)のセルの値と(1,2)のセルの値を入れ替えるプログラムを作成したいので すがエラーが出て出来ません。コードは下記の様に書きました。 Sub 演習1() Dim sheetobj As Worksheet Dim a As Integer Set sheetobj = ThisWorkbook.Worksheets("演習1") With sheetobj a = .Cells(1, 1) .Cells(1, 1) = .Cells(1, 2) .Cells(1, 2) = a End With End Sub プログラミング自体が本を読んでも分かりません。 宜しければ小学生に教えるように文を訳してくれませんか?