『ISERROR関数で表示が空白になっている行を詰めて表示したい』(老人) 本掲示板各位 お世話になっております。 首記、以下イメージの様な部品構成表を作成しております。 M    N    O       P 1 AAAAA    12345     10    235 2 SV-58    88888    23   1270 3 4 S-444    466H00    8    10760 5 6 HMJK98    99999    10   26 7 8 JKH2GF   J8365    7   333 . . . 11000行程度 上記セルは空白部も含めて全て別シートより IFERROR+INDEX+MATCH関数で転記されております。 (空白セルも関数が入ってます。) 転記先の見積書 C    D    E       F 1 AAAAA    12345    10    235 2 SV-58    88888    23    1270 3 S-444    466H00    8    10760 4 HMJK98    99999   10    26 5 JKH2GF    J8365    7   333 これを同シートにある見積シートへの転記表へ 空白行を詰めて転記する処理を関数で行いたいのですが 本サイトの過去ログや他ネットを自分なりに調べて試しておりますが 数式が入った空白行の処理が上手くいかずに苦慮しております。 製品仕様により空白行の場所が変わるため 行削除or数式削除は出来かねます。 また、関数での対応をお願いしたくお知恵を拝借できますと大変助かります。 以上、よろしくお願いいたします。 < 使用 Excel:Excel2016、使用 OS:Windows7 > ---- 部品構成表の隣とかに全行に対して =IF(M1<>"",ROW()) 等で、予め空白以外の行番号だけ出る様に仕掛けておけば、 INDEXとSMALLで何とかなるかと思います。 例えばQ列に行番号を設定したなら C1 =INDEX(M:M,SMALL($Q:$Q,ROW(A1))) みたく。 しかし >11000行程度 で >IFERROR+INDEX+MATCH関数 というのは ちょっと再計算が重たそうですね。 (白茶) 2021/02/18(木) 20:11 ---- 白茶様 ご回答ありがとうございます。 > =IF(M1<>"",ROW()) > 等で、予め空白以外の行番号だけ出る様に仕掛けておけば、 > INDEXとSMALLで何とかなるかと思います。 こちらの式でも空白行へ採番されてしまいます。 セル書式がユーザー定義で#,###にしているから?思い 数値や標準してもカウントされています。 COUNT, COUNTiF関数なるもので 文字列、数値が表示されているセルのカウントだけは 空白表示のセルが非カウントになることが分かりました。 但しそこから空白セル以外へに行番号を付与する関数が作れません。 補足説明となり恐縮ですが、転記対象のセルは半角数字もしくは半角英数字の文字列のみです。 お手数をおかけ致しますが、お知恵をお借りできますと幸甚です。 (老人) 2021/02/19(金) 09:48 ---- 横からすみません。 IF(LEN(M1)>0,ROW()) とかでもだめですか? (ななし) 2021/02/19(金) 09:56 ---- ななし様 ご回答ありがとうございます。 頂いた式でも空白セルへ行番号が付与されます。 色々な角度があるものだと感心しました。 引き続き考えます。 (老人) 2021/02/19(金) 10:25 ---- >IFERROR+INDEX+MATCH関数で転記されております。 >(空白セルも関数が入ってます。)   ↑ の式を提示してください。 空白「""」ではなく、スペースか「0」にしてませんか? 一応確認ですけど、P列が数値だとして =IF(COUNT(P1),ROW(),"") だとどうなりますか?  ↓ も具体的な数式を提示してください。 >COUNT, COUNTiF関数なるもので >空白表示のセルが非カウントになることが分かりました。 以上 (笑) 2021/02/19(金) 11:24 ---- >IFERROR+INDEX+MATCH関数で転記されております。 >(空白セルも関数が入ってます。)   ↑ の式を提示してください。   (回答)    下記数式です。(すいませんISERRORでした。)   =IF(ISERROR(MATCH($I$7,'マスタ'!$J$753:$J$12011,0))=TRUE,"",INDEX('マスタ'!$L$753:$L$12011,MATCH($I$7,'マスタ)'!$J$753:$J$12011,0))) >一応確認ですけど、P列が数値だとして >=IF(COUNT(P1),ROW(),"") だとどうなりますか?   (回答)     全て空白になります。(下段コピーした場合も) >↓ も具体的な数式を提示してください。 >COUNT, COUNTiF関数なるもので >空白表示のセルが非カウントになることが分かりました。    (回答)     =COUNTIF(O1:$O$400,"?*")      Oは文字列です。(セル書式は#,###) これだと空白欄の1行目をカウントしてしまいます。      例:空白欄が連続4行あると、一番上の空白欄はカウントしてしまってます。      非カウントではありませんでした。紛らわしくて申し訳ございません。 (老人) 2021/02/19(金) 11:39 ---- その INDEX〜MATCH の式は実際のもの? 違いますよね? まず、参照シート名が「マスタ」と「マスタ)」になっています(2つめは閉じカッコ付き) で、それはどのセルの式? シート名を修正しても、その式なら下にコピーしても右にコピーしても結果は全部同じです。 検索値を絶対参照にしているので($I$7) 実際の式をコピーして貼り付けてください。 それと・・・ IFERROR 関数の存在を知っているのに、それを使わないのはなぜ? 例示ではいきなり1行目から始まってますけど、実際の数式を入れているのは何行目から? >全て空白になります。 P列に数値が表示されていても、ですか? では ↓ の COUNT はどんな式? >COUNT, COUNTiF関数なるもので >Oは文字列です。 例示では数値になってますけど? とにかく状況を正確に説明してもらわないと空しいやりとりがくり返されるだけです。 以上 (笑) 2021/02/19(金) 12:39 ---- どうしても関数でやらないとだめなのであればだめですが 別案として そのままの状態で空白だけ抜いて転記するなら関数で自動処理ではないですが フィルターかけて空白除いたものを可視セルコピーでもそんなに手間にはならないのでは 関数を消してしまうこともないしフィルタ解除すれば戻りますし (なるへそ) 2021/02/19(金) 12:49 ---- 一応言っておくと・・・ IFERROR が単なる入力ミスで、実はそんな関数の存在を知らないのなら IFERROR を使えば ↓ な感じになります =IFERROR(INDEX(マスタ!L$753:L$12011,MATCH($I7,マスタ!$J$753:$J$12011,0)),"") 以上 (笑) 2021/02/19(金) 13:26 ---- 皆様方 本件、色々とご教授頂きまして有り難うございます。 社内フォームの制約上、複数シートからの抽出や 結合せるへの転記等ありますので全体像と詳細の説明が上手く出来ません。 マクロで対応を検討いたします。 有り難うございました。 (老人) 2021/02/19(金) 18:57 ---- 部品構成表は、同時に受注数入力になっているイメージなのでしょうか? もし、部品構成表の列O(数値が少ないので想像です)が仮に0またはエラー値として 部品構成表の列Oを条件値として以下の関数で出来ます。 ※条件値列 O >= 1 のイメージで同一シートのC:Fへ M:Pの入力済数値(または文字列)を 行を詰めて反映させます。(なぜ同一シートなのか?=参照する式が長いのでまずは練習です。) C1セルへ以下をコピーして貼付けます。 =IFERROR(INDEX($M$1:$P$8,MATCH(LARGE(($O$1:$O$8>=1)*1/ROW($M$1:$P$8),ROWS($C$1:$C1)),1/ROW($M$1:$P$8),0),COLUMNS($C$1:C$1)),"") 数式はこれですべて入力できました。でも、このままでは正しく動きません。 数式を入力し終わった後、最後の()の後ろにカーソルを置き、「Shift」キーと「Ctrl」キーを押しながら「Enter」キーを押し配列形式にします。 C1セルにM1のAAAAAが反映されたと思います。C1をF1までコピーし、C:Fの8行分下までコピーします。 どうでしょうか?部品構成表の列Oが1以上なら上から順番に反映されたと思います。 列Oの値を0にしたり1以上を入力したりして動作確認してください。 後は、転記したいBOOK、Sheetの追記をするだけです。式の説明をすると2,000文字位かかるのでしません。(笑) イメージと違ったらごめんなさい。 (にゃん) 2021/02/22(月) 21:02