[[20140601094735]] 『エクセル 範囲行のなかで右端のデータ位置の見出』(チクリン) ページの最後に飛ぶ

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

 

『エクセル 範囲行のなかで右端のデータ位置の見出しを返す方法。』(チクリン)

3行目に表の項目見出しがありま。以下4行目からデータが入力されます。

   A  B  C  D  E  F  G
3  あ  い  う  え  お  か  き
4 1234 abcd
5 1234 abcd 6666 cccc
6 1234 abcd 1111 aaaa
7 5555 abab

6行目に次の式を書きます。
=IF(COUNTIF(A3:G6,"*"),INDEX(A3:G3,MATCH("",A6:G6,-1)),"")
結果は、"え"となります。
しかし、得たい値は一つ手前の"う"の時はどうするとよいでしょうか。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 何をなさりたいのか分かっていませんが、
 MATCH関数の戻り値から1を引くということ?

 =IF(COUNTIF(A3:F6,"*"),INDEX(A3:F3,MATCH("",A6:F6,-1)-1),"")

 勘違いならごめんなさい。
(mas_k) 2014/06/01(日) 11:50

      A     B     C     D     E     F     G    H
 1
 2
 3    あ    い    う    え    お    か    き
 4   1234  abcd                               あ
 5   1234  abcd  6666  cccc                   う
 6   1234  abcd        aaaa                   い
 7   5555  abcd                               あ

 こんなデータがあるとして結果がH列の通りで良いなら、H4セルへ
 =INDEX(A$3:G$3,,COUNTA(A4:G4)-1)
 下へコピーしてください。A列にしかデータがない場合エラーを返します。 
(Jera) 2014/06/01(日) 11:52

mas_kさん説明べたで申しわけありません、それにもかかわらず
教えていただきありがとうございます。

Jeraさん 入力ミスの空白がある場合も対応していただきありがとうございます。

mas_kさん Jeraさん 早速試してみます。
(チクリン) 2014/06/01(日) 12:02


 例題を見ると「右端の数値データ」の見出しを求めたいとも取れますが
 そういうことでしたら

 H4 =IF(COUNT(A4:G4),LOOKUP(10^16,A4:G4,$A$3:$G$3),"")
 または
 H4 =IFERROR(LOOKUP(10^16,A4:G4,$A$3:$G$3),"")
  
(ウルトラマリン) 2014/06/01(日) 13:27

mas_kさん期待していることをかえしくれます。
しかし、検査行範囲がすべて空白のとき、#N/A が返ってきます。これを空白にするには、
IFやANDを使えばよいのでしょうか。

=IF(COUNTIF(A3:F6,"*"),INDEX(A3:F3,MATCH("",A6:F6,-1)-1),"")
これを使うと、検査領域の全てが空白な場合、 #N/A となりエラーになります。
これを空白で返せることはできるでしょか。

ウルトラマリンさんの、
H4 =IFERROR(LOOKUP(10^16,A4:G4,$A$3:$G$3),"")
を使うと、検査領域の全てが空白のとき、空白を返してくれます。
mas_kさんのは、下のように
データが不完全なとき一つ下位のデータを参照してくれて便利です。

      A     B     C     D     E     F     G    H
 3    あ    い    う    え    お    か    き

 5   1234  abcd  6666                         い

いろいろな方法を教えていただき感謝します。

(チクリン) 2014/06/01(日) 13:46


 私は、チクリン さんの式のMATCH部分だけいじっただけですので、
 未だに何をなさりたいのか良く分かっていません。

 #N/Aを表示させないなら、

 ==IFERROR(さっきの式,"") でいいのかと。

 もしかして、
 数値データと隣の文字データでワンセット、数値データの上の見出しがほしい?

 最後の例で「い」にならないような。
(mas_k) 2014/06/01(日) 14:22

 数値データかどうかは関係なさそうですね。

 ところで行ごとに見出しを求めたいということではないのですか?
 そうではないのなら、何をしたいのかもう少し説明された方がいいと思います。

 行ごとの見出しで、入力ミスも含めて途中に空白はなく(左端から詰めて入力している)
 ということでしたら、Jeraさんの式をお借りして

 H4 =IF(COUNTA(A4:G4)>1,INDEX($A$3:$G$3,COUNTA(A4:G4)-1),"")
 または
 H4 =IFERROR(INDEX($A$3:$G$3,COUNTA(A4:G4)-1),"")
 
(ウルトラマリン) 2014/06/01(日) 14:27

いろいろと指摘していただきありがとうございます。

やりたいことを具体的に書いてみます。

  セルA    セルB    セルC    セルD  セルEセル  FセルG
1 資格試験3級 認定番号  資格試験2級  認定番 資格試験1級 認定番号
2 2000/5/1  g000101   2009/5/1   h000220

各個人が横1行にデータレコードが入っています。
最上級の資格である。2級を表示したいです。
データテーブルのタイトル行には、3級 認定番号 2級 認定番号 1級 認定番号 としています。

上級試験が右側に記述され、受験年月日と認定番号は2つのセルにそれぞれ記入され、セル2つで一組になります。
出力したいのは、今持っている最上級の資格名です。
どうも、説明はあやふやで教えていただいている方に混乱をかけてしまったようです。

そして、この出力データは同じレコード行に書きだしたいのです。

(チクリン) 2014/06/01(日) 14:56


 日付は通常の日付データ(シリアル値)
 認定番号は文字列
 ということでしょうか?

 でしたら「右端の数値データ」の見出しを求めたいということになると思うんですが
 提示したLOOKUPの式を試した結果はどうなったんでしょうか?

	A	B	C	D	E	F	G
1	3級	番号	2級	番号	1級	番号	
2	2000/5/1	g000101	2009/5/1	h000220			2級
3							
4	2002/5/1	g000123			2012/5/1	J000303	1級
5			2010/5/1	h000505			2級
 
 
 G2 =IF(COUNT(A2:F2),LOOKUP(10^16,A2:F2,$A$1:$F$1),"")
 または
 G2 =IFERROR(LOOKUP(10^16,A2:F2,$A$1:$F$1),"")

 下にコピー

 必ず左から詰めて入力し(上の表の4行目、5行目のようなことはない)
 日付や認定番号は数式の結果ではない、ということでしたら
 既出のINDEXとCOUNTAでもできると思います。
 
 回答の数式を試した上でのことでしたら、
 どんな数式を入れて、どうなってしまうからダメなのかを
 こちらにわかるように説明してください。
 
(ウルトラマリン) 2014/06/01(日) 17:19

日付はシリアル値です、資格番号は文字列です。
以下の式で、問題なく計算されているようです。

=IF(COUNT(A2:F2),LOOKUP(10^16,A2:F2,$A$1:$F$1),"")

ほかの式でも、計算されますがまだ資格試験を受けてなく、空白になるとエラーになるものがありました。

必ず左から詰めて入力し(上の表の4行目、5行目のようなことはない) ハイ、下から一級づつ積み重ねて昇進していくので、途中が空白であることはないです。
また、検定に不合格の場合は、ここには記録しないです。

いろいろ小生のわからないことに、丁寧にお付き合いいただきありがとうございます。

ところで、一つ解らないのが、LOOKUP(10^16,A4:G4,$A$3:$G$3)の、べき乗である^が使われている10^16は何をするのでしょうか。
(チクリン) 2014/06/01(日) 20:26


 > べき乗である^が使われている10^16は何をするのでしょうか。

 LOOKUP の検査値を範囲内のどの数値よりも大きなものにしておくと
 最後の数値を返してくれます。

 Excelの有効桁数は15桁までですから、10^16 にしておけば
 どんな数値が来ても対応できますよということです。

 =LOOKUP(10^16,A4:F4) 
 A4〜F4の最後の数値(日付)を返します。

 =LOOKUP(10^16,A4:F4,A3:F3)
 最後の数値(日付)がC4だとすれば、それに対応するC3の値を返します。
 
 
 ポイントは最大値よりも大きな数値にすること、です。
 別に 10^16 でなくてもかまいません。

 絶対に10までの数値しか入力しないという決まりなら
 LOOKUPの検査値は「11以上」でいいことになります(10ではダメです)

 対象が日付なら、Excelで扱える日付の最大値 9999/12/31 までを考慮したとしても
 10^7 で事足ります(9999/12/31 のシリアル値は7桁の数値なので)。
 ※10^7 を 10000000 としても同じことです。
 
(ウルトラマリン) 2014/06/02(月) 02:10

なるほど想定している数値より大きい数を指定するためなのですね。
日付を扱うので、日付で対応しなくてはと考えてしまっていました。
シリアル値であるので、数値で良いわけですね。

ものの考え方、真正面から取り組むだけでなく、いろいろな方向からも考えていかないといけないのですね。

アルゴリズムというか、柔軟に考えて対応していければともいまいした。

丁寧に多していただきありがとうございます。
(チクリン) 2014/06/02(月) 09:18


コメント返信:

[ 一覧(最新更新順) ]


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