• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:シート1のセルの値がシート2の範囲にあったら)

シート1のセルの値がシート2の範囲にあったら

このQ&Aのポイント
  • シート「メニュー」の「検索コード」セルに入力した値が、シート「リスト」の範囲にある場合に、指定された保存先のパス&検索コード&'.xls'で示されるファイルを開くVBAを作成したい。
  • VBAを使用して、シート「メニュー」の「検索コード」セルに入力した値が、シート「リスト」の範囲に存在する場合に、指定された保存先のパス&検索コード&'.xls'で示されるファイルを開く処理を実装したい。
  • シート「メニュー」の「検索コード」セルに入力した値が、シート「リスト」の範囲に存在する場合、指定された保存先のパス&検索コード&'.xls'というファイルを開くVBAコードを作成したい。

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1416)
回答No.1

>シートを超えてのRange オブジェクトを明示的に指定しないからです。 デフォルトオブジェクトを使ったプログラムは プロから見ると品質上、即却下です。 先ず、シートを指定する変数を作りましょう。 Dim メニュー As WorkSheet Dim リスト As WorkSheet Set メニュー = ThisWorkbook.WorkSheets("メニュー") Set リスト = ThisWorkbook.WorkSheets("リスト") この後、検索コードを取得します。 Dim 検索コード As String 検索コード = メニュー.Range("検索コード").Value If 検索コード = "" Then Exit Sub ★If Range("検索コード") = "" Then のように対象の シートを指定しないコーディングは危険です。 できればプロパティもデフォルトではなく、明示的に 指定すべきです。 検索は以下の通りです。 Dim 検出コード As String On Error Resume Next 検出コード = Application.WorksheetFunction.VLookup _ (検索コード, リスト.Range("A2:A65536"), 1) On Error GoTo 0 If 検出コード <> "" Then   Dim ブック名 As String   ブック名 = メニュー.Range("保存先").Value   If Right(ブック名, 1) <> "\" Then ブック名 = ブック名 & "\"   ブック名 = ブック名 & 検出コード & ".xls"   'ブックを開く   Dim 対象ブック As Workbook   On Error Resume Next   Set 対象ブック = Application.Workbooks.Open(対象ブック)   On Error GoTo 0   If 対象ブック Is Nothing Then     '★ファイルが存在しない場合の処理   Else     '★ファイルを開いた後の処理   End IF Else   リスト内に同じものが無い場合の処理 End If あと、変に省略した短い英字の変数名より、日本語の 変数名の方が分かり易いですよ。

sora86miku
質問者

お礼

お世話になっております。 nda23さんに頂いたものをほぼそのまま使ってみたり、Dirで作り変えてみたり等、試行錯誤しましたが上手くいきませんでした。 問題は、「検索コード」をシート「リスト」のセル範囲名「リスト」から探すところにあるようで、 リストにあるはずのコードが結果「""」として出てきていました。 そして検出コード=""になってしまい、どうやってもリストと一致せず、「リスト内に同じものかない場合の処理」というルートにしか進んでいませんでした。 ----- Dim メニュー As Worksheet Dim リスト As Worksheet Dim 検索コード As String Dim コードリスト As Range Dim 検出コード As String Set メニュー = ThisWorkbook.Worksheets("メニュー") Set リスト = ThisWorkbook.Worksheets("リスト") 検索コード = メニュー.Range("検索コード").Value Set コードリスト = リスト.Range("リスト") On Error Resume Next 検出コード = Application.WorksheetFunction.VLookup(検索コード, コードリスト, 1, 1) On Error GoTo 0 If 検出コード <> "" Then ----- 以上の構文で、「検索コード」が「100000」で「コードリスト」に「100000」があるはずなのに、「検出コード」が「""」で返ってきてしまいます。 何故なのでしょうか?;

sora86miku
質問者

補足

ご回答ありがとうございます。 シートからセルまで事細かを明示的に記述する方法や、 関数でいうところのVlookupのVBAでの記述の仕方がわからず悩んでいました。ありがとうございます。 変数名はアルファベットに限らなくても良いのですね@@ よく見るのは英単語であったり英単語の省略であったりしたので、特に気にもせず「a」でも「b」でもとりあえず自分が把握できればいいか、と考えていました。 第三者に見てもらうことを考えてもわかりやすい方がいいですね。 教えて頂いた構文を組み込んでみたのですが、エラーやファイルを開いてくれないなど、ケースごとの処理も入れてみたのですが引っかかってしまいます。 ですがこの頂いた構文を自分でアレンジしてみれば動きそうな気配がするので、またしばらく自分で考えてみます。 お礼が遅くなってしまいますが、試行錯誤して作り変えてみたいと思います。 予想としては、Dirを使ってみる予定です。 とりあえずはその旨をと思いまして、補足とさせて頂きます。 解決しましたらベストアンサーとしてお礼を、 もしアレンジしてもできなかった場合は、またその問題点をお礼に記述させて頂きたいと思います。

すると、全ての回答が全文表示されます。

関連するQ&A