[[20180914105812]] 『セルの数字部分を可変に』(きのこの山派です。) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セルの数字部分を可変に』(きのこの山派です。)

 Excelの達人の皆様、おはようございます!
 またまた質問させて頂きたく書き込みしています。

 早速なんですが、

 AJ23のセルが=AJ14を参照し、AJ14のAJは動かない前提です。

 上記を踏まえ、例えば、、、、

 AJ45セルに15と入力すると
 AJ23セルの=AJ14が
 AJ23セルの=AJ15になったり、、、

 AJ45セルに20と入力すると
 AJ23セルの=AJ14が
 AJ23セルの=AJ20になったり、、、

 というのは関数では難しいでしょうか?
 一応自分なりに考えて
 AJ23セルに=AJ(AJ45)というのを打ち込んだんですが、
 「#NAME?」となってしまいます

 これは実現不可能でしょうか?

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 INDIRECT関数を使うとセル番地を表す文字列を実際のセル参照に変換できる。
 =INDIRECT("AJ"&AJ45)
 また、おこないたいことをAJ列のAJ45セルの内容行を求めると考えると
 =INDEX(AJ:AJ,AJ45)
 ともできる。
(ねむねむ) 2018/09/14(金) 11:22

 関数でのやり方はわかりません、、
 出来るんでしょうか、、

 VBAで関数を作れば可能です。

 標準モジュールに

  Function AJ()
      AJ = Cells(Range("AJ45"), "AJ").Value
  End Function

 を貼り付けて、AJ23 に =AJ() と入力すれば出来ます。

 ちなみにたけのこの方が好きです。

(TAKA) 2018/09/14(金) 11:24


数式のやり方はねむねむさんが回答されているとおり。

勉強のためユーザー定義関数を作って使ってみたいということであれば、
TAKAさんのコードを

  Function AJ(行番号 As Range)
      AJ = Cells(行番号.Value, "AJ").Value
  End Function

に修正ですかね?
(もこな2) 2018/09/14(金) 12:33


肝心なことを書き忘れ

 =AJ(AJ45)というのを打ち込んだんですが、「#NAME?」となってしまいます

これは、「AJ」という関数に「AJ45」のセル(または、その値など)を引数として与えなさい という意味になるので
Excel君が そんな関数しらない!=「#NAME?」 って返しています。

なので、AJという関数を”作って”あげればその数式でも動くでしょうけど、そのブックに属するモジュールに記述した場合、ユーザー定義関数はマクロ似たようなものなので、マクロが保存できる形式じゃないとブックが保存できなくなりますし、マクロを有効にした状態じゃないと動かない
(と思います。手間だったのでテストせず。)

また、他の人が見てもなんか知らない関数つかってあって、さらにネット検索しても答えが見つからない関数ということになります。
(いきなり、知らない関数を見てユーザー定義関数であることを看破する人は稀だとおもう・・・)

ですので、誰かとそれを共有するつもりなら(または、誰かに引き継ぐ可能性があるなら)ユーザー定義関数を作って解決というアプローチは避けたほうが無難におもいます。

(もこな2) 2018/09/14(金) 12:47


INDIRECT、OFFSETで実現できます。
セルと範囲を指定するもので、

INDIRECTは、表示した文字列をセルあるいは範囲に変換するものです。
例えば:
C1セルに+INDIRECT("A"&1) を入れると、C1セルにA1セルの値が返されます。
また、+SUM(INDIRECT("A1:B5"))を入れると、C1にA1〜B5範囲の合計値が返されます。

OFFSETも似たようなものです。
(d) 2018/09/19(水) 18:11


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.