エクセルVBAでの在庫管理と文字列検索について

このQ&Aのポイント
  • エクセルVBAを使用して、在庫管理をする際に文字列検索を行う方法について質問があります。初心者の方ですが、4つのListboxから選択された文字列をつなぎ合わせ、在庫データベースと突き合わせて在庫を引き落とす処理を行いたいのですが、一部のケースでうまく動作しないことがあります。文字列の突き合わせにおいて見た目が同じでも、違いが認識される場合があるのでしょうか?(半角全角や末尾のスペースの違いなどは考慮に入れているとのことです。)
  • エクセルVBAを使用して在庫管理を行いたいのですが、文字列の突き合わせにおいて問題が生じています。4つのListboxから選択された文字列をつなぎ合わせ、在庫データベースと突き合わせて在庫を引き落とす処理を行いたいのですが、一部の場合で正しく動作しないことがあります。文字列の見た目が同じでも、違いが認識されることがあるのでしょうか?(半角全角や末尾のスペースなどの違いは考慮済みです。)
  • 初心者の方ですが、エクセルVBAを使って在庫管理をしようとしています。4つのListboxから選択された文字列をつなぎ合わせ、在庫データベースと突き合わせて在庫を引き落とす処理を行いたいのですが、一部の場合で正しく動作しないことがあります。文字列の見た目が同じでも、違いが認識されることがあるのでしょうか?(半角全角や末尾のスペースなどの違いはチェック済みです。)
回答を見る
  • ベストアンサー

エクセルVBA:文字列での検索

エクセルVBAで、在庫管理をしようとしています。初心者です。 4個のListboxをそれぞれ選んでいくと、任意の商品名になるようにしています。 そこで、選んでもらった後、 Listbox1.List(Listbox1.ListIndex) & Listbox2.List(・・・・ というように4個のListboxから選ばれた文字列をつなぎ、別シートの在庫データベースの「商品名」と「Listboxをつなぎ合わせた文字列」と同じのを探させて、在庫を引き落とすようにしています。 ですが、できる場合とできない場合があります。 何ででしょう? 文字列で突き合わせると、見た目が同じ場合でも違うと認識されることがあるのでしょうか?(半角全角が違うとか、最後にスペースが入っているとかはないです。試しにセルに貼り付けてvlookupで検索してみると、できました。)

質問者が選んだベストアンサー

  • ベストアンサー
noname#22222
noname#22222
回答No.1

Q,何ででしょう? A,バグ! 多分、そうしているとは思いますが、念のために・・・。 ・[検索スペル]等のテキストボックスを配置する。 ・リストボックスが選択される都度に[検索スペル]を更新する。 ・[検索スペル]の右に[一致する商品在り]のチェックボックスを設ける。 こうして、[一致する商品在り]が真の場合のみ[在庫引落し]ボタンを有効にする。 と、ステップを区切って、一つひとつの進行が目に見えるようにすればバグを防ぎやすいです。 その上で、どのステップで問題が発生しているのかを絞り込んで質問されると解決すると思います。

maashi1973
質問者

お礼

ご回答ありがとうございます。 実は、後で超初歩的な間違いに気づきました。 For Nextで検索してたのですが、For Nextの間に「i+1」というのを入れてまして、iが2ずつ増える結果になり、1行飛ばしでの検索になってしまってました。(いつもDo Loopを使ってたので、クセで入れてました)

関連するQ&A

  • エクセル、VBA、抽出複数検索について

    エクセル、VBA、VLOOKUP、MATCH関数等について出来る方法があれば教えてください。 インチごとに分けてあるシートがあり、(在庫表です) これを参照して、別ブックへVLOOKUP等を使って、サンプルデータのシート4のように表示させたいのですが、 何か方法を使って出来ることは可能でしょうか? 問題点が複数あります 1、VLOOKUPの範囲について、B列が結合されていて、C列は複数行あるため、商品名が入ってきません。 C列については、何千件とデータがあるため、結合することは不可能です。 一致している条件としては商品コードが必ずあり、商品名には「/」が入っております。 =CONCATENATEとVLOOKUPは一緒に使うことは可能ですか? もしくはINDEX関数やIF、SUMPRODUCT等を使うのでしょうか? シート4のような形に出来る方法があれば、教えてほしいです。 VBAは詳しくはないのですが、VBAで出来るのであれば、教えてほしいです。 在庫表はとても作り方が悪いのですが、これを作り直すと言うことは、不可能です。 グループ会社で使っているため、なんとかこの在庫表を使いたいです。 VBAでA列をA5からA100にコードのみ入れた場合、B列に商品名が入るようにVBAで作ることは可能でしょうか? もしくは、検索条件を2つ使って、一つは商品コード完全一致+あいまい検索で【/】で商品名を入れることは可能でしょうか? 関数は調べたのですが、関数では難しいのかなと思います。 宜しくお願い致します。

  • Excel VBAで、特定半角文字のみ全角文字に変換したい。

    Excel VBA で、 A列に半角、全角が混在した文字列及び数字が入っています。 ファイル名に出来ない半角文字 \ / : * ? " < > | だけを全角文字にするには、 どのようなコードを書けば良いのか、宜しくお願いします。

  • エクセルVBAで実行する対象を選択文字列にするには?

    エクセルVBAで文字列を半角や全角にするマクロをつくっています。 私は、”あるセルに対して”はできるんですが、 その対象文字列を、”カーソルで選択して反転したところに対して”実行できるようにしたのです。できるんでしょうか。 よろしくおねがいします。

  • excelシート内で半角文字を検索したい

    win2000 excel97です 住所リストを加工したいのですが半角全角混在しています その後の処理の問題があり 半角←→全角の置換をせずに半角文字を検索し その列にフラグを立てたいのですが 半角文字を見つける方法がわかりません どなたかご存知でしたらお教えください よろしくお願いいたします

  • 【VBA】文字列の場所入れ替え

    こちらの識者の方々にはいつもお世話になっています。 VBAの質問です。 環境は下記になります。 OS=windowsXP SP3 Office=Excel2003(11.8347.8403) SP3 A列に住所のデータがあるのですが、形式がちょっと特殊で、 A1 千代田区千代田1-1-1-301千代田マンション1号棟 A2 千代田区千代田2-3-4 というな形になっています。(A1,A2はセル番地表示で、その文字列がセルにあるわけではありません) 並び順が、市名(区名)・町名・丁目・番地・号地・部屋番号・物件名となっています。 データの定義は、丁目・番地・号地・部屋番号については半角数字・市名(区名)・町名・物件名は数字やアルファベットを含むものであっても全角であることは担保されております。 戸建てであればいいのですが、集合住宅の場合、物件名と部屋番号が入れ替わってしまっています。 これを、できればA列には住所、B列には物件名・(全角スペース)・部屋番号とわけたいのです。   A           B 1 千代田区千代田1-1-1  千代田マンション1号棟 301 2 千代田区千代田2-3-4 1.最後の文字列が全角か半角かで処理を分岐、(半角ならスルー、全角なら2.以降に) 2.セル内の最後の半角文字の次の文字から最後の文字までを抜き出す 3.最後のハイフン(-)の次の文字から全角文字の前の文字までを抜き出す 4.2と3で抜き出した文字列を合体 という流れでやろうと思い、まずは1のコードを、StrConv(Right(Range("A1"),1), vbNarrow) で検査してみたのですが、vbNarrowは半角に変換できる文字列のみ対応しているようで、漢字のものはスルーされてしまい、検査段階で既に頓挫しています。 上記のような場合、どのようなコードが適していますでしょうか。 質問に不備不足等ございましたらご指摘ください。 ご面倒お掛けしますがよろしくお願いします。

  • 【VBA】 文字列の中から指定の文字列を取り出す

    VBAで文字列から指定の文字のn番目からn+1番目までの文字列を取り出すことは可能でしょうか? A1セルに下記の文字列があった場合、「1番目の半角スペースから2番目の半角スペースまでの文字列」を取り出したいのです。 5 53 00 8R この場合、53を取り出したいというわけです。 また、可能でしたら「最後の半角スペースから文字列の最後まで」を取り出す方法も教えていただけるとありがたいです。 この場合は8Rとなります。 InStr関数を使えばできるかもと思ったのですが、できそうなものが思い浮かびません。 どなたか教えていただけませんでしょうか。 よろしくお願いいたしますm(_ _)m

  • エクセルVBA ListBox最初と最後を選択

    エクセルVBAのListBoxについて教えてください 「ListBoxの最初が選択させれいる場合は・・・」は、 If ListBox.ListIndex = 0 Then だと思うのですが、 「ListBoxの最後を選択されている場合・・・」は、 どのようになるのでしょうか? ListBoxの数を自分で数えて、 If ListBox.ListIndex = n Then など自分でnを記載するしかないのでしょうか ListIndexの数が変われば、毎回書き直さなければいけないので、できれば最後を取得する方法があればと思うのですが よろしくお願いします

  • エクセル データベースからの検索について

    エクセル データベースからの検索について 商品名・商品番号・在庫といったデータベースがあります。 検索する別の場所を設けそこで商品番号をたたくと商品名と在庫が表示できるようにVLOOKUPでしました。 商品番号がわからない場合があるので商品名から検索できるようにしたいのですが 商品番号からの検索と同じ関数では「#N/A」となってしまいました。 文字での検索の場合はどのような関数になるのでしょうか?         B2商品番号入力   C2検索結果表示(商品名) D2検索結果表示(在庫数)         B3商品名入力    C3検索結果表示(商品番号)D3検索結果表示(在庫数)  A10商品番号  B10商品名     C10在庫数   :       :         : としてC2には =VLOOKUP(B2,A10:C100,2,FALSE) とし正しい結果が表示されます。 商品名から検索したいC3にも同様のものをいれましたが表示されません。 よろしくお願いします。     

  • VBA(Excel)で文字列内の"~"記号だけ半角変換したくない

    VBA(Excel)で、StrConvを用いて、文字列内に存在する記号を全角→半角に変換して、再び文字列内に格納するようにしています。   strValue = StrConv(strValue, vbNarrow) しかし、"~"も"~"に変換されてしまいます。 "~"は半角変換しないようにしたいのですが、何か良い手法はありますでしょうか? どなたかご教授下さいませ。 よろしくお願い致します。

  • エクセル2007VBAで検索するコードを知りたい。

    エクセル2007(Excel2007)のVBAで【検索と置換】と同等の機能をもった検索アプリケーションを作りたいのですが、 そのコード(コマンドボタンを実行したときのコード)を教えていただけないでしょうか。 (おそらくですが、リストボックスのコードも必要だと思います。) 正しくは、【検索と置換】から【置換】機能を無くしたものとイメージしていただきたいです。 ●設置するもの ユーザーフォーム(UserForm1) テキストボックス(TextBox1) コマンドボタン(CommandButton1) リストボックス(ListBox1) ●仕様 ユーザーフォームのテキストボックスに入力してコマンドボタンを押すと、検索対象を見つけ、 リストボックスにその対象一覧を行ごとに表示するものになります。 ●検索するときの条件 (1)大文字と小文字を区別しない (2)半角と全角を区別しない (3)部分一致すれば(一部でも一致すれば)検索対象にする (4)今、開いているワークシート上の「全てのセルが検索対象(列や行を指定しない)」 ※検索されたセルの存在する行ごとに、ユーザーフォームのリストボックスに(1行ずつ)表示したいです。 そして、リストボックスに表示されたデータのうち、どれか1つを選ぶと、その選択対象の行の【D列】にアクティブセルを移動するようにしたいです(画面もアクティブセルが見える位置にスクロールします)。 ●リストボックスに(1行ごとに)表示するもの● ↓↓↓ (左から)I列の値、D列の値、O列の値、Q列の値(→4列の値になります) ※リストボックスにQ列の値が表示された場合のみ(Q列に何かしらのデータがある場合のみ)、 リストボックス上の【その行の(I列の値、D列の値、O列の値、Q列の値の)文字すべてを赤色】にして表示していただきたいです。 分かる方がいましたらよろしくお願いいたします。