- ベストアンサー
INDEX MATCH VLOOKUP関数とは?
- INDEX MATCH VLOOKUP関数は、複数のデータセットから特定の条件に合致するデータを引き出すための関数です。
- 元となるブックと表示したいブックが別々のブックの場合でも、INDEX MATCH VLOOKUP関数を使用して表示することが可能です。
- 関数を使って表示することで、棚番等を含む特定の列のデータを表示することができます。
- みんなの回答 (19)
- 専門家の回答
質問者が選んだベストアンサー
(1)出力されましたoutput.txtのデータで【取得処理】のC列のカウント値が6行である事 〉これは00-0000や00-000や(00-0000)、(00-000) のパターンがあるのですが、これは大丈夫なのでしょうか? →問題ありません。ここで言いたかったのは、output.txtの出力データは一つの商品コードにつき、倉庫Aで3行、倉庫Bで3行の計6行取得されます。 (各列の1.2.3行目と増えるにつれて、複数行にデータが入っている場合は半角スペースで結合していってますので、倉庫A.Bの3行目が最終の取得されたデータになります。) (3)【出力処理】の商品名(D列)に「no hit」と入っている商品コードが実際の表示ブックA列に無い事 を確認致しました。 〉これは、一応在庫表に乗っている全てのコードを表示ブックに載せているつもりだったのですが、 〉B1217 no hit(3004.3005行目)エクセルの14745.14746行目は原因がわからないです。 →今はデータを確認していないませんが、B1217のコードが表示先のA列に存在しなければ、no hitとなります。 存在しない理由は本件と関係ないので、お答えしかねます。 存在していて、データを取得されてるのに出力されていなければ、まだ問題があると言うことになります。 〉逆に nohitで棚番があるものは、載せないといけないものなので、これを見ながら訂正していこうとおもいます。 そういった用途でログデータを活用いただけるのであれば幸いです。 お伝えしておりませんでしたが、 logput=1を0にすれば、ログデータを出力しなくなります。 〉今実際の在庫表で実際の表示したいシートで試してここまで 〉出れば完璧で想像以上に仕上がっており、これで逆にチェックが出来る場合もあると言うことですよね。 はい、照らし合わせお願いします。 〉とても素晴らしい方にここまでお付き合いして頂いて本当に感謝と申し訳なかったです。 〉こんなことが出来る事も知らなかったです。。 〉見て頂いた通り、本当にベースとなるものが、つくり方が悪いので、この数年、とても使いづらかったので、教えてくださって本当に親切な方に見てもらうことができて光栄です。 決められた様式、条件に基づいて繰り返し処理することはマクロ(プログラム)にとって得意分野ですので、量が膨大であっても初期構築さえ出来れば長く仕事で効率化が図られます。 〉金も払わなくても大丈夫なものなのかも、少し思ってしまいます。 〉色々アンサーも巡って調べたりもしたのですが、ここまで教えてくださる方はネット上でみたことがありません。 〉本当にお時間を無駄にしてしまい、申し訳ございませんでした。 無駄ではありませんよ。こちらも手際が悪く雑多な部分もありますので、ご質問者様のやる気が解決に繋がったかと存じます。 私も問題点の先読みなど、色々参考になりました。 長々とお付き合い有り難うございました。 本件について、また問題点がありましたら例のヒントにでもどうぞ。
その他の回答 (18)
- eden3616
- ベストアンサー率65% (267/405)
>オーバーフローしました。と出てしまいました。 今回追加しました進捗状況をステータスバーに追加する処理において、 処理行数が変数の許容値を超えておりましたので併せて修正いたしました。 >参考サイトに入れました。 お手数おかけしました。 >本日の在庫表にて質問する前に勝手にしてしまったのですが、三行あいているB列についてですが、 >結合して空白となってしまっております。 ――――――――――――――――――――― >>B列は全て結合しておいた方が良いのでしょうか? >>その使っていない3行分を結合しといて空白にしておいたら、 >>その下もきちんと読み込んで、次のシートを読み取って行くのでしょうか? >結合されているが、情報が読み取られない場合の処理を施していない(初めから想定しておりませんでした)ので、 >B列を結合してその右側にデータが存在しない状態を作らない方が良いかと思います。 ――――――――――――――――――――― No14にて上記のように記述しておりますが、危惧していた通り原因はこれかとおもわれます。 【以下は原因の解説になります】 原因の理解が不要であれば読み飛ばして頂き、最下部のURLよりコードを取得してください。 ~~~~~~~~~~~~~~~~~~~~~~~~ 現状のコードでは結合部分がない部分を除外として、最終行までを処理しております。 結合されているが、商品コードがない場合、一つ手前のコード、商品名を継続して値の無い倉庫Aのデータとして取得しておりました。 この結果、先に取得された倉庫Aのデータを出力した後に、後から取得された何も含まれていない倉庫Aのデータで出力されていたため、出力先の倉庫Aのデータが入力されない状態になっておりました。 これはoutput.txtをエクセルに貼り付けた場合、No16で記載してある通り【取得処理】で商品コード(C列)の数が1グループ(・対象行の範囲:○~○行の内訳)6行以内でなければならないのに、7行以上のデータが取得されていたことからも確認できます。 例えば、2シート目の98~106行目のあとに107~109行目が倉庫分類番号0番で行分取得されてしまっております。 対応処理としまして、1グループ(B列の結合されたセルの最初の行)に商品コードが含まれていなければ読み飛ばします。 これにより、 (1)B列が結合されていて、商品コードが含まれていない場合 (2)B列が結合されておらず、商品コードが含まれていない場合 どちらも取得処理を読み飛ばしますので107~109行目のような不要データを取得しないように対応致しました。 ~~~~~~~~~~~~~~~~~~~~~~~~ ■VBAコード 以下より再度修正したコードをコピーしてください。 https://www.dropbox.com/s/venh0krv40y7lyj/code3.txt 上記コードにおきまして、 (1)出力されましたoutput.txtのデータで【取得処理】のC列のカウント値が6行である事 (2)取得されてしまっていた107~109行目が取得されていない事 (3)【出力処理】の商品名(D列)に「no hit」と入っている商品コードが実際の表示ブックA列に無い事 を確認致しました。 再度問題があればご提示お願いします。
補足
素晴らしいです。本当にありがとうございます!!! 全て転記されていることを確認させていただきました。 (1)出力されましたoutput.txtのデータで【取得処理】のC列のカウント値が6行である事 これは00-0000や00-000や(00-0000)、(00-000) のパターンがあるのですが、これは大丈夫なのでしょうか? みた感じだと、00-000も棚番が入っておりましたので、 問題なかったんですが・・ (2)取得されてしまっていた107~109行目が取得されていない事 これは完璧になくなっておりました。 (3)【出力処理】の商品名(D列)に「no hit」と入っている商品コードが実際の表示ブックA列に無い事 を確認致しました。 これは、一応在庫表に乗っている全てのコードを表示ブックに載せているつもりだったのですが、 B1217 no hit(3004.3005行目)エクセルの14745.14746行目は原因がわからないです。 逆に nohitで棚番があるものは、載せないといけないものなので、これを見ながら訂正していこうとおもいます。 今実際の在庫表で実際の表示したいシートで試してここまで 出れば完璧で想像以上に仕上がっており、これで逆にチェックが出来る場合もあると言うことですよね。 とても素晴らしい方にここまでお付き合いして頂いて本当に感謝と申し訳なかったです。 こんなことが出来る事も知らなかったです。。 見て頂いた通り、本当にベースとなるものが、つくり方が悪いので、この数年、とても使いづらかったので、教えてくださって本当に親切な方に見てもらうことができて光栄です。 お金も払わなくても大丈夫なものなのかも、少し思ってしまいます。 色々アンサーも巡って調べたりもしたのですが、ここまで教えてくださる方はネット上でみたことがありません。 本当にお時間を無駄にしてしまい、申し訳ございませんでした。
- eden3616
- ベストアンサー率65% (267/405)
>今やってみましたが、途中で応答なしとなってしまって、だいぶ時間はかかりましたが、 >終了となってみてみましたが、やはり入っておりませんでした。 修正内容は該当箇所を入力するものではありません。 (一部改編した部分もありますが) output.txtに出力する情報を増やしました。 【出力処理】内の情報が判断材料になります。 また処理時間ですが、テキストデータに書き出す処理が本来の趣旨より多いので時間がかかってしまいます。 処理対象のシートを問題のある箇所限定にしたテストブックを作成したうえで試してみてください。 また以下のコードは処理経過をエクセルのステータスバーに表示するようにしています。 目安にしてください。 >コードの差なのかもしれません。 >コードを教えて頂けませんでしょうか? https://www.dropbox.com/s/prgfd6yg6kgn96c/code2.txt >一番左の番号と一致する行をご提示と言うのは、 >outputを張り付けたブックの行番号でしょうか? 貼り付けた後でしたら、【出力処理】以下のA列に入っている数値で探してください。 上記最新のコードで処理をしていただければ、 「271」、「272」と一致する行があると思いますので該当の行をご提示ください。 お手数おかけいたします。 メールでデータを頂けませんでしたので用意いたしました。 詳しくは規約違反になりますので、ヒントのみ提示致します。 参考URLもご利用ください。
お礼
書くところがなかったので、こちらから失礼致します。 参考サイトに入れました。 少し消しすぎてしまって、データがいる列があればまた教えてください。 それと、本日の在庫表にて質問する前に勝手にしてしまったのですが、三行あいているB列についてですが、 結合して空白となってしまっております。 その行のE列にはサイズが入っているので、 その行全て空白といった行ではありません。 ただ棚番とは入っておりません。 あと昨日の時点でのファイルのため、コードが昨日までの時点のコードとなっております。 宜しくお願い致します。
補足
ヒントまでありがとうございます。 一旦取り急ぎコピーだけさせてもらって実行を押してみました。 オーバーフローしました。と出てしまいました。 黄色くなっている箇所は Application.StatusBar = "シート:" & bas_b.Sheets(i).Name & " / 取得中:" & Int(t_min * 100 / t_max) & "% 完了" です。
- eden3616
- ベストアンサー率65% (267/405)
>今outputを見てみたのですが、outputにはきちんと読み取って棚番が表示されているのに、 >実際の表示したい方には転記されていないものがあるのですが、それはなぜでしょうか?? >数コードありましたが、読み込みは出来ているのですが、出力が原因でしょうか? 取得が正常であるため、出力時の問題と思われます。 追加で『'(4)データ出力』の中の以下の場所を修正願います。 hit = wfMatch(data(i, 1), Range("A:A")) ↓ hit = wfMatch(data(i, 1), tar_o.Range("A:A")) If hit = 0 Then Debug.Print i & " , " & .Range("A" & Rows.Count).End(xlUp).Row For j = 1 To .Range("A" & Rows.Count).End(xlUp).Row Debug.Print "[" & StrConv(data(i, 1), vbNarrow) & "] , [" & StrConv(.Range("A" & j), vbNarrow) & "]" If StrConv(data(i, 1), vbNarrow) = StrConv(.Range("A" & j), vbNarrow) Then hit = j Exit For End If Next j logdat = i & vbTab & hit & vbTab & data(i, 1) & vbTab & "no hit" & vbTab logdat = logdat & data(i, 3) & vbTab & data(i, 4) & vbTab & data(i, 5) & vbTab & data(i, 6): GoSub logset End If 一度上記修正後に処理を実行してください。 >合わせて'(4)データ出力の方も見て頂けませんでしょうか? >・対象行の範囲:533~544行 >27153302-4473*** 032-F22 20 >27153402-4473*** 032-F22 20 >27153502-4473*** 032-F22 20 >27254202-4473*** 1 >27254302-4473*** 1 >27254402-4473*** 1 >このようにちゃんとメモ帳では表示されておりましたが、 >表示したいブックAD-AF列には何も表示されておりません。 判断材料になるかとおもいますので、 簡単に出力されたテキストデータについてご説明させて頂きます。 取得処理のログでは (1)cnt(配列インデックス) (2)j(取得行番号) (3)商品コード (4)商品名 (5)倉庫分類番号(0が倉庫A(頭3行)、1が倉庫A(尻3行)) (6)AE列 (7)AF列 (8)AG列 の順番でタブ区切りにより取得したデータが出力されます。 倉庫分類番号が0または1でそれぞれ3行づつ、処理を行った過程が出力されますので 1グループ(533~544行目)内で6行分のデータが出力されます。 ご提示して頂いたデータのタブ区切りが無くなっていますね。 (おそらくこのサイトの仕様で省略されたものかと) 取得データと実際のデータに差異がなく、正常に取得されているのであれば、 「271」に倉庫Aのデータが取得され、「272」に倉庫Bのデータがないという事になります。 この「271」と「272」を【出力処理】の中の一番左の番号と一致する行をご提示お願いします。
補足
今やってみましたが、途中で応答なしとなってしまって、だいぶ時間はかかりましたが、終了となってみてみましたが、やはり入っておりませんでした。 もしかして、ご指示頂いたいろんな箇所を訂正自分なりにしたつもりが、ちょっとしたコードの差なのかもしれません。 もし御面倒でなければ、また Private Sub CommandButton3_Click() End Sub の間のコードを教えて頂けませんでしょうか? あと ・対象行の範囲:533~544行 271 533 024473 *** 0 32-F22 20 271 534 024473 *** 0 32-F22 20 271 535 024473 *** 0 32-F22 20 272 542 024473 *** 1 272 543 024473 *** 1 272 544 024473 *** 1 これはあっておりますが、 一番左の番号と一致する行をご提示と言うのは、 outputを張り付けたブックの行番号でしょうか? それは、969-974です。 元データ在庫表ブックの行は 533-544までとなります。
- eden3616
- ベストアンサー率65% (267/405)
No14で修正箇所が1箇所漏れていました。 申し訳ありません。 (6) 1行追加 t_max = Selection(Selection.Count).Row ↓ t_max = Selection(Selection.Count).Row If .Range("B" & t_min).MergeCells = False Then GoTo endloop '←【この行を追加】 ※(2)の箇所ににておりますが、「r_max」と「t_max」のように違う箇所ですのでお間違いの無いように修正願いします。
補足
直しました。ありがとうございます。 合わせて'(4)データ出力の方も見て頂けませんでしょうか? ・対象行の範囲:533~544行 271 533 02-4473 *** 0 32-F22 20 271 534 02-4473 *** 0 32-F22 20 271 535 02-4473 *** 0 32-F22 20 272 542 02-4473 *** 1 272 543 02-4473 *** 1 272 544 02-4473 *** 1 このようにちゃんとメモ帳では表示されておりましたが、 表示したいブックAD-AF列には何も表示されておりません。 何度もごめんなさい
- eden3616
- ベストアンサー率65% (267/405)
>先ほどhpからメールさせてもらいましたので、見て頂いてもよろしいでしょうか? >エラーで戻ってきておりました。 お手数おかけしました。 フリーメールのため添付ファイルがはじかれた可能性があります。 >B列に結合されておらず、何も記載がない >それ以降が読み取ってない 回答No2の以下の部分に記載させていただいたのですが、 ――――――――――――――――― ■想定・仕様 ◆マスタブックについて (2)商品コードの塊は必ず行方向に結合 (8行目から結合されていないセルまでを取得範囲としています) ――――――――――――――――― 結合されていないところで取得範囲外となります。 >B列は全て結合しておいた方が良いのでしょうか? >その使っていない3行分を結合しといて空白にしておいたら、 >その下もきちんと読み込んで、次のシートを読み取って行くのでしょうか? 結合されているが、情報が読み取られない場合の処理を施していない(初めから想定しておりませんでした)ので、 B列を結合してその右側にデータが存在しない状態を作らない方が良いかと思います。 よって、 VBAコードの修正により結合されていなくても B列の文字列が最後まで入っている範囲までを取得範囲として処理するように変更いたします。 以下の箇所のコードを全て修正してください。 修正が難しいようであれば修正後のコードを再度全てアップ致します。 現状のVBAコードの中で『'(3)取得処理』 ~ 『'(4)データ出力』の間に全ての変更箇所があります。 記述しております「'←【この行を削除】」を含めて貼付て頂いても問題ありません。 (1) 1行追加 With bas_b.Sheets(i) ↓ With bas_b.Sheets(i) .Activate '←【この行を追加】 (2) 変更 r_max = .Range("B" & .Rows.Count).End(xlUp).Row ↓ .Range("B" & .Rows.Count).End(xlUp).Select r_max = Selection(Selection.Count).Row (3) 1行削除 If r_min < r_max Then .Activate '←【この行を削除】 ↓ If r_min < r_max Then (4) 変更 Do While .Range("B" & t_min).MergeCells ↓ Do While r_max >= t_min (5) 1行追加 t_min = t_max + 1 ↓ endloop: '←【この行を追加】 t_min = t_max + 1
補足
ありがとうございます。 訂正しました。 今outputを見てみたのですが、outputにはきちんと読み取って棚番が表示されているのに、実際の表示したい方には転記されていないものがあるのですが、 それはなぜでしょうか?? 数コードありましたが、読み込みは出来ているのですが、 出力が原因でしょうか?
- eden3616
- ベストアンサー率65% (267/405)
>outputを見たのですが、このデータをみて、全てエクセルに張り付けて、これが出力した全てと言うことなのでしょうか? >ここがあっていて、実際に表示したいブックに入っていない場所を探すということでしょうか? >先ほどのコードですが、コンパイルエラーとなっていて、 >End Sub End Function またはEnd Property以降にはコメントのみが記述できます output.txtの中身が正常に出力されているということはエラーなく動作したということですか? それともコンパイルエラーが表記されてoutput.txtの中身は空ということでしょうか。 (コンパイルエラーが表示されるなら、コードが実行されていないのでoutput.txtは出力されていないとおもわれますが) >それか使っている在庫表をUPした方が分かり易いでしょうか? アップして頂けるのであれば助かります。 表示先のシートも合わせてお願いできますでしょうか。 >>もしくは >>またログ出力で一部商品コードが3つ連続で取得している箇所がありますね・・・・ >>該当箇所のデータが気になります。 >ここの箇所だけをそのままコピーしたエクセルファイルを見て頂いた方が宜しいでしょうか? ヒントになるかとご提示させて頂いたまでですので、関連データをご提示いただけるのであれば不要です。
お礼
書く場所がなかったため、こちらに書かせて頂きます。 メールでそのままのデータを送らせていただきましたが、エラーで戻ってきておりました。。なんとなく原因がわかりました。 https://box.yahoo.co.jp/guest/viewer?sid=box-l-a5gsu4qr63g4fugtyh7nt7sdti-1001&uniqid=4c8bfe95-d687-48f7-b304-60edf39837f9&viewtype=detail このブックを見ていただきたいのですが、 黄色く色付けした箇所がB列は結合されておらず、E列部分を結合しており、E列は関係ないと思いますが、問題となるB列に結合されておらず、何も記載がないため、 B列結合なしで3行あいているのですが、outputを貼り付けてみたところ、 次のシートに移動していたため、それ以降が読み取ってないことがわかりました。 B列は全て結合しておいた方が良いのでしょうか? その使っていない3行分を結合しといて空白にしておいたら、その下もきちんと読み込んで、次のシートを読み取って行くのでしょうか?
補足
先ほどhpからメールさせてもらいましたので、見て頂いてもよろしいでしょうか? 不要であろうところは消しております。 もし見れなければまた返事頂ければどこかにアップ致します。
- eden3616
- ベストアンサー率65% (267/405)
ログ出力処理を加えたコードですが、 文字数制限がオーバーしましたので、外部にコードをアップ致しました。 下記アドレスよりVBAコードをコピーしてください。 https://www.dropbox.com/s/ydukwqqvufakdsq/code.txt
補足
何度も本当にごめんなさい。 VBAをコピーしてやってみました。 i=820 , hit=482 / 02-4532 1_ i=821 , hit=482 / 02-4532 0_// i=822 , hit=648 / 02-1499 0_21-G23 7 // i=823 , hit=648 / 02-1499 1_ i=824 , hit=577 / 02-2342 0_// i=825 , hit=577 / 02-2342 1_ i=826 , hit=577 / 02-2342 0_// i=827 , hit=571 / 02-2361 0_// i=828 , hit=571 / 02-2361 1_ i=829 , hit=637 / 02-1776 0_/32-Z 4 / i=830 , hit=637 / 02-1776 1_ i=831 , hit=623 / 02-1914 0_/32-C82 3 / i=832 , hit=623 / 02-1914 1_ i=833 , hit=650 / 02-1448 0_// i=834 , hit=650 / 02-1448 1_ i=835 , hit=487 / 02-834 0_// i=836 , hit=487 / 02-834 1_ i=837 , hit=487 / 02-834 0_// i=838 , hit=618 / 02-2040 0_// i=839 , hit=618 / 02-2040 1_ i=840 , hit=599 / 02-2192 0_// i=841 , hit=599 / 02-2192 1_ i=842 , hit=603 / 02-2148 0_// i=843 , hit=603 / 02-2148 1_組み込み用 i=844 , hit=651 / 02-1442 0_// i=845 , hit=651 / 02-1442 1_ i=846 , hit=660 / 02-1253 0_// i=847 , hit=660 / 02-1253 1_ i=848 , hit=606 / 02-2132 0_// i=849 , hit=606 / 02-2132 1_ i=850 , hit=606 / 02-2132 0_// i=851 , hit=641 / 02-1722 0_// i=852 , hit=641 / 02-1722 1_ i=853 , hit=641 / 02-1722 0_// i=854 , hit=567 / 02-2387 0_21-G13 4(組込用) // i=855 , hit=567 / 02-2387 1_ i=856 , hit=567 / 02-2387 0_// i=857 , hit=484 / 02-4478 0_// i=858 , hit=484 / 02-4478 1_ i=859 , hit=484 / 02-4478 0_// i=860 , hit=481 / 02-4475 0_// i=861 , hit=481 / 02-4475 1_ i=862 , hit=645 / 02-1585 0_21-F22 4 // i=863 , hit=645 / 02-1585 1_ i=864 , hit=615 / 02-2086 0_// i=865 , hit=615 / 02-2086 1_ i=866 , hit=517 / 02-4271 0_/31-Z(DG) 20 / i=867 , hit=517 / 02-4271 1_ i=868 , hit=566 / 02-2388 0_// i=869 , hit=566 / 02-2388 1_組み込み用 i=870 , hit=515 / 02-4293 0_// i=871 , hit=515 / 02-4293 1_ i=872 , hit=515 / 02-4293 0_// i=873 , hit=491 / 02-3002 0_// i=874 , hit=491 / 02-3002 1_ i=875 , hit=525 / 02-4183 0_// i=876 , hit=525 / 02-4183 1_ i=879 , hit=791 / 02-1933 0_// i=880 , hit=791 / 02-1933 1_ i=881 , hit=845 / 02-611 0_/32-C12 1 / i=882 , hit=845 / 02-611 1_ i=883 , hit=980 / (02-611) 0_// i=884 , hit=980 / (02-611) 1_ i=885 , hit=1058 / 02-181 0_/33-F81 3 / i=886 , hit=1058 / 02-181 1_ i=887 , hit=997 / 02-3016 0_21-Z 21 // i=888 , hit=997 / 02-3016 1_ i=889 , hit=1043 / 02-2031 0_/33-F12 12 / i=890 , hit=1043 / 02-2031 1_ i=891 , hit=993 / 02-4380 0_/33-F22 18 / i=892 , hit=993 / 02-4380 1_ i=893 , hit=1016 / 02-4065 0_/33-H41 8 31-Z 3 / i=894 , hit=1016 / 02-4065 1_ i=895 , hit=1052 / 02-1957 0_/32-C42 4 / i=896 , hit=1052 / 02-1957 1_ i=897 , hit=1062 / 02-1708 0_/33-G72 21, 33-G22 45, 33-H52 30, 33-Z(HI) 32, 33-Z(HI) 16 33-Z(GH) 22, 33-I12 28, 33-B31 28, 31-B12 6, 33-Z(CD) 24, 33-C31 32, 33-C21 15 / i=898 , hit=1062 / 02-1708 1_ i=899 , hit=1006 / 02-4239 0_// i=900 , hit=1006 / 02-4239 1_ i=901 , hit=1051 / 02-1962 0_// i=902 , hit=1051 / 02-1962 1_先出し必須! i=903 , hit=1024 / 02-2364 0_// i=904 , hit=1024 / 02-2364 1_ i=905 , hit=1038 / 02-2088 0_// i=906 , hit=1038 / 02-2088 1_ i=907 , hit=1049 / 02-2002 0_// i=908 , hit=1049 / 02-2002 1_ i=909 , hit=1072 / 02-1160 0_// i=910 , hit=1072 / 02-1160 1_ i=911 , hit=1227 / 02-1198 0_/32-C22 4(2011y) / i=912 , hit=1227 / 02-1198 1_ i=913 , hit=1326 / 02-1747 0_/31-D11 4 / i=914 , hit=1326 / 02-1747 1_ i=915 , hit=1531 / 02-2306 0_// i=916 , hit=1531 / 02-2306 1_ i=917 , hit=1428 / 02-2553 0_//41-Z(E) 3 i=918 , hit=1428 / 02-2553 1_ i=919 , hit=1568 / 02-1845 0_21-E33 2 // i=920 , hit=1568 / 02-1845 1_ ■出力完了 となっております。 Option Explicit Private Sub CommandButton3_Click() '(1)型宣言 Dim tar_o As Object Dim bas_f As String, bas_b As Workbook (長いので省略します) MsgBox "終了" Exit Sub logset: If logput Then objTS.WriteLine logdat Return End Sub Function wfMatch(word As String, tar As Range) As Long On Error GoTo era wfMatch = WorksheetFunction.Match(word, tar, 0) Exit Function era: wfMatch = 0 End Function これであっておりますか? それか使っている在庫表をUPした方が分かり易いでしょうか? もしくは またログ出力で一部商品コードが3つ連続で取得している箇所がありますね・・・・ 該当箇所のデータが気になります。 ここの箇所だけをそのままコピーしたエクセルファイルを見て頂いた方が宜しいでしょうか? 何度も申し訳ございません
- eden3616
- ベストアンサー率65% (267/405)
末端のデータ「i」の値が920であるため元データの商品コードは 全シートあわせて460種類ほどありそうですね。 i=824 , hit=577 / 02-2342 0_// i=825 , hit=577 / 02-2342 1_ i=826 , hit=577 / 02-2342 0_// またログ出力で一部商品コードが3つ連続で取得している箇所がありますね・・・・ 該当箇所のデータが気になります。 一度取得データのログを書き出して、 データの取得時に問題が無いかを確認したほうがよさそうですね。 ログ出力用のコードを追加して次の投稿で記述いたします。 実行してみてください。 結果が表示ブックの保存場所に「output.txt」というテキストファイルで出力されます。 これは各処理の中で取り扱った各種情報をタブ区切りで出力したものです コピーして新規エクセルシートに張り付けて頂きましたら タブ区切りが自動で各列に振り分けられますので見やすくなると思います。 この出力デーたを元に、【取得処理】と【出力処理】に問題がないか 問題がある箇所のパターン等をご確認お願いします。
補足
商品コードについてですが、全部で1700コード近くはあると思います。 表示したいブックの商品コードの数が1600程です。 outputを見たのですが、このデータをみて、全てエクセルに張り付けて、これが出力した全てと言うことなのでしょうか? ここがあっていて、実際に表示したいブックに入っていない場所を探すということでしょうか? 先ほどのコードですが、コンパイルエラーとなっていて、 End Sub End Function またはEnd Property以降にはコメントのみが記述できます となっておりました。
- eden3616
- ベストアンサー率65% (267/405)
>全てあっているか確認してみます。 お願いします。問題があればご提示ください。 >今は標準モジュールに入れておりますが、 >これをシート上にボタンを作り、 >Private Sub CommandButton3_Click() >ここに入れても問題はないのでしょうか? >それとも標準モジュールでマクロの実行の方が宜しいですか? ボタンを作成してマクロを割り当てて頂いて問題ありません。 マクロの記述する箇所についてですが、 シートに記述も標準モジュールに記述しても動作は同じです。 シートに記述するとイベント実行(シートの内容が変化した時に実行)が可能になります。 標準モジュールに記述すると他のコードとの連携がしやすくなります。 コードの内容や目的によって記述する場所が決まりますが、 今回のコードではどちらに記述して頂いても正常に動作いたします。 マクロから実行、ボタンに登録して実行、ショートカットに登録して実行などは マクロを実行させる手段にすぎませんので、どの方法でも同じように実行させることができます。
補足
ありがとうございます。 今何個か見ていっておりますが、例えば倉庫A1.2.3行目なのですが、一行目と三行目に入っている場合、何も入っていない場合がありました。 倉庫Bは結合セル6行の場合、4.5.6行目が倉庫Bですが、6行目だけ文字が入っている場合、表示シートの方には何も表示されておりませんでした。 全体的に入っていない箇所の方が多いかもしれません。 下に出ているイミディエイトは i=820 , hit=482 / 02-4532 1_ i=821 , hit=482 / 02-4532 0_// i=822 , hit=648 / 02-1499 0_21-G23 7 // i=823 , hit=648 / 02-1499 1_ i=824 , hit=577 / 02-2342 0_// i=825 , hit=577 / 02-2342 1_ i=826 , hit=577 / 02-2342 0_// i=827 , hit=571 / 02-2361 0_// i=828 , hit=571 / 02-2361 1_ i=829 , hit=637 / 02-1776 0_/32-Z 4 / i=830 , hit=637 / 02-1776 1_ i=831 , hit=623 / 02-1914 0_/32-C82 3 / i=832 , hit=623 / 02-1914 1_ i=833 , hit=650 / 02-1448 0_// i=834 , hit=650 / 02-1448 1_ i=835 , hit=487 / 02-834 0_// i=836 , hit=487 / 02-834 1_ i=837 , hit=487 / 02-834 0_// i=838 , hit=618 / 02-2040 0_// i=839 , hit=618 / 02-2040 1_ i=840 , hit=599 / 02-2192 0_// i=841 , hit=599 / 02-2192 1_ i=842 , hit=603 / 02-2148 0_// i=843 , hit=603 / 02-2148 1_組み込み用 i=844 , hit=651 / 02-1442 0_// i=845 , hit=651 / 02-1442 1_ i=846 , hit=660 / 02-1253 0_// i=847 , hit=660 / 02-1253 1_ i=848 , hit=606 / 02-2132 0_// i=849 , hit=606 / 02-2132 1_ i=850 , hit=606 / 02-2132 0_// i=851 , hit=641 / 02-1722 0_// i=852 , hit=641 / 02-1722 1_ i=853 , hit=641 / 02-1722 0_// i=854 , hit=567 / 02-2387 0_21-G13 4(組込用) // i=855 , hit=567 / 02-2387 1_ i=856 , hit=567 / 02-2387 0_// i=857 , hit=484 / 02-4478 0_// i=858 , hit=484 / 02-4478 1_ i=859 , hit=484 / 02-4478 0_// i=860 , hit=481 / 02-4475 0_// i=861 , hit=481 / 02-4475 1_ i=862 , hit=645 / 02-1585 0_21-F22 4 // i=863 , hit=645 / 02-1585 1_ i=864 , hit=615 / 02-2086 0_// i=865 , hit=615 / 02-2086 1_ i=866 , hit=517 / 02-4271 0_/31-Z(DG) 20 / i=867 , hit=517 / 02-4271 1_ i=868 , hit=566 / 02-2388 0_// i=869 , hit=566 / 02-2388 1_組み込み用 i=870 , hit=515 / 02-4293 0_// i=871 , hit=515 / 02-4293 1_ i=872 , hit=515 / 02-4293 0_// i=873 , hit=491 / 02-3002 0_// i=874 , hit=491 / 02-3002 1_ i=875 , hit=525 / 02-4183 0_// i=876 , hit=525 / 02-4183 1_ i=879 , hit=791 / 02-1933 0_// i=880 , hit=791 / 02-1933 1_ i=881 , hit=845 / 02-611 0_/32-C12 1 / i=882 , hit=845 / 02-611 1_ i=883 , hit=980 / (02-611) 0_// i=884 , hit=980 / (02-611) 1_ i=885 , hit=1058 / 02-181 0_/33-F81 3 / i=886 , hit=1058 / 02-181 1_ i=887 , hit=997 / 02-3016 0_21-Z 21 // i=888 , hit=997 / 02-3016 1_ i=889 , hit=1043 / 02-2031 0_/33-F12 12 / i=890 , hit=1043 / 02-2031 1_ i=891 , hit=993 / 02-4380 0_/33-F22 18 / i=892 , hit=993 / 02-4380 1_ i=893 , hit=1016 / 02-4065 0_/33-H41 8 31-Z 3 / i=894 , hit=1016 / 02-4065 1_ i=895 , hit=1052 / 02-1957 0_/32-C42 4 / i=896 , hit=1052 / 02-1957 1_ i=897 , hit=1062 / 02-1708 0_/33-G72 21, 33-G22 45, 33-H52 30, 33-Z(HI) 32, 33-Z(HI) 16 33-Z(GH) 22, 33-I12 28, 33-B31 28, 31-B12 6, 33-Z(CD) 24, 33-C31 32, 33-C21 15 / i=898 , hit=1062 / 02-1708 1_ i=899 , hit=1006 / 02-4239 0_// i=900 , hit=1006 / 02-4239 1_ i=901 , hit=1051 / 02-1962 0_// i=902 , hit=1051 / 02-1962 1_先出し必須! i=903 , hit=1024 / 02-2364 0_// i=904 , hit=1024 / 02-2364 1_ i=905 , hit=1038 / 02-2088 0_// i=906 , hit=1038 / 02-2088 1_ i=907 , hit=1049 / 02-2002 0_// i=908 , hit=1049 / 02-2002 1_ i=909 , hit=1072 / 02-1160 0_// i=910 , hit=1072 / 02-1160 1_ i=911 , hit=1227 / 02-1198 0_/32-C22 4(2011y) / i=912 , hit=1227 / 02-1198 1_ i=913 , hit=1326 / 02-1747 0_/31-D11 4 / i=914 , hit=1326 / 02-1747 1_ i=915 , hit=1531 / 02-2306 0_// i=916 , hit=1531 / 02-2306 1_ i=917 , hit=1428 / 02-2553 0_//41-Z(E) 3 i=918 , hit=1428 / 02-2553 1_ i=919 , hit=1568 / 02-1845 0_21-E33 2 // i=920 , hit=1568 / 02-1845 1_ ■出力完了 でした。
- eden3616
- ベストアンサー率65% (267/405)
>インデックスが有効範囲にありませんとでてしまいました。 >With bas_b.Sheets(i) 申し訳ありませんでした。プログラム側のミスになります。 該当箇所の1行上の For i = 1 To Sheets.Count を For i = 1 To bas_b.Sheets.Count としてください。 >ここはどのような意味なのでしょうか? 表示するブックのシートの数だけ、元のブックのシートを処理していたため 表示するブックが10シートで、元のブックの数が8シートでしたら2シートオーバーしたため 用意された数(対象のシートの数8が)有効範囲を超えてしまいました。
補足
ありがとうございます!!! 実際のもので試して数か所見てみましたが、表示されるようになりました!!本当にありがとうございます。 全てあっているか確認してみます。 今は標準モジュールに入れておりますが、 これをシート上にボタンを作り、 Private Sub CommandButton3_Click() ここに入れても問題はないのでしょうか? それとも標準モジュールでマクロの実行の方が宜しいですか?
- 1
- 2
お礼
お礼を入れたつもりが入ってなかったようです。 今回は本当にありがとうございました。 助かりました。 もう一つ実は教えていただきたいことがあるのですが、UPしてもよろしいでしょうか?