- ベストアンサー
Excel(2000)で行毎にセルをみて、値を返す
例えば、以下のようなデータがあったとして、各行毎に左から見た結果、最初にデータがあったセルの列の1行のセルの値を各行のG列に返したい。 ______A__B__C__D__E__F__G__ 1行_ア__イ__ウ__エ__オ__カ____ 2行_1__3__5__2__4__1__ア__ 3行_____2__5__1__5__4__イ__ 4行_____________2__8__2__エ__ 5行_____2______2__1__4__イ__ 6行_________5______2______ウ__ G列に結果。 例えば、G3のセルに何らかの関数を入れて、A3~F3を左から見た結果、B3に2というデータがあるので、その列の1行であるB1の値、イをG3に返すといったないようです。 _ は、スペースをとるためのものです。 実際のデータは500行あり、各行の検索する列数は23列あります。 よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
A1:W1に表示する項目、A2:W501にデータ、X列に表示として X2=INDEX($A$1:$W$1,1,SUMPRODUCT(MIN((($A2:$W2="")*100+1)*COLUMN($A$1:$W$1)))) すべて未入力の行があると#REF!のエラーになります。回避するなら X2=IF(COUNTA($A2:$W2),INDEX($A$1:$W$1,1,SUMPRODUCT(MIN((($A2:$W2="")*100+1)*COLUMN($A$1:$W$1)))),"")
その他の回答 (3)
- EL-SUR
- ベストアンサー率76% (83/108)
No.3ですが、ちょっと訂正(>_<) どちらの式も INDEXのあとの A$1:$W1 を A$1:W$1に変更($の位置)してください。 お願いします。 最初の式 =INDEX(A$1:W$1,,MATCH(TRUE,A2:W2<>"",0)) 2番目の式 =IF(COUNTA(A2:W2),INDEX(A$1:W$1,,MATCH(TRUE,A2:W2<>"",0)),"")
お礼
EL-SURさん。 丁寧なご回答ありがとうございました。
- EL-SUR
- ベストアンサー率76% (83/108)
関数を使った別案です。 こんなの p(..) データ:A列からW列 X2: =INDEX(A$1:$W1,,MATCH(TRUE,A2:W2<>"",0)) CtrlキーとShiftキーを押しながらEnterで確定 数式の前後に { }がついて配列数式になります。 { }がつかないときは、数式バーにカーソルを置いた状態で Ctrl+Shift+Enter してみてください。 あとはオートフィルで下にコピーするだけ。 データ未入力の場合のエラー処理も入れておくと、 =IF(COUNTA(A2:W2),INDEX(A$1:$W1,,MATCH(TRUE,A2:W2<>"",0)),"") 同じように Ctrl+Shift+Enter で確定。
- I_X
- ベストアンサー率40% (4/10)
マクロで、以下のようなもの作れば、出来ますよ。 ★印はご自身で変えてください。 Dim IntGYO As Integer '行カウンタ Dim IntRET As Integer '列カウンタ Dim A As Characters '検索する文字 Start_GYO = 2 '行カウントスタート値 End_GYO = 500 '行カウントエンド値 Start_RET = 1 '列カウントスタート値 End_RET = 6 '列カウントエンド値 ★ここは変更が必要 Input_clm = "G" '文字をコピーする先 ★ここは変更が必要 For IntGYO = Start_GYO To End_GYO '行のループ For IntRET = Start_RET To End_RET '列のループ If (Cells(IntGYO, IntRET) <> "") Then 'その行、列が空白で無いなら Cells(1, IntRET).Copy Cells(IntGYO, Input_clm) '文字列をコピーする Exit For 'ループを抜ける End If Next Next
お礼
I_Xさん。ありがとうございました。 VBAですね。大変勉強になります。何かと参考になりそうなので、じっくりみさせてもらいます。 ありがとうございました。
お礼
mshr1962さん。早速の回答ありがとうございました。大変助かりました。