• ベストアンサー

columnでのアルファベットの取得

こんにちは。 以前からの疑問なのですが、ワークシート関数であるindirectとcolumnを使ってのセルの参照をしたいのですが、column()が数字を返してくるため、それを実現できずにいます。choose関数を使ったり、lookupで別表を参照する以外の、もっとスマートな方法で英字を得る方法はないものでしょうか? 具体例を挙げると、http://www.field-play.com/Book1.xls において、sheet1ではrow()を使って黄色セルを埋めていますが、コレと同様に、sheet2の黄色セルを、column()で埋めたいのです。 ちなみに、VBAは殆どわかりません。 エクセル2007を使用しています。 よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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)

maina-
質問者

お礼

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

その他の回答 (3)

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.3

いいものがありますよ 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

maina-
質問者

お礼

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

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

出来ますよ 質問の前によくヘルプやネットで調べましょう =INDIRECT("R2C"&COLUMN(),0) 後はご自分で ヘルプを見てください 当方EXCEL2000で検証しました

maina-
質問者

お礼

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

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.1

じゃ OFFSET関数を使ってみてください INDIRECT関数でもできないことはありませんが、 自力で工夫できないようであれば、他の関数で代用してみましょう OFFSET関数と INDIRECT関数は合わせて覚えておくと良いですよ

maina-
質問者

お礼

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

関連するQ&A