![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?a65a0e2)
ステップイン(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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで時間(00:00形式)を積算(足し算)したい 1 2022/11/15 17:04
- Visual Basic(VBA) ユーザーフォームに2つのコンボボックス銀行名「ConboBox1」支店名を「ConboBox2」とし 4 2022/08/03 17:34
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) 追記する列を増やしたい 2つのデータを検索・照合して元データにないデータを下記マクロで商品名を追記し 9 2022/10/05 10:50
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
このQ&Aを見た人はこんなQ&Aも見ています
-
【お題】大変な警告
【大喜利】「今このパソコンは大変危険な状態です」という警告メッセージを無視してパソコンを開いたら、こんなことが起こった
-
歳とったな〜〜と思ったことは?
歳とったな〜〜〜、老いたな〜〜と思った具体的な瞬間はありますか?
-
最強の防寒、あったか術を教えてください!
とっても寒がりなのですが、冬に皆さんがされている最強の防寒、あったか術が知りたいです!
-
あなたなりのストレス発散方法を教えてください!
自分なりのストレス発散方法はありますか?
-
集中するためにやっていること
家で仕事をしているのですが、布団をはじめ誘惑だらけでなかなか集中できません。
-
エクセルVBA、ステップモードと結果が異なる
その他(Microsoft Office)
-
セルのコピーで「オブジェクトが必要です。」
Visual Basic(VBA)
-
【VBA】ボタンで実行するとうまく作動しません。
Excel(エクセル)
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
-
列方向、行方向の定義
-
土日の列幅の自動変更を教えて...
-
横軸を日付・時間とするグラフ化
-
LEFT関数とIF関数の組み合わせ...
-
エクセルマクロPrivate Subを複...
-
エクセルのソートで、数字より...
-
エクセル マクロ 範囲指定で...
-
Accessのレポートで繰り返し表...
-
ListViewで列を指定して表示さ...
-
EXCELを最大にて開いた際、特定...
-
VBAで結合セルを転記する法を教...
-
Excel文字列一括変換
-
VLOOKUPの列番号の最大は?
-
VBA 指定した列にある日時デー...
-
CSVファイルの「0落ち」にVBA
-
エクセルで?
-
Excelの行数、列数を増やしたい...
-
csvに別のExcelの文章を差し込む
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
-
VLOOKUPの列番号の最大は?
-
LEFT関数とIF関数の組み合わせ...
-
VBA 指定した列にある日時デー...
-
Excelの行数、列数を増やしたい...
-
エクセル マクロ 範囲指定で...
-
列方向、行方向の定義
-
Excel文字列一括変換
-
エクセルのソートで、数字より...
-
エクセルマクロの組み方
-
エクセルでセル12個間隔で合...
-
VBAで結合セルを転記する法を教...
-
エクセルマクロPrivate Subを複...
-
ListViewで列を指定して表示さ...
-
エクセルで最初の行や列を開け...
-
横軸を日付・時間とするグラフ化
-
CSVファイルの「0落ち」にVBA
-
VBAで別ブックの列を検索し、該...
-
エクセルの行を65536以上に増や...
おすすめ情報