VLOOKUPの結果を値として保存する方法

このQ&Aのポイント
  • ExcelのVLOOKUP関数を使用して企業番号から企業名を取得していますが、一部の会社が月次でリストからなくなるため、値としてセルに保存したいと思っています。
  • VBAを使用すれば対応できますが、Excelの画面からだけで実現できる方法はあるのでしょうか?マクロの記録等はOKです。
  • VLOOKUP関数の結果を関数ではなく、値として保存する方法について教えてください。
回答を見る
  • ベストアンサー

VLOOKUPの結果を関数ではなく、値として保存

質問させてください。 現在使用しているEXCELファイルでは、企業番号を手入力すると、 VLOOKUP関数で、対象先のリストから企業名を取得し表示させています。 (対象企業はたくさんあり、一社づつ企業番号を手入力しています。) ただし、この対象先のリストが月次で更新され一部の会社が翌月にそのリストからなくなるため、 Excelで、その会社の名称がNAとなってしいます。 そこで、会社の名称を、VLOOKUP関数の結果を関数としてではなく、 値としてセルに保存したいと思っています。 VBAを使用すれば、以下のようなコードで対応はできることはわかりました。 Cells(8, 8).Value = WorksheetFunction.VLookup(Range("B3"), Range("C7:D11"), 2, 0) ただし、この方法はVBAを起動して自分でコードを記述する必要があり、難易度が高く、 所属する部ではこの方法でのExcelの実装ができません。 Excelの画面からだけで、上記のようなことを実現できる方法はあるのでしょうか? 自分でソースをかかないのであれば問題なく、マクロの記録等はOKです。 以上宜しくお願い致します。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

元のご相談は >自分でソースをかかないのであれば問題なく、マクロの記録等はOKです。 という要求でしたので,「マクロは使う」けど「マクロをユーザーが起動する必要が無い,マクロが勝手に起動して必要なことを自動でやってくれる」方法をご案内しました。 ご自身はマクロは使えると言うことなので,今回使用したようなイベントプロシジャについてもご了解済みの事と思いますが,話が違って「そもそもマクロは全部ダメよ」という事でしたら,手動でコピーして形式を選んで値にして貼り付けてください。 #参考 お勧めはしませんが,こんな方法もあります。 状況: たとえば今,H8セルに =VLOOKUP(B3,C7:D11,2,FALSE) と記入されている ご相談の状況説明により,リストとなるC7:D11は計算の後にクリアされてしまいB3に該当するデータが見つからないエラーが発生する。 準備: ブックを開く エクセルのオプションで計算方法欄にある「反復計算」のチェックを入れておく 手順: B3をまず先に空っぽにしておく H8の数式を =IF(B3="","",IF(ISERROR(VLOOKUP(B3,C7:D11,2,FALSE)),H8,VLOOKUP(B3,C7:D11,2,FALSE))) と書き換える 動作確認: B3にデータを記入し,正常に計算できることを確認する C7:D11からB3に該当するデータを削除若しくは編集し,従来ならエラーになったが,値が保持されることを確認する。

qwertydfv
質問者

お礼

お礼が遅くなりました。ありがとうございます。 色々奥が深くて勉強になります。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

>ただし… 自分ではマクロが書けないので,コピー貼り付ければ使えるよう丸ごと全部教えてもらえれば大丈夫。 と言いたかったのか 自作マクロは全然ダメよ。 と言いたかったのか どういうことでしょう? 作成例1: 新しいマクロの記録を開始する マクロの記録先は「作業中のブック」にする 所定のセルに所定のVLOOKUP関数を実際に記入する 所定のセルをコピーする 所定のセルに形式を選んで貼り付けで値のみ貼り付けて値化する マクロの記録を終了する シート上にオートシェイプなどでボタン絵柄を配置する 右クリックしてマクロの登録で,記録したマクロを登録する。 所定のセルに企業番号を記入し,マクロボタンをクリックすると,所定の企業名を所定のセルに記入してくれる。 作成例2: シート名タブを右クリックしてコードの表示を開始する 現れたシートに下記をコピー貼り付ける private sub worksheet_Change(byval Target as excel.range) if application.intersect(target, range("B3")) is nothing then exit sub cells(8, 8) = application.vlookup(range("B3"), range("C7:D11"), 2, false) end sub ファイルメニューから終了してエクセルに戻る アナタが書いてみたサンプルマクロに従い,B3セルに企業番号を記入すると,マクロが自動起動してVLOOKUPした結果を所定のセル(8の8)に書き入れてくれます。

qwertydfv
質問者

お礼

回答ありがとうございます。またお返事が遅くなり申し訳ございません。 この件について正確に述べますと、 まず問題をかかえていたのは、私の妹になります。そして妹から相談をうけたのが私になります。 私自身はマクロプログラム等はできる人間なので、VBAを使えば簡単だよとサンプルを作って送ってあげたのですが、妹の職場はVBAなんて使える人がいないのでダメと却下されてしまいました。 (ボタンやVBAコード全般すべてがだめだとのこと) そこで、EXCELの画面からだけで実装できる方法がないかないかとここで質問させて頂いた次第です。 普通に考えるとできなそうですが、ここで質問したらミラクルがおきるんじゃないかと思ったのですが難しそうですね ありがとうございました。

関連するQ&A

  • VLOOKUP関数をエクセルVBAで使いたいのですが、

    VLOOKUP関数をエクセルVBAで使いたいのですが、 式が間違っているのかどうかは分かりませんが実行できませんでした。 式は以下の通り、書きました。 どこが違うかご指摘願います。 よろしくお願いします。。 'VLOOKUPを行う Sheets("過去履歴").Range("BJ6").Value = Application.WorksheetFunction.Vlookup(Sheets("登録書").Range("A2").Value,Sheets("過去履歴").Range("B6:BG65536"),1,0)

  • VLOOKUP関数 正しい値が返されない

    sheet1にデータリストを入力、sheet2のA1にコード番号を入力し以下の表にSheet1の対象データを参照するというところ(VLOOKUP関数のみ)まではよかったのですが、元データに空欄の時は「データなし」と表示過去の質問を参照して下のような式に変更しました。 =IF(ISERROR(VLOOKUP($A$1,範囲,列番号,"")),”データなし”,(VLOOKUP($A$1,範囲,列番号,FALSE))) はじめは正しく表示はされたのですが、A1に違う値を入力し直しても値が変化しません。 エラー表示はでませんが、数式がどこか間違っているのでしょうか。 どなたかお知恵をお貸しください。

  • ExcelのVLOOKUP関数でについて

    ExcelのVLOOKUP関数で、完全一致のFALSEを使い、何も入れなければ空白 にするという処理は出来ます。(IF関数とVLOOKUPをネストさせて) ただし、商品番号100はりんご、商品番号200はみかん だとして、 間違って101を入れた場合や105などと入れてしまった場合(リストにない番号を入力した場合)も、#N/A と表示されずに空白にするという式はどうすれば良いでしょうか? リストにないデータ及び空白のデータは「空白」表示にするには?ということになります。 どうぞよろしくお願い致します。

  • エクセルのVLOOKUP関数

    エクセルでVLOOKUP関数を使ってます。 一般的には、たとえば製品番号(数字)を入力すると 製品名(文字列)を引いてくるという使い方でVLOOKUP 関数を設定すると思いますが、製品名を入力すると、製品番号を引いてくるように設定しようと思ったらうまくできません。 何かよい方法はありますか?

  • VLOOKUP関数とテキストボックスの連携

    エクセルでユーザーフォームを作成しています。 「テキストボックス11」に、以下のように、VLOOKUP関数を入れたいのですが、 どのようにしたら良いのか、わかりません。 ●入れたい関数は ISERROR関数とVLOOKUP関数を組み合わせたもの。 =if(iserror(vlookup(「コンボボックス1」の値,マスタ!A80:D90,4,false)),""vlookup(「コンボボックス1」の値,マスタ!A80:D90,4,false)) (1)「コンボボックス1」の値を検索値とする。 (2)参照範囲は「マスタ」シートの「A80:D90」 失敗しているVBAは以下の通りです。 Private Sub UserForm_Initialize() TextBox11.Value = Application.WorksheetFunction.if(iserror(VLookup(ComboBox1.Value, Range("A85:D94"), 4)),"",VLookup(ComboBox1.Value, Range("A85:D94"), 4)) End Sub 教えていただけると助かります。

  • 関数VLOOKUP IFERRORについて教えてください。

    関数VLOOKUP IFERRORについて教えてください。 セル(A1)でドロップダウンリストから会場名を選択。 SHEET2から住所・郵便番号・電話番号等を自動展開させています。 =IFERROR(VLOOKUP(B4,SHEET2!A:E,2,FALSE),"")など SHEET2に該当データがない場合は、SHEET1のセル1に手入力をしたいのですが 入力値が正しくない・・とエラーで返されてしまします。 どうしたら手入力できるようになりますか? ドロップダウンリストの指定がいけないのでしょうか? また手入力したとき、SHEET1のセルA2~A5にも手入力をしたいのですが (これは一応入力できるのですが) 入力と同時に、A2~A5の関数指定が消えてしまいます。 関数を保護したまま入力値を入れる方法はあるのでしょうか? ご回答いただけますようお願いいたします。 エクセル2007で作業中です。

  • TextBox.2 に Vlookupを入れる記述を教えて下さい。

    VBA初心者です。見よう見真似で売上伝票を作っています。 TextBox1には入力したコードをSheet2B1に書き込みたいです。 TextBox2にはTextBox1に入力したコードを見てVlookupのように、 商品リストから参照し、TextBox2に反映させたいです。 自分で作成してみたのですが、全く動きませんでした。 是非教えて下さい。宜しくお願い致します。 Private Sub CommandButton1_Click() With Worksheets("Sheet2") .Range("B1") = TextBox1.Text End With With Worksheets("商品リスト") TextBox2.Text = Application.WorksheetFunction.VLookup(Val(TextBox1.Value), RangeA, 2, False) End With End Sub

  • エクセルVBAで、VLOOKUP関数を使うとエラーが出る

    Excel97を使用しています。 ユーザーフォームを作っています。 下記のコードで、課名に対応した部名を表示させようとしたのですが、 「WorksheetFunctionクラスのVlookupプロパティを取得できません」 と出てきてしまいます。 Private Sub CB_課名_AfterUpdate()  LB_部名.Caption = Application.WorksheetFunction.VLookup(CB_課名, "部", 2, False) End Sub CB_課名はコンボボックス、LB_部名はラベル、 "部"は名前を付けたセル範囲です。その1列目はCB_課名のRowSourceで、2列目が部名です。 VBAでVlookup関数を使ったコードを公開されているサイトがありましたので、使えないことはないと思ったのですが、どこか書き方がおかしいのでしょうか? ご存知の方、どうぞよろしくお願いいたします。

  • VLOOKUP関数をVBAで書くには

    EXCEL VBAの初心者です VLOOKUP関数をVBAで書きたいのですが、よくわかりません すいませんがどなたかご教授、願えないでしょうか? sheet1     sheet2 A    B  A    B      名称 CD    名称 CD 滋賀県 25     滋賀県  25 京都府 26     大阪府 27 大阪府 27 兵庫県 28     兵庫県 28 sheet2のA列をキーにsheet1のA列と照合して sheet2のB列にsheet1で一致した行のB列をコピーする VLOOKUP関数を使うと、sheet2のB2は =IF($A2="","",VLOOKUP($A2,Sheet1!$A$2:$B$5,2,0)) としたら、25を得ることができました VBAでする場合、どのように書けばいいのでしょうか? よろしくお願いします

  • VBA WorksheetFunction.VLookupとoffsetプロパティー

    エクセル2002使用です。 VBAの記述で、WorksheetFunction.VLookupを使って求めた値の入っているセルの列方向に一つ下の値を取得したいのですが・・・・ range("A1").Value =WorksheetFunction.VLookup( range("B1").Value, Range("A3:C10"), 3, 1) 例えば上記で得た値がC4セルにあるのであれば、C5セルの値を取得したいのです。 offset(0,1)プロパティーをどこにおけば良いのか良くわかりません。 どうかよろしくお願いします。

専門家に質問してみよう