- 締切済み
エクセルのセル参照
エクセルで隣にくるセルを参照したいのですが、どうすればよろしいでしょうか。 F列に計算式を入れるのですが、C、D、E列を非表示にした場合、B列の値を取ってくる。というような感じです。 それが、D,E列を非表示にした場合はC列の値を取ってくるみたいな感じで、自動的に隣のセルとして認識してくれる関数みたいなのはありますか。
- みんなの回答 (11)
- 専門家の回答
みんなの回答
- Nouble
- ベストアンサー率18% (330/1783)
追記、 どうも、ご質問に 仕様変更が、あるみたいですね。 でも、其れでも 先ずは、其の 非表示セル、非参照が 機能するか、お試し頂き、 結果を、補足頂ければ 幸いです。 宜しく お願い、致します。 後記、 列非表示では、なく 値非表示で、良ければ いとも容易い、所なのですが…
- Nouble
- ベストアンサー率18% (330/1783)
お待たせしました。 此方を https://1drv.ms/x/s!AjviygfJDgV_1ga8yXUAWrhV4l5P 「すぐ上の行を、参照」 此れは、 いとも簡単に、できるのですが ご要望の、此れは 手元では、出来ているか 確認が、取れませんでした。 ですので、お試し頂ければ と、思います。 (※注:ONLINEで使わず、ダウンロードしてくださいね) ところで、 仕様のメインを、なす 関数 SUBTOTAL ですが、 一応、 マイクロソフト公式見解と、しての 関数仕様上は、 此の様に https://support.office.com/ja-jp/article/subtotal-%E9%96%A2%E6%95%B0-7b027003-f060-4ade-9040-e478765b9939 出来る仕様記載、記載なのですが、 慣習なのか、バグなのか、隠れ仕様なのか、… 列の、非表示検知は 私の手元、 詰まり MACExcel2011では 機能しませんでした。 お手元の、Excelが どのタイプか、解らなかったので、 出来る、出来ないに、付いて 此方では、 何とも言えない所が、ありました、 故に、 此方での判断は、早計、 お手を、煩わすしか無い、 胸を、お借りしよう、 と、思いました。 因みに、此方は 関数使用法の、手ほどきです。 https://www.excelspeedup.com/subtotal/
- SI299792
- ベストアンサー率47% (772/1616)
上下左右が必要かどうかわからないのですが、せっかく作ったので載せます。 これは、検索対象を「値」を指定すると、非表示が対象外になることを利用しています。 ' Option Explicit ' Function HiddenNext(ByVal Com As String) As Variant ' Dim SearchArea As Range Dim SearchDirection As Integer ' application.Volatile Com = Left(Com, 1) ' If Com = "L" Or Com = "R" Then Set SearchArea = Rows(application.Caller.Row) ElseIf Com = "U" Or Com = "D" Then Set SearchArea = Columns(application.Caller.Column) Else HiddenNext = CVErr(xlErrValue) End If ' SearchDirection = xlNext - (Com = "L" Or Com = "U") HiddenNext = SearchArea.Find("*", application.Caller, xlValues, , _ SearchDirection) End Function この関数の使い方は、 F1に=HiddenNext("Left") と入れれば、C,D,E が非表示なら、B1が表示されます。 左を表示したい場合は、Left 右を表示したい場合は、Right 上を表示したい場合は、Up 下を表示したい場合は、Down を指定します。 1文字目で判断しているので、L,R,U,D でも構いません。必ず大文字にしてください。 F1に=HiddenNext("Left") を指定して、A~Eを非表示にしたら、右端(XFD1)を表示します。 非表示にした後、再計算が必要です。
- imogasi
- ベストアンサー率27% (4737/17069)
そもそもエクセルの関数は、見た目(表示/示などや列幅など)を読み取ったり左右できないという大方針を判ってない質問が多い。 例外はCell関数。LOTUS123との互換のため入れられたか?と思う。 本件もエクセル通常の関数の領域外の問題ではないかと思う。 ーー 以下VBAでユーザー関数を考えた。 標準モジュールに下記を貼り付ける。 Function hihyoujic(x) Application.Volatile For c = x.Column - 1 To 1 Step -1 MsgBox c If Cells(1, c).EntireColumn.Hidden = False Then hihyoujic = Cells(1, c) Exit Function End If Next c End Function シートのセルに(F1などが適当か) =hihyoujic(F1) といれる。 Xには同行の式を 例データ A1:F1 1 7 3 4 5 としてC-E列を非表示にする。 関数を入れたセルF1に7とでる。 値を変えたり非表示のセルを変えたりしてやってみてください。 コードを変えれば列数(上記はセル(B1))の値を採っているが)なども取得できる。それを通常関数の引数としてでも使える。
- msMike
- ベストアンサー率20% (364/1804)
》 C、D、E列を非表示にした場合、B列の値を取ってくる。 残っているのはB列のみだからですね? 》 D列を非表示にした時はB-C、 C、E も隣り合っているように見えますが、此れは無視? 》 B列を非表示にしたらD-C D、E も隣り合っているけど、此れは無視?なぜ? では、 C列を非表示にしたら、どうするの?D-E?E-D? E列を非表示にしたら、どうするの?D-C?C-D? ソコントコの毅然とした規則をお願いします。
- mt2015
- ベストアンサー率49% (258/524)
こんな感じで出来ないことは無いのですが、[F9]キーを押して再計算をさせないと反映できないという制限があります。 添付の図を見てください。 A1:E1までがデータで、F1に左隣の表示セルの値を表示するものとします。 A5:E5を作業行として使用します。 A5に↓の式を入れ、A5:E5にコピーします。 =(CELL("width",A5)>0)*COLUMN() F1には↓の式を入れます。 =OFFSET(F1,0,MAX(A5:E5)-COLUMN()) で、C:E列を非表示にした後[F9]キーを押すとB列の値を表示します。 CELL("width",A5)でセル幅が取得できるので、これが0の場合は非表示と判断しています。
- SI299792
- ベストアンサー率47% (772/1616)
Cellが非表示かどうかを直接知る方法はありません。 Cellの幅を知る方法ならります。縦方向に非表示にすれば、幅が0になるので、それを使えば可能です。 =IF(CELL("width",E1),E1,IF(CELL("width",D1),D1,IF(CELL("width",C1),C1,B1))) この方法は、左側オンリーです。また、3つまでで、Bまで非表示にした場合には対応していません。後ろにifを追加すれば、B非表示にも対応できますが、関数がやたら長くなります。 非表示ににしただけでは、再計算がされないので、値は変わりません。他のセルの値を変えるか再計算をする必要があります。 セルの高さを表す関数は見つかりませんでした。この方法では、上下の非表示に対しては不可能です。 いくつでも表示できる、上下左右にできる、万能な物が欲しいなら、マクロを使って、自分で関数を作るしかありません。作ったものはあるので、補足に書いていただければ載せます。
# 列を非表示にした時はB-C、B列を非表示にしたらD-Cのようにその時隣り合う それであれば いや、非表示にしたら計算しない・・・ってのはできません。 しかも、表示セルを都度変える関数・・・無いです。
Nouble さんに期待しましょう。 私は 計算結果で答えの出るセルを作って、F の他に G H と用意します。 ユーザー関数のほうが良いのでは? 自分で関数を書き、表示モジュールの中に書いて、B,C,D,Eって4つの式があるでしょ?条件によって答えが・・・・ VB なら参照するセルを与えて・・・
- Nouble
- ベストアンサー率18% (330/1783)
表示、非表示の、 如何に、伴って、 挙動を、変える 関数は、あります。 ですので、 出来るかも、知れません。 確かに、 失敗する、可能性も あるのですが、 もし、良ければ 閉めずに、おいて 頂けますか? 出来なかった時も、 其の旨だけは、申告しますね。
- 1
- 2
補足
すいません、補足が間違っていました。 》 D列を非表示にした時はB-C → E-C 》 B列を非表示にしたらD-C → E-D です。 やりたかったのは、F列で左隣に来るセルと、そのもう1つ左側にくるセルの差を出したい。それだけです。 失礼しました。