ステップイン(F8)で実行するとうまくいくのに、通常実行するとエラー等はでませんが、数字を取ってくることができません。
どのように改善すると通常実行でも期待通りの結果が得られるのでしょうか。よろしくお願いします。
変数に5桁のAcc_ID(12345)を代入し、外部データX.xlsxの特定のシート内に該当するIDがあれば、次の列にある毎月の入金額をthisworkbookに入力するマクロを作っています。(宣言するところは省略します)
外部データX.xlsxはこのようなレイアウトになっています。
123451月2月3月
入金額100200300
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
Dim m As Integer
For m = 0 To 11 '---12か月
ThisWorkbook.Worksheets(MySheet).Cells(20, 9 + m ) = .Cells(R_X_Acc + 1, 1 + m)
Next m
End If
End With
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
それでは
早速ありがとうございます。うまく動きました。
説明に不足がありまして申し訳ありません。ご想定の通りです。
ネットや本をみて見よう見まねで作っているのでそれぞれのコードをよく理解していませんでした。。。
改めましてありがとうございます。助かりました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
好きな人を振り向かせるためにしたこと
大好きな人と会話のきっかけを少しでも作りたい、意識してもらいたい…! 振り向かせるためにどんなことをしたことがありますか?
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
あなたの「プチ贅沢」はなんですか?
お仕事や勉強などを頑張った自分へのご褒美としてやっている「プチ贅沢」があったら教えてください。
-
人生でいちばんスベッた瞬間
誰しも、笑いをとろうとして失敗した経験があると思います。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
エクセルVBA、ステップモードと結果が異なる
その他(Microsoft Office)
-
セルのコピーで「オブジェクトが必要です。」
Visual Basic(VBA)
-
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
-
4
【VBA】ボタンで実行するとうまく作動しません。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・ことしの初夢、何だった?
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「段」と「行」の違いがよくわ...
-
LEFT関数とIF関数の組み合わせ...
-
エクセルでセル12個間隔で合...
-
エクセルで離れた列を選択して...
-
列方向、行方向の定義
-
VBAで別ブックの列を検索し、該...
-
エクセル マクロ 範囲指定で...
-
VBAで結合セルを転記する法を教...
-
CSVファイルの「0落ち」にVBA
-
エクセルで最初の行や列を開け...
-
☆Excel VBAでAVERAGE関数を使う...
-
VLOOKUPの列番号の最大は?
-
Excelの行数、列数を増やしたい...
-
VBA 指定した列にある日時デー...
-
データシートビューのタイトル...
-
Accessのレポートで繰り返し表...
-
マクロ 降順のソートをすると全...
-
エクセルで、ある列で同じ値が...
-
Excel マクロ ファイル名取得に...
-
エクセルマクロで表の途中の集...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
-
VLOOKUPの列番号の最大は?
-
LEFT関数とIF関数の組み合わせ...
-
VBA 指定した列にある日時デー...
-
Excelの行数、列数を増やしたい...
-
列方向、行方向の定義
-
エクセルマクロの組み方
-
エクセルマクロPrivate Subを複...
-
VBAで別ブックの列を検索し、該...
-
データシートビューのタイトル...
-
CSVファイルの「0落ち」にVBA
-
エクセルのソートで、数字より...
-
Excel文字列一括変換
-
リストからデータを紐付けしたい
-
エクセルで最初の行や列を開け...
-
エクセルで複数列の検索をマク...
-
VBAで結合セルを転記する法を教...
-
エクセル マクロ 範囲の値を上...
-
エクセル マクロ 範囲指定で...
おすすめ情報