• ベストアンサー

Excelで参照用の文字列を数式にする方法

少々分かりにくいとは思いますが、困っているので質問させて頂きます。 状況、A.xlsというファイルに1から100のシートがある状態です。 各シートのA1には名前が入っているのですが、ここから別のB.xlsファイルに名前の一覧を作成したいというものです。 B.xlsに表示させたい内容(CSVで表示) 番号,名前 1,シート1のA1に記入された名前 2,シート2のA1に記入された名前 B.xlsのB2には、='[A.xls]1'!A1 と入力すれば良いのですが100個分を一つ一つコピーするのは非常に面倒ですし、住所等の項目が増えたり、数も増える可能性があります。この数式自体を文字列操作で作成することは簡単なのですが、作成した文字列を数式として実行させることができないかと思い投稿しました。 または、上記を実現する簡単な方法があればとも思います。 よろしくお願いします。

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

  • ベストアンサー
noname#52504
noname#52504
回答No.2

ご質問の趣旨を取り違えていましたらすみません。 ・シート名を得たい のではなくて、 ・シート名が連番であるブックAの、各シートのA1セルの値を得たい ということですよね。 ----------------------------------------------- ●甲案:INDIRECTを使って参照を作る INDIRECT関数を使えば、 「参照先を表す文字列」を使って参照することができます。 ブックBのB2を  =INDIRECT("'[A.xls]"&A2&"'!A1") として下方にフィルすれば、A列の値(シート名)に応じて、 ブックAのシート1,2,3…のA1セルの値が順に返ります。 ただし、INDIRECT関数には、  【閉じているブックは参照できない】 という欠点がありますから、ブックBを使う際には、 常にブックAも開いておく必要があります。 ----------------------------------------------- ●乙案:「文字列操作で作成した数式」を数式に変換する  0.ブックAを開く  1.文字列操作で「数式」を作成する   ブックBのB2を    ="='[A.xls]"&A2&"'!A1"   として下方にフィル   ※もちろん、この時点では参照先の値は返りません  2.「数式」を値として確定する   B列をコピー>編集>形式を選択して貼り付け>値  3.文字列中のイコール"="を、同じくイコール"="で置換する   B列を選択>編集>置換    検索する文字列:=    置換後の文字列:=   >すべて置換 この操作で、文字列の「数式」が数式と認識され、参照先の値を返すようになります。 普通にブックAを参照する数式を入力した場合と同じ状態になりますから、 ブックAを閉じてしまっても大丈夫です。 ただし、シート数が増えたりした場合には、 その都度0~3の操作を繰り返す必要があります。 ----------------------------------------------- どちらも一長一短ですが、ご参考まで。

bush09
質問者

お礼

回答ありがとうございます。 まさにご指摘の通りです。 甲案の方は、やはり使いづらいので乙案を試したところ、うまくいきました。当面この方法で対応できそうです。ありがとうございました。

その他の回答 (1)

  • suz83238
  • ベストアンサー率30% (197/656)
回答No.1

B.xlsが既存のなのか新規のブックなのか不明ですが、下記をやってみて下さい。シートが100あるブックの標準モジュールに下記を貼り付けて実行。 Sub xxx() Workbooks.Add ThisWorkbook.Activate n = 1 For Each sh In ActiveWorkbook.Sheets Workbooks(2).Activate Cells(n, 1) = n & "," & sh.Name n = n + 1 Next End Sub 新規のブックを作って、シート名を転記します。あとは、これをB.xlsで保存すれば完了。

bush09
質問者

お礼

回答ありがとうございます。 やってみましたが、ちょっとこちらのやりたいこととは違うようです。 ただ、シート名がこれで取得できるのならこれをベースにマクロも 考えてみます。ありがとうございました。

関連するQ&A

  • EXCELで文字列を結合して数式を処理したい

    LOOKUP関数を以下のように複数セルにわけて文字列として配置します。 A1:LOOKUP(AL17,'C:\Documents and Settings\My Documents\ファイルA.xls] A2:シート1 A3:'!$A$3:$A$200,'C:\Documents andSettings\My Documents\.xls] A2:シート1 A4:'!$B$3:$B$200) A1からA4までを文字列結合してA5に表示します。 A5:=A1&A2&A3&A2&A4 その上で、A5の数式をA6にて処理したいのですが、うまくいきません。 A6:indirect(A5) のように書いてもエラーとなります。 どなたか打開策を教えてください! #今回はlookup関数の参照するシート名を動的に表現したかったため、   わけて記述し、文字列結合するという形式にしています。   (ここでいうA2がシート名)

  • Excelでファイル参照を数式で表現したい

    Excel上で数式でファイル参照を表現し、 参照先のセルの値を表示させたいのですが、文字列として表示されてしまいます。 どのように記述すれば解決できますでしょうか。 現在、以下の方法を試みていますがうまくいきません。 ・A1セルに参照先のフォルダパスを記入 (例: D:\Application\ ) ・B1セルに参照先のファイル名を記入 (例: A.xlsx ) ・C1セルに参照先のシート名、セル番地を記入 (例 : Sheet1'!$A$1 ) ・D1セルにA1~C1セルを組み合わせた数式を記述 ="='" & A1 & "[" & B1 & "]" & $C$1 ※ 数式として次のようになります。 ='D:\Application\[A.xlsx]Sheet1'!$A$1 D:\Application\A.xlsx のSheet1のA1セルに test と記述されいる場合、 ここでD1セルに test と表示されてほしいのですが、 上記の数式が、そのまま文字列として表示されてしまいます。 A1~D1の書式は全て「標準」に設定しています。 また、このD1の値を他のセルに値として貼り付けて、Enterを押せば、test と表示されます。 数式に誤りはないはずなのですが、D1セルで直接 test と表示する方法はあるのでしょうか。

  • 《エクセル》配列数式について教えて下さい

    いつもお世話になります。 先日、このページで質問した時、配列数式について教えていただいて、例をもとに自分で作成しようとしたのですが、うまくいきません。 集計表A列とB列に項目行があり、別のファイル[Book1.xls]のSheet1にあるデータを羅列した表のA列とB列にある項目の2つのセルの内容に合致するデータ数をカウントする場合 =COUNTA(IF('[BOOK1.xls]Sheet1'!$A$2:$A$2000=$A1*'[BOOK1.xls]Sheet1'!$B$2:$B$2000=$B1)) と入力して、Shift+Ctrl+Enterキーを打ったのですが、「入力した数式にはエラーがあります」のエラーメッセージが出てきて、ヘルプを読んでみても解決方法がわかりませんでした。 お手数ですが、ご教授宜しくお願い致します。

  • Excel 複数ファイルの参照

    説明が難しいのですが、 例えば、デスクトップに[1.xls], [2.xls], [3.xls] ・・・ と連続したエクセルファイルがあり、 新規作成で以下のようなシートを作製して、   A B C D E F 1 1 2 2  3 3 4 4 5 5 6 6 B列にデスクトップ上の各ファイルのセルA1の値を入力したい場合、 数式を「='C:\…\デスクトップ\[***.xls]Sheet1'!$A$1」 として、***部分にセルA1~の数値を代入できるようにしたいのですが、可能でしょうか。

  • セル内の数式中の文字列を検索

    セル内に数式が入っている場合、その数式中の文字列を検索する関数がありますか。 例えばB1セルに=Sheet1!K2*Sheet2!K2*Sheet5!K2 B2セルに=Sheet4!K2*Sheet3!K2*Sheet6!K2 D1セルにB1の数式内のSheet2という文字があれば1を表示させ    無ければ0を表示させるというような関数はあるでしょうか。

  • エクセルマクロの質問です。

    例えば、A.xlsというファイルに01.csv,02.csv,・・・,20.csvといういくつかのファイルからデータを取り出すのですが、A.xlsのシート1の1列目に01.csvの1列目を貼り付けて、01.csvの2列目はA.xlsのシート2の1列目に貼り付けるようにシートをずらして行って、02.csvの1列目はA.xlsのシート1の2列目、02.csvの2列目はA.xlsのシート2の2列目というようにしたいのですが、どのようなプログラムがよいのでしょうか? エクセルマクロ初心者なので説明が不十分かも知れませんがよろしくお願いします。

  • Excel

    A.xlsとB.xlsの2つのブックがあります。 A.xlsのSheet1のB2セルに文字列が入っています。その文字列にはJ3など列と行の組み合わせの値になってます。 このA.xlsのSheet1のB2のセルの文字列を使ってB.xlsのSheet1の上記のB2に書かれた位置のセルの値を取得したい。 これを実現するにはどうすればいいですか? ご教授お願い致します

  • excelで、数式がそのまま文字として張り付いてしまう!

    Sheet2の1行目のセルに A1には=Sheet1!A1、B1には=Sheet1!C1、C1にはSheet1!E1 というSheet1の1列おきを引っ張ってくるわりと簡単な数式を入れました。 A~Cはうまく引っ張ってきたのですが、 D列を新しく作ろうと思い、A1のセルをコピペして、 =Sheet1!A1のAをGに変えたら、 D1のセルに数式が「=Sheet1!G1」というふうに そのまま文字として張り付いてしまいました。 これはイカンと思い、D1のセルに直接数式を打ち込んだりしましたが、 状況は変わりません。 ちょっと困っています。 よろしくお願いします。

  • エクセルの数式についての質問です。

    下記の数式で、「一覧!A4:EG1003,137」の「一覧!A4:EG1003,137」が空白の場合に、空白で返す場合の数式をお教えください。 現状の数式 =VLOOKUP(B1,一覧!A4:EG1003,137) 補足説明 エクセルのシート(一覧シート)のA4:EG1003内で137列目が空白の場合は空白で返す数式にしたいです。 VLOOKUPを使用しているので、別シートのB1セルには一覧シートの専用番号の行の値を入力するとその行が全て別シートに反映される形になっています。その時に空白の個所があると0表示になってしまうので、空白は空白で返したいです。

  • 数式を表している文字列を数式にする?方法

    表現が下手で申し訳ございませんが、教えてください。 ある特殊なリンク数式があります。数式の中ほどには数値部分があります。 その数値部分の前後で分割して(文字列化)、数値部分を変化させた後、元の数式にもどしたいのですが、単純に結合すれば、頭に=をつけても数式として認識されません。 方法はありますでしょうか? 例/ セル F1 に入っている数式  =IF(A1="あ","="&C1&B1&D1,"") セル B1 には不特定の数値が入力される。(例えば200411) セル C1 と D1 には元々一つの数式であったものを三分割した左側と右側を文字列として納めてある。 このままだと、セル A1 に「あ」が入力された場合、 セル F1 には、=「C1」0411「D1」といういように文字列として表示されます。 F1 をコピーして G1 に値貼り付けして、G1をダブルクリックした後、他セルを選択すると、数式になり、リンク値を正しく表示します。この作業を毎回行うのは面倒です。 F1 のみで処理する必要はないのですが、G1では完了させたいのです。 =Value(F1) ではダメでした。

専門家に質問してみよう