• ベストアンサー

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/17069)
回答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