• ベストアンサー

EXCELのセルの参照(関数)について

よろしくお願いします。 セル(A1)~(AZ)の範囲における(AZ),(AV),(AR),(AN),(AJ),(AF),(AB),(X),(T),(P),(L),(H),(D)の各セルに文字列が入っている (または入っていない)場合で(BA)に「もし(AZ)が入力されていたら(AZ)の値を表示、もし(AZ)がブランクなら(AV)の値を表示、もし(AV)がブランクなら(AR)の値を表示、もし(AR)がブランクなら(AN)の値を表示・・・・」といった具合で関数を作成したいです。また(AZ),(AV),(AR),(AN),(AJ),(AF),(AB),(X),(T),(P),(L),(H),(D)のセルで穴あき状態で入力されていた場合は最も(AZ)寄りのセルを表示させたいです。 EXCEL2003で作成するいい方法はありますでしょうか?

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

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

これは、指定されたセル以外にも値は入っているけど、それらは無視して(AZ),(AV),(AR),(AN),(AJ),(AF),(AB),(X),(T),(P),(L),(H),(D)の中で、一番右に文字が入っているセルの値を取得したい、ということでよいでしょうか。 関数でやると複雑になりそうなので、ユーザ定義関数を作ってみました。 ・Alt+F11でVBAの画面を開き、「挿入」>「標準モジュール」を選択します。 ・右の画面に以下のマクロをコピーして貼り付けます。 Function GetVal(ParamArray Args()) As String  Dim i As Integer  For i = LBound(Args) To UBound(Args)   If Args(i) <> "" Then    GetVal = Args(i)    Exit Function   End If  Next End Function ・VBAの画面を閉じます。 ・指定したセルの中で一番右に値が入っているセルを表示させたいセルに、以下の数式を入力します。 =GetVal(AZ1,AV1,AR1,AN1,AJ1,AF1,AB1,X1,T1,P1,L1,H1,D1) これで一番右に値が入っているセルの値が表示されます。 この関数は、上記のように値を調べたいセルをかっこの中に並べて使います。GetVal()の中で指定されたセルを左から見ていって、一番最初に現れた空でないセルを表示しているので、今回のように一番右のセルを取り出したいときは、右側のセルから順番に指定してください。

ankoromo
質問者

お礼

素晴らしい回答ありがとうございました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

配列関数などでは(列指定が範囲の全列でないので)使えません。 そこでVBAを使わざるを得ない。 #1のご回答とアイデアは同じですが、下記は 関数の中に列を定義しました。 Function aaa(j) s = Array("AZ", "AV", "AR", "AN", "AJ", "AF", "AB", "X", _ "T", "P", "L", "H", "D") For i = 1 To UBound(s) If Cells(j, s(i)) <> "" Then aaa = Cells(j, s(i)) Exit Function End If Next i End Function としてみました。 第2行目について問題にする場合は =aaa(2) 第3行目について問題にする場合は =aaa(3) とします。 質問向けのテストデータがうまく作れないので、テスト不十分ですがよろしく。

ankoromo
質問者

お礼

素晴らしい回答ありがとうございました。

関連するQ&A

  • ダブルクリックイベントの質問です。2010

    特定のセルをダブルクリックすると 現在時刻を 表示するコードがあります。 特定の セル以上で その機能が 無効になります。 原因は なんでしょうか?以下 そのコードです。 Private Sub worksheet_beforedoubleclick(ByVal Target As Excel.Range, cancel As Boolean) If Not Application.Intersect(Target, Range("d8:d9,h8:h9,l8:l9,l8:l9,p8:p9,r8:r9,t8:t9,x8:x9,ab8:ab9,af8:af9,aj8:aj9,an8:an9,ar8:ar9,av8:av9,d57:d58,h57:h58,l57:l58,p57:p58,r57:r58,t57:t58,x57:x58,ab57:ab58,af57:af58,aj57:aj58,an57:an58,ar57:ar58,av57:av58,d106:d107,h106:h107,l106:l107,p106:p107")) Is Nothing Then If Target = "" Then Target = Time cancel = True End If End If End Sub 以上です。 ちなみに ,106:l107,p106:p107のあとに ,T106:T107 を 追加 しますと  実行時エラー1004 Range メソッドは失敗しました。Worksheet オブジェクト と 表示され エラー と 表示されました。 よろしくお願いします

  • エクセルVBAで結合セルなどの色が一部消えません

    色を付けてある結合セルセルが一部消えません。下のはマクロ記録してそのまま使っているものですが、なぜ消えないのか分かりません。 ちょっとたくさんありすぎてゴチャゴチャしていて恐縮ですが、消えない部分は。 AM42:AO43,AR42:AX43,BD42:BJ43,F45:T46,V45:AJ46の部分です。 使用上のクセとかなんかあるんでしょうか? Union(Range( _ "F57:T58,V57:AJ58,AM57:AO58,AR57:AX58,BD57:BJ58,F60:T61,V60:AJ61,AM60:AO61,AR60:AX61,BD60:BJ61,AV7:BC8,AU9:BC10,D16:AC17,G18:H19,O22:P23,W24:AE25,R32:AV34,F42:T43,V42:AJ43,AM42:AO43,AR42:AX43,BD42:BJ43,F45:T46,V45:AJ46,AM45:AO46,AR45:AX46,BD45:BJ46,F48:T49" _ ), Range( _ "F51:T52,V51:AJ52,AM51:AO52,AR51:AX52,BD51:BJ52,F54:T55,V54:AJ55,AM54:AO55,AR54:AX55,BD54:BJ55" _ )).Select Range("BD60").Activate Union(Range( _ "F57:T58,V57:AJ58,AM57:AO58,AR57:AX58,BD57:BJ58,F60:T61,V60:AJ61,AM60:AO61,AR60:AX61,BD60:BJ61,G65:T66,AM65:AO66,BD65:BJ66,G69:T70,AM69:AO70,BD69:BJ70,BB76:BJ78,AI80:AM81,AV7:BC8,AU9:BC10,D16:AC17,G18:H19,O22:P23,W24:AE25,R32:AV34,F42:T43,V42:AJ43" _ ), Range( _ "AM45:AO46,AR45:AX46,BD45:BJ46,F48:T49,V48:AJ49,AM48:AO49,AR48:AX49,BD48:BJ49,F51:T52,V51:AJ52,AM51:AO52,AR51:AX52,BD51:BJ52,F54:T55,V54:AJ55,AM54:AO55,AR54:AX55,BD54:BJ55" _ )).Select Range("AI80").Activate Selection.Interior.ColorIndex = xlNone

  • Excelの関数について

    質問についてうまく表現が出来ないのでセル番地等を記します。 I1とJ1を結合して2005/12(文字列で入力) K1とL1を結合して2005/11(同じ) M1とN1を結合して2005/10(同じ)           ・           ・ AE1とAF1........2005/01 まで I2,K2,L2,N2・以降1個とび・・・AE2に個数という項目名 J2,L2,N2,P2・以降1個とび・・・AF2に単価という項目名 I3~AF3までに数値が入ります。 I3~AF3までの範囲の最新の単価を表示させる為の関数はどうしたらよいのでしょうか? 個数と単価は空白のセルも出てきます。 考え方的にはI3~AF3の範囲で0又は空白セル以外の項目のうち一番左側のセルの値を表示させるようにすれば良いのですが、関数がわかりません。 よろしくお願いいたします。

  • Excelで飛び飛びのセル(列)を参照したいのですが…その2

     ある「sheet1」で、G1="A",H1="B",I1="C",J1="D",K1="E",L1="F",M1="G",N1="H",O1="I",P1="J",Q1="K",・・というように文字が入力されているとすると、5列飛びの値A,F,K・・・(G1,L1,Q1・・・)が欲しいのです。そして、その値が「sheet2」に、C5=A,D5=F,E5=K,F5=P・・・となるようにしたいのです。ただ数値が5ずつ増加するのではなく、そのセルに入力されている文字列を参照したいのです。  それをまた、「sheet1」の、G2="A",H2="B",I2="C",J2="D"・・・の値でも同じ事をしたいのですが・・・。  よろしくお願いします。

  • EXCELのIF関数の入れ子について

    すみませんよろしくお願いします。 EXCELでセル(A1)~(L1)までに不特定の文字列が入力されており、(M1)に「もし(L1)が入力されていたら(L1)の値を表示、もし(L1)がブランクなら(K1)の値を表示、もし(K1)がブランクなら(J1)の値を表示、もし(J1)がブランクなら(I1)の値を表示・・・・」といった具合で関数を作成したいのです。また、(A1)~(L1)のセルで穴あき状態で入力されていた場合は最も(L1)寄りのセルを表示させたいです。 EXCEL2003のIF関数だと、 =IF(L2="",IF(K2="",IF(J2="",IF(I2="",IF(H2="",IF(G2="",IF(F2="",IF(E2="","",E2),F2),G2),H2),I2),J2),K2),L2) で最後の(A1)までの入れ子を作ることができせん。 EXCEL2007を使用すると、 =IF(L2="",IF(K2="",IF(J2="",IF(I2="",IF(H2="",IF(G2="",IF(F2="",IF(E2="",IF(D2="",IF(C2="",IF(B2="",IF(A2="","",A2),B2),C2),D2),E2),F2),G2),H2),I2),J2),K2),L2) と作成できます。 EXCEL2003で作成するいい方法はありますでしょうか? ご指南の程よろしくお願いします。

  • Excelでセルのデータの参照について

    Excelでsheet2の2ヵ所のセルの値を、 sheet1の1つのセルに合計の値として表示させるには どうすればいいのでしょうか? 例えば、 sheet2のE20とT17の値を sheet1のC10に合計して表示させるにはどうすればいいのでしょうか? ='sheet2'! まではわかるのですがいろいろ試してみたり、 諸本を調べたりしたのですがわかりません。 おわかりの方よろしくお願いします。

  • 関数を教えて下さい

    AJ8(AN8からAN10セル結合)の数が5より大きいときは、AN9の数をCF6に持っていき、小さいときは、表示しない。  AJ・・・・・AN・・・・CF 6              答え 7 8 1 9        850 10 Excel初心者です。宜しくお願い致します

  • 【エクセル2003】単純なはずの2つのセルの比較の関数なのですが

    とても単純なはずの2つのセルの比較なのですが、ゼロとブランクの扱いで厄介なことになっています。 ・両セルが空白→「空白」 ・両セルの値が同じ→「OK」 ・両セルの値が異なる→「NG」 と表示させたいです。 ISBLANKとIF文の入れ子の関数で解決すると思ったのですが、IF文で真偽を問うと、片方のセルがゼロ、片方がブランクの場合も真となってしまいます。 ブランクとゼロの扱いが妙にあいまいなのは、エクセルの仕様と聞いたことはあるのですが、関数で何とかなりませんでしょうか。 (作るブックの仕様を変えるのが一番なのでしょうが、私が作ったブックではないので、ちょっとそれはできない状態です)

  • IF関数、上セルが0だったら左の値を、上セルがブランクだったらブランクに。

    こんにちは。よろしくお願いします。 エクセル2000で作業しています。セルJ36に下記の数式が入れてあります。 =IF(I35=0,H36,SUM($F$35:I35) 上のセルが0だった場合は、左のセルの値を表示するようにしたつもりですが、 上のセルがブランクだった場合も、左のセルの値を表示します。 上のセルが0だった場合の仮定はそのままで、さらに、上のセルがブランクだった場合には、本セルもブランクにするにはどうすればよいのでしょうか?

  • エクセルVBA セルの値で、複数の列範囲を同時に

    セルの値を利用して複数の列範囲を選択したいです セルA1に 3 と入力されていて、AA列がアクティブの場合 Range("AD:AF,AJ:AL").Select の様に、アクティブ列から3列空けて、3列選択、3列空けて、3列選択の様にしたいです AA、アクティブ AB AC AD、選択 AE、選択 AF、選択 AG AH AI AJ、選択 AK、選択 AL、選択 AM

専門家に質問してみよう