Excel2010 VLOOKUP範囲変更の方法と外付けHDDのフォルダ名が範囲になる理由

このQ&Aのポイント
  • Excel2010を使い慣れていない方がVLOOKUPの範囲を変更する方法について質問されています。
  • 回答として、置換を使用して範囲の変更を行う方法が提案されていますが、ファイルの確認が必要なため実行できない状況です。
  • また、外付けHDDのフォルダ名が範囲になる理由についても質問されています。
回答を見る
  • ベストアンサー

Excel2010 VLOOKUP 範囲の変更

Excel2010が使え慣れなくて困っています。 外付けHDD(F:)から本体(D:)にエクセルデータを戻しました。 下記のように関数式を保存していましたが、 =VLOOKUP($A2287,'D:\ドキュメント\Excel\工事受注報告書.xls'!諸工事マスタ,7) 戻してみると =VLOOKUP($A2246,'F:\ドキュメント241102\Excel\工事受注報告書.xls'!諸工事マスタ,7) となり、外付けHDDのフォルダ名がVLOOKUPの範囲になってしまいました。 勝手に'D:\ドキュメントから'F:\ドキュメント241102に変わっていました。 しかたなく置換で範囲の変更を行いましたが、すべて置換を押す毎にファイルの確認をしてくるので関数式が3000行の10シートあるの到底この方法では置換はできません。 いい方法の範囲の変更はできないでしょうか? また、なぜ外付けHDDのフォルダ名が範囲になったのでしょうか? わかり難い説明ですが、よろしくお願いしまします。

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

  • ベストアンサー
回答No.1
seto7074
質問者

お礼

回答ありがとうございます。 しかし、解決とは至りませんでした。 せめて範囲の変更はできなくても、バックアップデータを元の範囲名で戻ったらいいのですが・・・・

その他の回答 (1)

回答No.2

必ずテスト環境で確認してからやってください。 マクロブックは同じフォルダに入れる。その階層にある「.xls*」だけ処理します。 UsedRangeでうまく全体カバーできるのか、よく判りません。 Option Explicit Sub ReplaceLinkPath() Const xDefaultPath = "D:\tmp" Const xFileSelector = "\*.xls*" Const xBefore = "F:\ドキュメント241102\Excel\" Const xAfter = "D:\ドキュメント\Excel\" 'Const xBefore = "=IF(A2" 'Const xAfter = "=IF($A2" Dim xShell As Variant Dim xFolderPath As Variant Dim xFileName As String Dim xNoData As Boolean Dim xNoChange As Boolean Dim xSheet As Worksheet Dim xCell As Range Dim xLast As Long Dim xRow As Long Dim kk As Long Dim nn As Long Application.ScreenUpdating = False Application.DisplayAlerts = False xNoData = True Set xShell = CreateObject("Shell.Application") Set xFolderPath = xShell.BrowseForFolder(&O0, "データ(ブック)が存在するフォルダを選択, Please!!", &H1 + &H10, xDefaultPath) If xFolderPath Is Nothing Then Exit Sub xFileName = Dir(xFolderPath.Items.Item.Path & xFileSelector, vbNormal) Do Until xFileName = Empty xNoData = False Debug.Print xFileName Workbooks.Open xFolderPath.Items.Item.Path & "\" & xFileName xNoChange = True For Each xSheet In Worksheets kk = 0 For Each xCell In xSheet.UsedRange kk = kk + 1 If (InStr(xCell.Formula, xBefore) > 0) Then Debug.Print xCell.Formula xCell.Formula = Replace(xCell.Formula, xBefore, xAfter) Debug.Print xCell.Formula xNoChange = False End If Next xCell Debug.Print xSheet.Name, kk Next xSheet Application.DisplayAlerts = False If (xNoChange) Then Workbooks(xFileName).Close False Else Workbooks(xFileName).Close True End If Application.DisplayAlerts = True xFileName = Dir() Loop If (xNoData) Then MsgBox ("No Data Found!!") End If Application.CutCopyMode = True Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub

seto7074
質問者

お礼

回答ありがとうございます。 ただ、あまりマクロが詳しくないのとエクセル2003で作成したマクロをエクセル2010で保存したらファイルの種類を間違えて消したことがトラウマになっています。 マクロ知識のレベル上がったら使わせていただきます。 エクセルデータを戻しかたは、エクセル2010で画面に出してから本体(D:)に保存しましたが、後から気付いたのですが外付けHDD(F:)からコピペで本体(D:)へ戻すと保存したままの範囲だったのです。 エクセル2003ではこのようなことはなかったと思います。これはエクセル2010の仕様か設定でしょうか。

関連するQ&A

  • vlookup で列番号を使わない方法は?(Excel)

    Excelでいくつものブックから、マスター.xlsを参照して、データベース的に使用しています。 マスターで、最初にA列:ID、B列:氏名、C列:ふりがな、D列:姓、E列:名、F列:所属と作り、 他のブックからIDからvlookupを利用して、それぞれ必要なデータを導き出していたのですが、 必要が生じてマスター.xlsのそれぞれの列の間に色々と加えてしまったために、例えば、所属がI列まで移動してしまいました。 範囲に名前を付けているので、所属を検索する関数が 「=vlookup(a1,'マスター.xls'ID所属検索,6,false)」だったのが、 「=vlookup(a1,'マスター.xls'ID所属検索,9,false)」と変更しなければなりません。 検索元のvlookupの列数を変更しなければならないのが非常に面倒です。 何か方法は無いのでしょうか? ファイルもたくさんあるし、そのファイルの中でも参照したいデータも複数あるので、気が遠くなります。 ヒントになりそうなことでも結構ですので、ご教授下さい。

  • VLOOKUP関数の範囲をセルで指定したいと思っています。

    VLOOKUP関数の範囲をセルで指定したいと思っています。 B1:参照シート名(VLOOKUP関数で使用する範囲があるシート) C2:範囲の開始位置 E2:範囲の終了位置 B3:G3:列番号(B3の値は、B6:B8の範囲で使用する列番号、 D3の値は、D6:D8の範囲で使用する列番号) これらのセルに入力された情報をもとにB6:G8の範囲にVLOOKUP関数を 反映させたいと思っています。 例えば、 B1に参照シート名「2ケタ」 C2にVLOOKUP関数の範囲の開始位置「A5」 E2にVLOOKUP関数の範囲の終了位置「G7」 B3に範囲の列番号「2」がある場合 B6に「=VLOOKUP(A6,'2ケタ'!A5:G7,2,0)の関数を入力。 B2に参照シート名「3ケタ」 C5にVLOOKUP関数の範囲の開始位置「B5」 E2にVLOOKUP関数の範囲の終了位置「H7」 C3に範囲の列番号「3」がある場合 C6に「=VLOOKUP(A6,'3ケタ'!B5:H7,3,0)の関数を入力。 といった感じです。 現在、B6に「=VLOOKUP($A6,INDIRECT($B$1&"!a5:g7"),INDIRECT("$b$3"),0)」と 関数を入力して、VLOOKUP関数の「範囲の参照シート名」と「列番号」の情報は セルから持ってくることができました。 しかし、「a5:g7」という範囲だけは、INDIRECT関数をうまく入れることができません。 どのように関数を入力したら、上手くいくのか、教えていただけないでしょうか。

  • MS Excel 日付範囲を条件としたvlookup

    以下のようなテーブルがあります。 A列___B列___C列___D列___E列 販売先___製品コード___単価___開始日___終了日 AAA___F1234___$1,000___11/01/2008___11/15/2008 BBB___F1234___$1,500___11/01/2008___11/15/2008 AAA___F1234___$900___11/16/2008___11/29/2008 BBB___F1234___$1,100___11/16/2008___11/29/2008 . . . (セルの区切り目を表す為、"___"を便宜上ここでは使っています。) 実際のテーブルは販売先、製品コードも複数存在します。同じ販売先&製品コードで日付の範囲がオーバーラップすることはありません。 このようなテーブルにおいて、 「11/18/08の販売先AAAのF1234」の単価を引っ張ってきたいとき、Vlookup関数を使って(vlookupと何かほかの関数を組み合わせることになるかと思いますが。。)単価を検索することはできますでしょうか。 日付は開始日と終了日は別々のセルに入っています。 よろしくご教示お願いいたします。

  • VLOOKUPで値があるのにエラーになる

    EXCEL2003でVLOOKUP関数を使用しています。 =VLOOKUP(A1,マスタ,2,0) 上記の関数をコピーしたのですが、いくつかエラーとなる箇所があり、 マスタの検索先を調べてみると、検索値と一致している項目があるのに エラーとなっているものがあります。 IF関数で検索値とマスタの検索先を比べてみて、一致しているのは確認しました。 原因がわかる方いらっしゃいましたら教えてください。

  • こんにちは。VLOOKUP関数の引数で「範囲」を選択するとき、他のパス

    こんにちは。VLOOKUP関数の引数で「範囲」を選択するとき、他のパスにあるファイルの参照の仕方についてお尋ねします。 例えば、VLOOKUP関数を使って以下のパスにあるファイルを参照するとします。 ▼パス        :C:\作業 ▼フォルダ名     :作業 ▼ファイル名     :参照先.xls ▼参照するシート名:シート1 関数を入力して保存して再び開くと、このようになります。 =VLOOKUP(A1,'C:\作業\ [参照先.xls]シート1'!$A$2:$F$10,3,FALSE) このパス・ファイル名・シート名をどこかのセルに入力しておき、参照先のフォルダが変わったとしても「パス」を入力するセルの値を変えることで、可変的に参照できるようにしたいと思っています。 例えばA10のセルで、範囲の引数である文字列を <A10のセルの値>'C:\作業\ [参照先.xls]シート1'!$A$2:$F$10 というようにつなげて作成し、 =VLOOKUP(A1,A10,3,FALSE) とやってみましたが参照できるわけもなく、うまい方法はないかなと悩み中です。 わかる方からの回答をお待ちしています。

  • 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 教えていただけると助かります。

  • EXCEL2000 VLOOKUP関数について

    たとえばテストの点数なんかを30点未満はD、60点未満はCなどのように 評価を自動的に表示させる関数はVLOOKUPでいいと思うのですが、 ダイアログに具体的にどんな風に範囲入力すればいいのでしょうか?教えてください。お願いします.

  • 【Excel】VLOOKUP関数について

    Excel2003を使用しています。 B列にコードNo.、D列に会社名が入力されている表(1)があります。 表(1)とは別のシートで、B列にコードNo.を入力すると、D列に会社名が表示されるように、VLOOKUP関数で検索範囲を表(1)としてD列に数式を入力しています。 これを逆に、D列に会社名を入力したら、B列にコードNo.が表示されるようにしたいのですが、B列に数式を入力する際、表(1)はこのまま利用できるのでしょうか?

  • エクセルのVLOOKUP関数について

     エクセルで、VLOOKUPを使っています。  A3に 1 と入力すると、Aの5行目11行目までから、別のシートに入力してある A1~G1の項目の情報が1列にババッと入力されています。    そのVLOOKUP関数を使おうと思うのですが、この関数は数年前に入力したもので、式の作り方がわからなくなってしまいました。 前使った式は =VLOOKUP(F2,'C:\Documents and settings\office\デスクトップ\新しいフォルダ (2)\[ガイドブック.xls]Sheet1'!1:65536,11,0) です。 この式の意味が、今見てもさっぱりわかりません。 この式がどういう命令になっていたのか・・・・(特にSheet1からわからない)、 もし出来たら教えていただけるとありがたいです。 間違っている箇所があったらそれも教えてくださるとありがたいです。

  • VLOOKUP関数について

    VLOOKUP関数についてお尋ねいたします。 VLOOKUPで、下記のような事ができるでしょうか。 1 11 a 1 12 b 1 13 c 2 11 d 2 12 e 2 13 f 2の11を選択すると『d』を 引っ張ってくる。 よろしくお願いします。

専門家に質問してみよう