商品管理にマクロを使用しています。W列に仕入日、X列に仕入れ品名、Y、Z、AAには内容物の個数を入力しています。AL列には販売済み品名、AM,AN,AOには数字が入っていますが基本1に想定しています。仕入れ品は1箱に複数個のものもあり、便宜上個々としてバラす(AA列の数)必要があります。X:AAは仕入れ品名と日付で昇順し、販売済み品は同一の品名を統合し、数字は合算した形からAAをバラさずにApplication.Matchを実行すると完璧に走ってくれることは確認できています。つぎにAAをバラすため 、別シートからX1に貼り付けたのちに
Dim i As Variant
For i = Cells(Rows.Count, "AA").End(xlUp).Row To 1 Step -1
If Cells(i, "AA").Value > 1 Then
Range(Cells(i, "W"), Cells(i, "AA")).Copy
Range(Cells(i + 1, "W"), Cells(i + 1, "AA")).Resize(Cells(i, "AA").Value - 1).Insert
End If
Next
Application.CutCopyMode = False
を追加すると、X列の途中(AL列の統合前の最終行?)までしか見に行かずに”見当たりません”のメッセージが返ってきます。
あらかじめ別シートでバラしてから本シートのX1に貼り付けてVBAを走らせても結果は同じで止まります。
バラにしなければ走る、VBAを追加すると止まるのはなぜでしょうか?どこかを修正すればX列を最後まで検索してくれるようになるのでしょうか。
さほど知識がないので何日も考え、試しています。
是非ともご教授お願いいたします。
No.2ベストアンサー
- 回答日時:
No1です。
補足ありがとうございます。
>rowX = Application.Match(Cells(i, "AL"), Columns("X"), 0)
が問題のセンテンスということだと解釈しました。
エラー処理がされているので、その際にAL列の値が表示されていると思いますが、その値がX列に存在しているように見えるのに、エラー扱いになってしまっているという主旨のご質問であろうと推測しました。
>どこかを修正すればX列を最後まで検索してくれるように~~
検索範囲の指定はX列全体になっていますので、列全体を検索しているはずです。
それでも「見つからない」ということは、列全体を検索しても見つからないということを意味します。
考えられるのは、「見た目には同じ値だけれど、エクセル上は異なるものと認識されている」ということでしょう。
例えば、文字列検索の場合なら、一方の文字列の前後にスペース等の見えない文字が付いているとか。
数値の検索であれば、一方が文字列になっているとか。
数値の123と文字列の"123"は異なるものと見做されます。
例えば、エラーになった時点での該当行はわかるでしょうから、その際のAL列のセルに対して、どこかの空きセルに
=Match(検索セル, X:X, 0)
の関数を入れても、エラー表示になりませんか?
あるいは、該当しているはずのセルを「該当セル」とするなら、空きセルに
=検索セル=該当セル
の式を入力しても、結果はFalseになるだろうと推測します。
(↑は値が同じではないという意味になります。同じなら結果はTrue)
原因は上記だと推測しますので、検索値と該当しているはずのセルの値との相違を詳しく調べてみれば解決するのではないかと思います。
No.4
- 回答日時:
No3です。
>意味不明なことを記述していると思われる方もいらっしゃると思いますが
はい意味不明です。
質問者様にしかわからないことを、質問者様にしかわからない言葉で説明しているので、サッパリわかりません。
最初のご質問文からは、「Matchで検索しても、(ヒットするはずなのに)ヒットしない」というご質問だと思っていましたが・・
>最終検索値の行までを検索範囲とされてしまいます。
のように、いつの間にか検索範囲の問題かのようになっています。
検索範囲を制御したければ、検索範囲を制御する必要があります。
ご提示のコードでは、検索範囲はX列となってるだけで、何の制御もされていません。
あるいは、「検索範囲」という文言を「検索するループの範囲」の意味で使っているのなら、ご提示のコードから読み取れる範囲では、検索値はAL列の値であるのに対して、ループ範囲を決めているのはAM列の最終行としているので、データがどのように入力されているかによっては、期待と異なる結果になるのかも知れません。
いずれにしろ、いくらや取りをしても実体は不明そうですし、ご質問の内容すらわからないままなので、残念ながらお力にはなれそうにありません。
退散いたします。
No.3
- 回答日時:
こんにちは
示されているコードを見る限り(変数関連を除き)問題が見えません
>AAをバラさずにApplication.Matchを実行すると完璧に走ってくれることは確認できています。
という事は、手作業で行っている操作(内容)に問題があると思います
関係ないところだと思いますが一応、範囲における条件(全部が見えていないのであくまで軽いバグ要素)
For i = 1 To Cells(Rows.Count, "AM").End(xlUp).Row
Cells(i, "AL") 対象列の違いによる未処理または無駄なループ
あと
If Not IsError(rowX) Then エラーが無ければの否定で
MsgBox "入庫履歴が見当たりません
ここも対象エラーを特定されていないにで
Application.Match以前のエラーでもMsgBox が出てしまいます
(条件がありますが
WorksheetFunctionを変えた時の残骸や他のエラー処理のための
On Error Resume Next など)
続かないことで終わるというのであれば・・・書いてあるかもですが
MsgBox "入庫履歴が見当たりません:" & Cells(i, "AL"), vbExclamation
On Error GoTo 0
問題の確認
>バラすため
独特な表現で具体的に分かりません
>品名を統合し
同様にどのような操作、セルの値になっているかわかりません
Cells(i, "AL") の値がX列に必ずあるという想定で良いのでしょうか・・
>X列の途中(AL列の統合前の最終行?)までしか見に行かず
もし、統合しがセルの結合を指しているのなら
結合セルで値が見えている値と違っているのではないでしょうか
(#2様が回答されているような)
結合だったりOn Error GoTo 0だったりの気もしますが
エラーにならない関数で値を調べてみるとか・・・
Sub test()
Dim i As Long
Dim countX As Long
For i = 1 To Cells(Rows.Count, "AM").End(xlUp).Row
If Cells(i, "AL") <> "" Then
countX = Application.CountIf(Columns("X"), Cells(i, "AL"))
Debug.Print Cells(i, "AL").Value; "**"; countX
End If
Next
End Sub
AL列対処セルの値がXにあるかどうかを数値でイミディエイトウィンドウに出力します 0は無し1は1つ・・該当セル数
参考になるかわかりませんがとりあえず
No.1
- 回答日時:
こんにちは
ご質問文が、質問者様にしかわからないような用語を用いて説明しているのでさっぱりわかりませんし、エラーになるコードも提示されていないので更にわかりません。
>X列の途中(AL列の統合前の最終行?)までしか見に行かずに
>”見当たりません”のメッセージが返ってきます。
という文章だけからの推測ですが、検索対象範囲の設定が悪いだけではないでしょうか?
「Application.Match」で「見当たりません」のエラーが出ているという事らしいと思いますので、多少冗長ではありますが、Matchの検索範囲を列全体に設定しておけばすむのではないでしょうか?
あるいは、エラーの出る状態で、検索値が存在しないのならエラーになるのは当然ですので、検索値が正しい値になっているのかについてもご確認ください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 合計数量から引いていく 1 2023/08/29 19:53
- Visual Basic(VBA) Excel VBA 文字列のセルを反映させたいです 2 2024/02/24 00:06
- Visual Basic(VBA) Excel VBA マクロ あるフォルダー内の複数のファイルを統合したいです 1 2024/02/19 21:37
- Visual Basic(VBA) Excel VBA マクロ シート名を変えずにA列にあるセル名の名前でファイルの分割をしたいです 3 2024/02/05 22:10
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBA シート間の転記で、条件の追加コードの書き方について教えて下さい。 13 2023/02/26 09:31
- Visual Basic(VBA) VBAコードが作動しません。修正したいのですが何処に原因かあるか教えて下さい。 1 2024/01/08 16:23
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
このQ&Aを見た人はこんなQ&Aも見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
ちょっと先の未来クイズ第6問
2025年1月2日と1月3日に行われる、第101回箱根駅伝(東京箱根間往復大学駅伝競走)で、上位3位に入賞するチームはどこでしょう?
-
自分独自の健康法はある?
こうしていると調子がいい!みたいな自分独自の健康法、こだわりはありますか?
-
【選手権お題その3】この画像で一言【大喜利】
とあるワンシーンを切り取った画像。この画像で一言、お願いします!
-
「これいらなくない?」という慣習、教えてください
現代になって省略されてきたとはいえ、必要性のない慣習や風習、ありませんか?
-
Visualbasicの現状について教えてください
Visual Basic(VBA)
-
Excel VBAについて。こんな動作をさせるためにはどう書けばよいでしょうか。
Visual Basic(VBA)
-
VBA 入力箇所指定方法
Visual Basic(VBA)
-
-
4
【ExcelVBA】5万行以上のデータ比較の効率的な処理方法について
Visual Basic(VBA)
-
5
VBAのエラー表示の対処法について
Visual Basic(VBA)
-
6
VBAで特定の文字が入った行をコピーして貼り付けたい
Visual Basic(VBA)
-
7
エクセル タブの下のメニューを選択 実行するコード
Visual Basic(VBA)
-
8
【ExcelVBA】dictionaryの重複判断の基準(セル結合だと違う値として認識される)
Visual Basic(VBA)
-
9
VBAでセルの書式を変えずに文字列を置換する方法をご教示ください
Visual Basic(VBA)
-
10
VBAについて教えて下さい
Visual Basic(VBA)
-
11
不要項目の行削除方法について
Visual Basic(VBA)
-
12
Excel(M365) Vlookup/セル反転(VBA)について
Visual Basic(VBA)
-
13
【再投稿】レイアウトが異なる別のワークブックからデータを転記する方法を教えてください
Excel(エクセル)
-
14
PC Excel マクロ
Excel(エクセル)
-
15
エクセルVBAについて
Visual Basic(VBA)
-
16
ExcelVBA修正のお願い
Visual Basic(VBA)
-
17
時間短縮のために、テキストファイルの入出力をメモリを使って出来ないですか?
Visual Basic(VBA)
-
18
VBAコードのインデント表示
Visual Basic(VBA)
-
19
ExcelVBAマクロで実行した時の疑問
Visual Basic(VBA)
-
20
VBA コードどこがおかしいですか?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで在庫の組み換え処...
-
【ExcelVBA】5万行以上のデー...
-
WindowsのOutlook を VBA から...
-
ExcelのVBAコードについて教え...
-
[VB.net] ボタン(Flat)のEnable...
-
VBAから書き込んだ条件付き初期...
-
エクセルVBAのブックを開く方法...
-
【VBA】 結合セルに複数画像と...
-
VBA 最終行の取得がうまくいか...
-
Excel マクロについて詳しい方...
-
VBAでセルの書式を変えずに文字...
-
Excel VBA 選択範囲の罫線色の...
-
vbaにてseleniumを使用したedge...
-
Excel 範囲指定スクショについ...
-
VBA ユーザーフォーム ボタンク...
-
Excel VBAについて。こんな動作...
-
ExcelのVBAコードについて教え...
-
Excelのマクロについて教えてく...
-
[Excel VBA]特定の条件で文字を...
-
VBAでエクセルのテキストデータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAについて教えて下さい
-
ExcelのVBAコードについて教え...
-
ExcelのVBAコードについて教え...
-
【ExcelVBA】5万行以上のデー...
-
VBA Application.Matchについて...
-
Excelのマクロについて教えてく...
-
Excel VBAについて。こんな動作...
-
Excelの数式について教えてくだ...
-
ExcelのVBAコードについて教え...
-
VBA 同じフォルダ内のすべての...
-
不要項目の行削除方法について
-
Vba 型が一致しません(エラー1...
-
【マクロ】オートフィルターに...
-
【VBA】 結合セルに複数画像と...
-
VBAで特定の文字が入った行をコ...
-
ExcelのVBAコードについて教え...
-
VBAでセルの書式を変えずに文字...
-
VBAのエラー表示の対処法について
-
Excelのマクロについて教えてく...
-
Excel マクロについて詳しい方...
おすすめ情報
断片的で申し訳ないのですが
Dim valLMNO() As Variant
ReDim valLMNO(1 To dicAH.Count, 1 To 4)
For i = 1 To Cells(Rows.Count, "AM").End(xlUp).Row
If Cells(i, "AL") <> "" Then
Dim rowX As Variant
rowX = Application.Match(Cells(i, "AL"), Columns("X"), 0)
If Not IsError(rowX) Then
Else
MsgBox "入庫履歴が見当たりません:" & Cells(i, "AL"), vbExclamation
X列の最終行を取得して走らせようとすると、今度はApplication.Matchを実行しない感じなんです。
Dim i As Variant
For i = Cells(Rows.Count, "AA").End(xlUp).Row To 1 Step -1
If Cells(i, "AA").Value > 1 Then
Range(Cells(i, "W"), Cells(i, "AA")).Copy
Range(Cells(i + 1, "W"), Cells(i + 1, "AA")).Resize(Cells(i, "AA").Value - 1).Insert
End If
Next
Application.CutCopyMode = False
なぜに上記を走らせると止まるのか。考えられることだけでもお聞かせ願いたいです。
アドバイスありがとうございます。”見当たらない”とされた行以降については、ソートをかけて検索範囲をシャッフルし走らせても、同様に最終検索値の行までを検索範囲とされてしまいます。しかしながら先に検索しなかった値については検索値よりも若い行にある値はマッチしましたので記入ミスではないと考えます。
また、正常に走ったシートの検索範囲の一行を複製し、再度走らせると同様に最終検索値の行までを検索範囲とされてしまいます。
意味不明なことを記述していると思われる方もいらっしゃると思いますが、VBAにたけてないなりに本当に悩んでおりますので、解釈いただきご名答を願うばかりです。
検索範囲の同行にある特定列の数字の分を複製する作業はmustで、複製しなければ正常動作、複製すると最終検索値の行までしか検索範囲としなくなります。
対策があればご教授願いたいです。