ステップイン(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も見ています
-
家の中でのこだわりスペースはどこですか?
自分の家で快適に過ごすために工夫しているスペースはありますか? 例)ベランダでお茶を飲むためのカフェテーブル ゲーミングに特化したこだわりのPCスペース
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。 「そうなんだね」と「確かに披露する場所ないね」で評価します。
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
【お題】 ・買ったばかりの自転車を分解してひと言
-
高校三年生の合唱祭で何を歌いましたか?
大人になると大人数で合唱する機会ってないですよね。 思い出すと、高校三年生の合唱祭が最後でした。 そこで、みんなの思い出の合唱曲を知りたい!
-
エクセルVBA、ステップモードと結果が異なる
その他(Microsoft Office)
-
セルのコピーで「オブジェクトが必要です。」
Visual Basic(VBA)
-
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで離れた列を選択して...
-
「段」と「行」の違いがよくわ...
-
LEFT関数とIF関数の組み合わせ...
-
VLOOKUPの列番号の最大は?
-
Excelの行数、列数を増やしたい...
-
エクセルマクロの組み方
-
VBAで結合セルを転記する法を教...
-
列方向、行方向の定義
-
エクセルで複数列の検索をマク...
-
Excel文字列一括変換
-
エクセルのソートで、数字より...
-
Accessのレポートで繰り返し表...
-
横軸を日付・時間とするグラフ化
-
エクセル 重複 隣の列 一番...
-
エクセルマクロ、アウトライン...
-
エクセル マクロ 範囲の値を上...
-
エクセルの行を65536以上に増や...
-
ListViewで列を指定して表示さ...
-
Alt+Shift+↑を一括で行うには、...
-
【マクロ】【VBA】条件付き書式...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
-
VLOOKUPの列番号の最大は?
-
LEFT関数とIF関数の組み合わせ...
-
列方向、行方向の定義
-
VBA 指定した列にある日時デー...
-
Excelの行数、列数を増やしたい...
-
エクセル マクロ 範囲指定で...
-
エクセルで最初の行や列を開け...
-
エクセルのソートで、数字より...
-
エクセルマクロの組み方
-
エクセルで複数列の検索をマク...
-
データシートビューのタイトル...
-
Excel文字列一括変換
-
VBAで結合セルを転記する法を教...
-
エクセルマクロPrivate Subを複...
-
リストからデータを紐付けしたい
-
CSVファイルの「0落ち」にVBA
-
エクセル 重複 隣の列 一番...
-
横軸を日付・時間とするグラフ化
おすすめ情報