重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

こんにちは。
以前からの疑問なのですが、ワークシート関数であるindirectとcolumnを使ってのセルの参照をしたいのですが、column()が数字を返してくるため、それを実現できずにいます。choose関数を使ったり、lookupで別表を参照する以外の、もっとスマートな方法で英字を得る方法はないものでしょうか?

具体例を挙げると、http://www.field-play.com/Book1.xls
において、sheet1ではrow()を使って黄色セルを埋めていますが、コレと同様に、sheet2の黄色セルを、column()で埋めたいのです。

ちなみに、VBAは殆どわかりません。
エクセル2007を使用しています。
よろしくお願いします。

A 回答 (4件)

こんにちは。



通常は、セルというのは、数値で管理できますから、英字を文字で取る必要ありません。

OFFSET 関数は、基点になるセルを決めて、そこからいくつ、上下左右、離れるか、ということですから、

=OFFSET($B$1,1,COLUMN(A1)-1)
B1 を基点にしたら、その下---1セル、左は、0からということで、列に対して動かしていくわけですから、0 にするには、COLUMN(A1) = 1 ですから、そこから、-1 と引きます。

基点になるB1 は、必ず、絶対参照にして、$B$1 にしてください。

縦なら、

=OFFSET($B$1,ROW(A1)-1,0)

などとします。

あまり使いませんが、
=INDIRECT(ADDRESS(ROW(B2),COLUMN(B2)))

という方法でも可能です。詳しくは、ヘルプ等で確認してください。

ちなみに、英字を取る方法は以下のようにします。

=LEFT(ADDRESS(ROW(B2),COLUMN(B2),2),FIND("$",ADDRESS(ROW(B2),COLUMN(B2),2))-1)
    • good
    • 0
この回答へのお礼

よくよく考えれば、offsetを使うことでindirectを使わずにすむことが多そうですね。indirectだとどこまでを" "で括るかで悩むことがあったので、offset派に変更しようかな。
ありがとうございます。

お礼日時:2009/01/13 19:36

いいものがありますよ


address関数です
http://www3.tokai.or.jp/excel/kansu/address.htm

なんかこの為にあるような関数で

=address(5,2,4,1,"Sheet1")
とすると文字列で
「Sheet1!B5」
(※ 「や」はその内側がテキストであることを強調するために
  本来付かないものを敢えて付けたものです)

とお誂え向きに返してくれます

しかしながら
=indirect(address(row(A5),column(B1),4,1,"Sheet1"),1)
等とすると括弧の深さが総勢3つと深くなるので

オフセット関数を使って
=offset(Sheet1!$A$1,row(A5)-1,column(B1)-1,1,1)
の方が楽なのですが

ハイパーリンク関数とかの場合などもあり
かなり使えますよ

因みに数値を文字に置き換えるときは
char関数とか
lookup関数でした方が楽ですし
式自体もスッキリしますよ
=lookup(1,column($a$1:$z$1),char(column($a$1:$z$1)+64))→A
             ・
             ・
             ・
=lookup(27,column($a$1:$z$1),char(column($a$1:$z$1)+64))→Z
http://maglog.jp/excel/Article286981.html

char(64+row(a1))→A
char(64+row(a2))→B
    ・
    ・
    ・
    ・
char(64+row(a27))→Z
char(64+row(a1))&char(64+row(a1))→AA
http://www3.tokai.or.jp/excel/kansu/char.htm
    • good
    • 0
この回答へのお礼

そんな関数もあったんですね (^^;)
引数が多くてちょっと取っつきにくいですが、便利そうなのでaddressも使おうと思います。
ありがとうございます。

お礼日時:2009/01/13 19:33

出来ますよ


質問の前によくヘルプやネットで調べましょう

=INDIRECT("R2C"&COLUMN(),0)

後はご自分で
ヘルプを見てください
当方EXCEL2000で検証しました
    • good
    • 0
この回答へのお礼

あ、相対参照にすればいいのか。
使ったことなかったので思いつきませんでした。
ありがとうございます。

お礼日時:2009/01/13 19:38

じゃ OFFSET関数を使ってみてください



INDIRECT関数でもできないことはありませんが、
自力で工夫できないようであれば、他の関数で代用してみましょう

OFFSET関数と INDIRECT関数は合わせて覚えておくと良いですよ
    • good
    • 0
この回答へのお礼

あ、offsetという手もありましたね。
rowとcolumnが兄弟ということでcolumnが頭から離れませんでした。
ありがとうございます。

お礼日時:2009/01/13 19:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!