酒とタバコと映画な日々

さすらいのモバイラー...またの名を「さびしき独り者」

[Excel メモ] シート名をセルに載せる書式

=REPLACE(CELL("filename",A1),1,FIND("]",CELL("filename",A1)),)

  • "filename" ,"A1" のところはそのまま。気を利かせて変えなくて OK。
  • セルを有効にするには、一旦ファイルを保存して再びをファイルを開くことが必要。

つまり、だ、この文に "JIS" や "CONCATENATE" を適応してあげれば、色々と加工ができるってことか。


追記メモ

このままじゃ後々の転機がきかない可能性があるので [20080208 2100 追記]

CELL("filename",A1) →以下「略 1」と呼ぶ
これによってファイル名とシート名の文字列が得られる。「絶対パス名 + [ファイル名] + シート名」な形式。
A1ってのは「セル A1 を含むシート」って意味だけど、省略可能。
例 : C:\Documents and Settings\hoge\デスクトップ\[Book1.xls]Sheet1
FIND("]",略 1) →以下「略 2」と呼ぶ
CELL("filename",A1) によって得られる文字列のうち、「]」が文字列の先頭から何文字目かを求める。
→シート名より前の文字が何文字あるかを求める、ってこと。
REPLACE( 略 1 , 1,略 2,)
REPLACE は置換の関数。
「略 1 で得られる文字列の 1 文字目〜略 2 で得られる文字までを、"(null)"で置き換える、と言う意味。
つまり、これにより、絶対パス名 ,ファイル名 が (null) で置き換えられるため、シート名のみが抜き出せるって算段。

と、ここまで書いていて分かったのですが、パス名に「]」(半角の終わり大括弧)が入っていると、そこまでが置換されるわけで、完全にシート名だけを抜き出すことができないんだな。

  1. じゃあ文字列の右側から「]」を探すってのはどうだい。
    →シート名に「]」を使っていたらそこが引っ掛かってしまいます。
  2. じゃあじゃあ、文字列の右側から「.xls]」な文字列を探して....
    いやいや、それもシート名に「.xls]」を使っていたらアウトです。ちなみに、ファイル名に「]」を使う場合、CELL("filename")で得られる文字列中では「)」に代わります。
  3. じゃじゃじゃじゃあ....
    じゃあじゃあじゃあじゃあ、うるさいね!!

と、独り押し問答をしてみたのですが、どうやらシート名に「[」「]」「\」は使えないようですので、そういう意味では上記の押し問答での「1」が有効そうです。(使えないわけではないけど、使ったら最後そのシートはシート名の変更ができなくなりました。)
それにカラクリがわかってしまえば、文字列上の操作なだけで、置換の REPLACE なんかしなくっても、抜き取りの MID 関数や RIGHT 関数でもいいわけで。

そう考えた結果が....

  1. CELL("filename")で得られるファイル名における一番右側の「]」が何文字目であるかを算出する。
  2. RIGHT 関数で、その文字数 +1 から先を取り出す。

まぁ考えたまではいいけど、これを実現する関数の表記までは思いつきません。

Comments

植ムラ
自分でコメント

=RIGHT(CELL("filename",A3),LEN(CELL("filename",A3))-(FIND(".xls]",CELL("filename",A3))+4))

1. 全体の文字列長さを"LEN"で求める。
2. FINDで「.xls]」って文字列が何文字目にあるかを求める
3. 1,2の結果より"RIGHT"関数でワークシート名部分を抜き出す。

拡張子を除くファイル名の「]」は、CELL関数の出力では「)」になる。
CELL関数の出力で「]」が出てくるのはファイル名箇所だけなので「.xls]」を見つけるようにすれば良い。
ただし、ワークシート名に「]」は使用しないこと。これは上記の式の出力云々ではなく、そのファイルが保存できなくなるため。

何にせよ、まずは消してもいいファイルで実験した後に使うようにして下さい。
2008/05/15 10:22 AM

Comment Form

Trackbacks