
詳しい方教えてください。
前任者が作った式なのですが、正確に理解出来ず、このまま使い続けて良いものか不安で、、、
お力を貸してください。
セルに下記のような式が入っていました。
'=@index(sheet1!$G$14:$G$82,column()-@cell("col",sheet2!$G$6)+1,row()-@cell("row",sheet2!$G$6)+1)
まずindex関数に「@」がついているところから理解でできず。。。
index関数は文字によって、セルを指定するのですよね、
配列が
(sheet1!$G$14:$G$82
であり、$G$14のセルから
行がcolumn()-@cell("col",sheet2!$G$6)+1
列がrow()-@cell("row",sheet2!$G$6)+1
動いたセルに入っている文字を入力させると言うことでしょうか。
何故「cell」式の前に「@」がついているのでしょうか。
また、column()-@cell("col",sheet2!$G$6)+1
はcolumn()(現在の列番号)から@cell("col",sheet2!$G$6)+1 を引くことだと思うのですが
@cell("col",sheet2!$G$6)+1 の意味が理解出来ません。。。情けない
このように人が作ったファイルで意味がわからない部分で、人に聞けない場合、とりあえず業務を滞らせないよう、使い続けても良いのでしょうか。
聞く相手もいない、自分の理解にも限界がある場合は、式は使いつつも、詳しい方に聞きながら理解していくのが良いでしょうか。(私の場合、詳しい方が社内に以内のですが。。。)
マクロなどは使えないレベルなので、せめて式レベルは理解したいのですが、、、
Excelの式に詳しくなるにはやはり実践でしょうか。今回の質問のようにわからない部分は都度調べていく、その積み重ねで何とか成長できるでしょうか。
式の意味と友に教えて頂ければと思います。
No.4ベストアンサー
- 回答日時:
こんばんは
>前任者が作った式なのですが、正確に理解出来ず~
なんだかもっとずっと古そうな気がしますし、回りくどい指定方法になっているようです。
もしかすると、前任者さんもそのままわからずに使っていただけなのかも知れませんね。
>まずindex関数に「@」がついているところから理解でできず。。。
関数名の前の@は無視しても良いです。
@マークは、MS-DOS時代の表計算ソフト「Lotus 1-2-3」との互換性を保つためのものです。
https://xtech.nikkei.com/dm/article/LECTURE/2013 …
(No2様がご紹介の機能はここ最近のもので、もとからある上記を利用して旧来の関数を明示するものです)
さて、ご提示の式ですが、雰囲気からしてセル範囲に同じ式をフィルコピーできるように作成されているものと推測します。
(実際に値が変化するのは、column()とrow()の部分になります)
>配列が
>(sheet1!$G$14:$G$82
>であり、$G$14のセルから
>行がcolumn()-@cell("col",sheet2!$G$6)+1
>列がrow()-@cell("row",sheet2!$G$6)+1
に関してはお考えの通りです。
式中の「cell("col",sheet2!$G$6)」と「cell("row",sheet2!$G$6)」はセル位置が絶対参照になっているので、フィルコピーしても固定値のままです。(シート名を付す必要もないですね)
前者は$G$6の列番号「7」、後者は行番号「6」の固定値になります。
これで置き換えれば、INDEX関数内の
行の指定は、column()-6
列の指定は、row()-5
と同じ意味ということになります。
ここで何点かの考察ができます。
1)行の指定がcolumn()、列の指定がrow()になっているので、範囲の行列を入れ替えて参照している。
2)引数は0以下にできないので、この式はG6セル以降に設定されている
3)元のセル範囲が$G$14:$G$82で1列だけなので、そもそも列の指定に意味がない。
想像するところ、ご提示の式はG6セルから右方にフィルコピーしてあるものと推測します。
ですので、ご提示の式の代わりにG6セルに
=INDEX(Sheet1!$G$14:$G$82,COLUMN(A1))
を入力して、右方にフィルコピーしても、同じ結果になるものと推測できます。
あくまでも、同じ形式に拘るのであれば、
=INDEX(Sheet1!$G$14:$G$82,COLUMN()-6)
でしょうか。
もしも、スピル機能のある環境をご使で利用あれば、G6セルに
=TRANSPOSE(Sheet1!G$14:$G$82)
を入力するだけで、自動で右方にスピルされます。
回答ありがとうございます。
長い式は理解しにくいので、簡単な式をご紹介頂き大変助かります。
回答に書かれているように、縦方向に記入されている数値を行方向にコピーする、という式のようです。
transpose 関数、使ってみたいと思います。
No.3
- 回答日時:
No.2の回答者です。
式を見ただけで理解できたわけではないですよ。
私もExcelの勉強中なので、式を分解して動作確認しているときに
行列の入れ替えのようだと思っただけです。
そこで、検索したら以下のようなサイトがあったので、回答をする
ときの参考にしただけなので。
https://excel-design-dr.com/excel-row-column-tra …
https://excel-ubara.com/excel3/EXCEL008.html
https://qiita.com/11295/items/93af4296fe2b292f7125
スピル関係も最近知っただけで、そのときにブックマークとして
幾つかのサイトをメモしてあっただけですから。
マクロについても、慌てずに少しずつ勉強していけば、独学でも
簡単なものなら理解できるようになりますよ。
(私も10年ぐらいかけて、やっと最近回答できるようになった)
回答ありがとうございます。
マクロ、独学で勉強なんてすごすぎます。。。
式については、まず分解して動作確認が必要なのですね。
私は自分が理解出来ない式が出てきた時点でパニックになってしまい。。。
度々の回答ありがとうございました。
No.2
- 回答日時:
@は[暗黙的な交差演算子]でスピルさせないためのものです。
https://excel-ubara.com/excel1/EXCEL628.html
https://support.microsoft.com/ja-jp/office/%E6%9 …
INDEX関数での配列をスピルさせないために、Excelが設定して
くれたものですね。
INDEX関数の引数部分ですが、行列入れ替えをしているだけで
難しいことはしていません。TRANSPOSEでの配列数式と同じで
範囲を限定しているだけのようですね。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu …
使われている範囲は、6行目でG列から右方向になっています。
G6セルから開始して、G$14:$G$82の範囲にあるデータを右へと
行列入れ替えをして表示するものです。
{=TRANSPOSE(G$14:$G$82)}と同じ動作をしています。
CELL関数を使って行番号と列番号を取得し、G$14:$G$82での
範囲から、何番目にあるデータなのかを指定しています。
G6から開始させるためのようですが、何故にこれを使っている
のかはわかりません。
古いExcelのバージョンで使う意味があったのかな?
回答ありがとうございます。
まさしく、縦に入力されていたデータ(例えばA1:A3)を行に入力(B1:D1)する式でした。
何故それが理解出来たのでしょうか。。。私の能力では理解出来ませんでした。
スピルについて、初めて知りました。大変勉強になりました。
No.1
- 回答日時:
このExcel式はsheet1上の$G$14から$G$82にある配列から、sheet2上の$G$6からの相对的な列数と行数に基づいて値を返すものです。
具体的には、column()関数で現在の列番号を取得し、そこから@cell("col",sheet2!$G$6)でsheet2上の$G$6のセルの列番号を取得し、その両者の差を計算することで、相对的な列番号を求めます。同様に、row()関数で現在の行番号を取得し、そこから@cell("row",sheet2!$G$6)でsheet2上の$G$6のセルの行番号を取得し、その両者の差を計算することで、相对的な行番号を求めます。最後に、これらの行番号と列番号を使ってindex()関数で値を取得することで、結果を返します。
「@」は、Volatile関数と呼ばれるもので、このような関数を使っていると、変更されたいかなるセルの値にも影響を受けるということを意味します。つまり、この式が含まれているセルの値が常に更新されているということです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelでこの式の意味をおしえていただけますでしょうか、またどのように理解したらいいのでしょうか 3 2022/11/18 00:11
- Excel(エクセル) Excelでなぜこのような式をつかっているのでしょうか、行に1,2,3と連番を振るだけなのに 5 2023/04/08 20:00
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Excel(エクセル) A、B、C・・・AA、ABと連番でふりたい、調べても式の意味がわからずパニックになってしまう 1 2023/01/23 19:17
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- Excel(エクセル) Excelマクロ(VBA)CELL形式とA1形式の使い分け 6 2022/08/27 23:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのVBAで集計をしたい
-
【マクロ】元データと同じお客...
-
【画像あり】オートフィルター...
-
【マクロ】数式を入力したい。...
-
Office2021のエクセルで米国株...
-
【マクロ】【相談】Excelブック...
-
vba テキストボックスとリフト...
-
【マクロ】実行時エラー '424':...
-
【マクロ】【配列】3つのシー...
-
他のシートの検索
-
【マクロ】オートフィルターの...
-
【マクロ】列を折りたたみ非表...
-
【関数】同じ関数なのに、エラ...
-
ページが変なふうに切れる
-
エクセルのリストについて
-
【マクロ】左のブックと右のブ...
-
【条件付き書式】シートの中で...
-
エクセルの関数について
-
エクセル ドロップダウンリスト...
-
9月17日でサービス終了らし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル
-
【マクロ】WEBシステムから保存...
-
エクセルの循環参照、?
-
エクセル ドロップダウンリスト...
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】A列にある、日付(本...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【エクセル】期限アラートについて
-
iPhoneのExcelアプリで、別のシ...
-
【関数】同じ関数なのに、エラ...
-
Excelの新しい空白のブックを開...
-
【マクロ】3行に上から下に並...
-
【マクロ】宣言は、何のために...
-
VBA チェックボックスをオーバ...
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
【関数】不規則な文章から●●-●●...
おすすめ情報