
商品管理にマクロを使用しています。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も見ています
-
Application.Matchで特定行の検索
Visual Basic(VBA)
-
Visualbasicの現状について教えてください
Visual Basic(VBA)
-
Excel VBAについて。こんな動作をさせるためにはどう書けばよいでしょうか。
Visual Basic(VBA)
-
-
4
エクセル タブの下のメニューを選択 実行するコード
Visual Basic(VBA)
-
5
【ExcelVBA】dictionaryの重複判断の基準(セル結合だと違う値として認識される)
Visual Basic(VBA)
-
6
VBAでセルの書式を変えずに文字列を置換する方法をご教示ください
Visual Basic(VBA)
-
7
VBAについて教えて下さい
Visual Basic(VBA)
-
8
VBA 入力箇所指定方法
Visual Basic(VBA)
-
9
【ExcelVBA】5万行以上のデータ比較の効率的な処理方法について
Visual Basic(VBA)
-
10
不要項目の行削除方法について
Visual Basic(VBA)
-
11
VBAのエラー表示の対処法について
Visual Basic(VBA)
-
12
VBAで特定の文字が入った行をコピーして貼り付けたい
Visual Basic(VBA)
-
13
質問58753 このコードでうまく動作しません。どうしたら良いですか Private Sub Wor
Visual Basic(VBA)
-
14
VBA コードどこがおかしいですか?
Visual Basic(VBA)
-
15
[Excel VBA]特定の条件で文字を削除&残す処理をするファイルを作成したいです
Visual Basic(VBA)
-
16
VBA 2次元配列の出力
Visual Basic(VBA)
-
17
ExcelVBAについて。
Excel(エクセル)
-
18
ExcelのVBAコードについて教えてください。
Visual Basic(VBA)
-
19
【再投稿】レイアウトが異なる別のワークブックからデータを転記する方法を教えてください
Excel(エクセル)
-
20
VB.net 文字列から日付型へ変更したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】シートの変数へ入れ...
-
【マクロ】並び替えの範囲が、...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
vbsでのwebフォームへの入力制限?
-
改行文字「vbCrLf」とは
-
Vba セルの4辺について罫線が有...
-
エクセルのマクロについて教え...
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードについて教...
-
testファイル内にある複数のpng...
-
エクセルVBA 検索結果を隣のシ...
-
VBAの質問(Msgboxについて)です
-
以下のプログラムの実行結果は...
-
質問58753 このコードでうまく...
-
VBAでユーザーフォームを指定回...
-
エクセルの改行について
-
エクセルのVBAコードと数式につ...
-
ワードの図形にマクロを登録で...
-
【マクロ】値を渡されたプロシ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
testファイル内にある複数のpng...
-
改行文字「vbCrLf」とは
-
エクセルVBA 検索結果を隣のシ...
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
【マクロ】切取りの場合、形式...
-
【ExcelVBA】5万行以上のデー...
-
ExcelVBAでパワポを操作したい
-
(EXCEL超初心者)EXCELの関数(ま...
-
エクセルの改行について
-
Excelマクロで使うVBAコードを...
-
ワードの図形にマクロを登録で...
-
【マクロ】変数を使った、文字...
-
VBAでFOR NEXT分を Application...
-
VBAの質問(Msgboxについて)です
-
エクセルのVBAコードについて教...
-
Excelマクロで使うVBAコードを...
-
Excelのマクロについて教えてく...
-
VBAの「To」という語句について
-
【マクロ】値を渡されたプロシ...
おすすめ情報
断片的で申し訳ないのですが
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で、複製しなければ正常動作、複製すると最終検索値の行までしか検索範囲としなくなります。
対策があればご教授願いたいです。