ステップイン(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も見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
治せない「クセ」を教えてください
なくて七癖という言葉どおり、人によっていろいろなクセがありますよね。 あなたには治せないクセがありますか?
-
【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
「出身中学と出身高校が混ざったような校舎にいる夢を見る」「まぶたがピクピクしてるので鏡で確認しようとしたらピクピクが止まってしまう」など、 これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
-
【穴埋めお題】恐竜の新説
【大喜利】 考古学者が発表した衝撃の新説「恐竜は、意外にもそのほとんどが〇〇〇」 (〇〇〇に入る部分だけを回答して下さい)
-
エクセルVBA、ステップモードと結果が異なる
その他(Microsoft Office)
-
セルのコピーで「オブジェクトが必要です。」
Visual Basic(VBA)
-
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
-
4
【VBA】ボタンで実行するとうまく作動しません。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】看板の文字を埋めてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
-
VBA 指定した列にある日時デー...
-
Excelの行数、列数を増やしたい...
-
VLOOKUPの列番号の最大は?
-
LEFT関数とIF関数の組み合わせ...
-
VBAで別ブックの列を検索し、該...
-
エクセルでセル12個間隔で合...
-
VBA 配列について
-
エクセルで複数列の検索をマク...
-
エクセル マクロ 範囲指定で...
-
データシートビューのタイトル...
-
CSVファイルの「0落ち」にVBA
-
列方向、行方向の定義
-
リストからデータを紐付けしたい
-
VBAで結合セルを転記する法を教...
-
マクロ 降順のソートをすると全...
-
横軸を日付・時間とするグラフ化
-
最終行に合計(最終行が列によ...
-
Alt+Shift+↑を一括で行うには、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
-
VLOOKUPの列番号の最大は?
-
LEFT関数とIF関数の組み合わせ...
-
Excelの行数、列数を増やしたい...
-
VBA 指定した列にある日時デー...
-
列方向、行方向の定義
-
エクセルで最初の行や列を開け...
-
VBAで結合セルを転記する法を教...
-
エクセルマクロの組み方
-
エクセルのソートで、数字より...
-
エクセル マクロ 範囲指定で...
-
Excel文字列一括変換
-
データシートビューのタイトル...
-
エクセルマクロPrivate Subを複...
-
Alt+Shift+↑を一括で行うには、...
-
横軸を日付・時間とするグラフ化
-
エクセルで複数列の検索をマク...
-
リストからデータを紐付けしたい
-
Accessのレポートで繰り返し表...
おすすめ情報