• ベストアンサー

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列あります。 よろしくお願い致します。

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

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

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)))),"")

rurucom
質問者

お礼

mshr1962さん。早速の回答ありがとうございました。大変助かりました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • EL-SUR
  • ベストアンサー率76% (83/108)
回答No.4

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)),"")

rurucom
質問者

お礼

EL-SURさん。 丁寧なご回答ありがとうございました。

すると、全ての回答が全文表示されます。
  • EL-SUR
  • ベストアンサー率76% (83/108)
回答No.3

関数を使った別案です。 こんなの 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)
回答No.2

マクロで、以下のようなもの作れば、出来ますよ。 ★印はご自身で変えてください。 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

rurucom
質問者

お礼

I_Xさん。ありがとうございました。 VBAですね。大変勉強になります。何かと参考になりそうなので、じっくりみさせてもらいます。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A

このQ&Aのポイント
  • 鉛ライニングとは、工業において鉄板の表面に鉛を塗布する作業です。
  • 鉛の被膜を作る必要がある理由は、鉛が鉄を腐食から保護し、耐久性を向上させる効果があるからです。
  • 鉛ライニングは、化学工場や配管などの高腐食性環境で使用され、腐食から設備を守るための技術です。
回答を見る

専門家に質問してみよう