アプリ版:「スタンプのみでお礼する」機能のリリースについて

質問させてください。
画像の左の表から、配達日が入った果物の項目のみ、右の表のように残したいです。
配達日は空白か日付が入っているかどちらかです。
関数でもVBAでも良いです、何か良い方法はありませんでしょうか?
宜しくお願いいたします。

「条件に合ったセルのある行と一つ下の行だけ」の質問画像

質問者からの補足コメント

  • ご質問ありがとうございます。同一商品の届け先は複数存在しません。

      補足日時:2021/10/07 06:39
  • これは業務で使用するシステムからファイル化されたものです。
    合計欄は一つの処理を終えたら出る区切り、のようなものでしょうか?
    理由に関しては私もよくわかりません。
    このフォーマットをそのままシステムで取り込み使う場合もあるので、崩したくないのです。

    教えていただいた方法、とても参考になります。ありがとうございます!

    No.7の回答に寄せられた補足コメントです。 補足日時:2021/10/07 20:25

A 回答 (8件)

No.7です。


ご質問者からの補足説明がありました。

>これは業務で使用するシステムからファイル化されたものです。
>合計欄は一つの処理を終えたら出る区切り、のようなものでしょうか?

なるほど。了解しました。

>このフォーマットをそのままシステムで取り込み
>使う場合もあるので、崩したくないのです。

とのことなので、「手前みそ」ですが、参考までに、その状態から私の前回回答に繋げる手順を投稿しておきます。

添付画像①をご覧ください。sheet1に元々ご質問者の添付画像の左側の表があります。
これに、オートフィルター機能を使ってテキストフィルターで「合計」を「を含まない」という条件を設定すると、添付画像➁のような表ができます。
これをコピーして、sheet2のA1セルからの範囲に貼り付けすると、sheet2が前回回答のスタート状態になります。
ここから、前回回答の手順に従えば、ご希望の状況になると思います。
「条件に合ったセルのある行と一つ下の行だけ」の回答画像8
    • good
    • 0

ご質問者は


>条件に合ったセルのある行と一つ下の行だけを残す
とおっしゃっています。

これがご希望だとすると、次のどちらでしょう?
(ア)各商品の明細は必ず1行のみであり、そのすぐ下に商品別合計があるので、配達日のあるものと、合計欄を残す
(イ)各商品の明細行は複数あるが、そのうち配達日のあるものと、商品別合計欄を残す

文字通りとれば、(ア)ですが、実務として、各商品の明細行が必ず1行のみという場合、商品別合計欄を作成する意味はないと思います。
(イ)だとすると、No.4さんも指摘しておられますが、残された明細行の個数の合計と商品別合計欄の数値は(配達日のないデータがあるため)不一致なこともあるということでよいのでしょうか?

考え出すと疑問なことだらけです。ご質問の回答としては不適切かもしれませんが、ご質問者が示された元々の表(質問者添付画像左側)を加工物1、配達日のあるものを残した表(質問者添付画像右側)を加工物2と考えて、そもそものデータを商品別合計欄を省いたデータにしてしまうという方法はどうでしょう。

添付画像①をご覧ください。ご質問者がお示しになった「元の表」は全ての商品明細が1行のみであり、商品別合計を表示する意味がないので、「いちご」を2行にしてあります。
これをピボットテーブルを使って以下の手順で添付画像➁のように加工します。
(1)添付画像①のデータを今後データ数が増えることを想定して、空白の部分も含めて1行目から300行目程度までを選択
(2)メニューから挿入⇒ピボットテーブルを選択し、挿入場所として「既存のワークシート」のF1セルを選択
(3)「個数」をフィルターボックス、「商品」「届け先」を行ボックス、「個数」「配達日」を∑値ボックスへそれぞれドラッグ&ドロップ
(4)メニューからデザイン⇒レポートのレイアウト⇒表形式で表示を選択
(5)I列のセルを選択し、右クリックして、「値フィールドの設定」から「合計」を選択
(6)I列のテープル内セルを全て選択し、右クリックして、「セルの書式設定」⇒「日付」を選択
(7)G1セルにあるフィルターで、「複数のアイテムを選択」にチェックを入れ、「空白」のチェックをはずす
以上の手順でピボットテーブルは完成ですが、以下の調整が必要です。
(8)I列のテープル内セルを全て選択し、メニューからホーム⇒条件付き書式⇒新しいルール⇒数式を使用して、書式設定するセルを決定を選択
(9)数式欄に「=COUNTIF($F3,"*集計*")>0」という数式を記述し、書式ボタンを押し、フォントタブから「色」を背景色と同じもの(背景が白なら白、ブルーならブルー)を選択
(10)同様に(8)の手順の後、数式欄に「=COUNTIF($F3,"*総計*")>0」という数式を記述し、書式ボタンを押し、フォントタブから「色」を背景色と同じもの(背景が白なら白、ブルーならブルー)を選択
これで、集計行と総計行の配達日が見えなくなり(配達日は日付であり、集計する意味がない)、添付画像➁が完成します。これがご質問者の例示で言えば「元の表」です。

全く同様の手順ですが、
(3)で「配達日」をフィルターボックス、「商品」「届け先」を行ボックス、「個数」「配達日」を∑値ボックスへそれぞれドラッグ&ドロップし、
(7)のフィルターの場面でL1セルにあるフィルターで、「複数のアイテムを選択」にチェックを入れ、「空白」のチェックをはずし、あとは集計・総計の配達日を不可視にする手順を踏めば、添付画像③が完成します。これが、ご質問者のいう配達日の入った項目のみ残した表です。

この方法のメリットは、同一商品の届け先が複数ある場合も対応可能であり、データが追加・更新された場合(添付画像④)、ピボットテーブル内のセルを選択し、右クリック⇒更新を行えば、添付画像➁、添付画像③が更新され、添付画像➄、添付画像⑥になるという点です。

ご質問者から補足説明がありました。
>同一商品の届け先は複数存在しません。
とのことです。

だとすると私がお尋ねした、上記(ア)ということになりますが、この状況で商品別合計欄を表示させる意味を教えてください。
「条件に合ったセルのある行と一つ下の行だけ」の回答画像7
この回答への補足あり
    • good
    • 0

関数とエクセルのフィルタ機能でできそうです。



D列の見出し(D1セル)は『配達日』と書かれており、D2セル以下は配達日のみがシリアル値で入力されている前提です。

E列を作業列として使用し、E2セルに『=IF(OR(ISNUMBER(D1),ISNUMBER(D2)),"表示","")』と入力します。
E2セルを下方向にデータ最下行までコピペします。
1行目を行選択して、メニュー⇒データ⇒フィルタとします。
E1セルの▼マークをクリックして、『表示』のみにチェックをつけます。
フィルタの解除はメニュー⇒データ⇒クリア(フィルタの右隣)です。

不要行を非表示にするだけならここまでで完了です。さらに、不要行を削除してしまいたいということであれば、下記を行います。

フィルタを解除した状態で、F列にデータ最下行まで連番を打ちます。
E1セルの▼マークで『空白』のみにチェックをつけます。
2行目以降を削除します。(まとめて選択-削除しても非表示行は削除されません)
フィルタ解除します。
2行目以降のデータを全選択して、『並べ替え』をF列基準、昇順、で行えばよいです。
    • good
    • 0

オートフィルタを設定して、A列を緑の塗りつぶし以外、D列を空白セルでフィルタリングして条件に合わない行だけ表示させてからそれを削除

すれば欲しい行だけ残りませんか?
    • good
    • 0

これって同一商品の届け先が複数存在する可能性もあるのでしょうか?


そして複数存在はするけど日付がある行とない行が混ざってるとか?
⇒その場合だと個数を合計した結果は表示された分だけにするのか、非表示の分も加算する(元データのまま)のか?

と初級レベルなジジィは考えてしまいました。
    • good
    • 0

やや面倒ですね。



関数では、通常、行を消すことはできません。
VBAなら、商品列のA2から最終行まで見ていき、各行で3列右に値があるかチェックして、行削除するしないを制御すればできますね。

Excel機能でやるなら、以下がおすすめです。
・合計行を全部削除する
・フィルタ機能で配達日が入っている行のみを残す
・小計機能で個数の合計を出す

フォーマットが決まっていて合計行が消せないなら、
・E2に以下を入力して最終行までコピーし、フィルタを設定してTRUEだけ抜き出せば良いです。
「=OR(D2<>"",AND(COUNTIF(A2,"*合計*")<>0,D1<>""))」
    • good
    • 0

こんにちは



肝心の「条件に合った」という条件が何なのか説明されていないように思います。

勝手に解釈して「日付が入っている行とその1行下の行を表示したい」ということと解釈しました。

◇方法1
そのままのデータにフィルターを使うのではいかがでしょうか?
以下では、D列の日付はシリアル値(=エクセルの日付型の数値)であると仮定しています。
例えば、E列を利用して、E2セルに
 =IF(COUNT(D1:D2)," ","")
を入力して、充分に下方までフィルコピーしておきます。
(結果は何も表示されませんけれど、該当行には全角の空白が表示されます)
(見える形にするなら、式中の" "を他の文字にすればそれが表示されます)

その上で、フィルター機能で、E列をキーに全角空白だけを指定すれば、ご質問の結果を得ることができます。

◇方法2
別シート等に該当行だけ祖を抽出したいのであるなら、E列の式を
 =IF(COUNT(D1:D2),COUNT(E$1:E1)+1,"")
として下方にフィルコピーすると
該当行に、上から順に1、2、3・・・と表示されるようになります。

別シートからは、このE列の値を1、2・・と順に検索してA~D列を表示するようにすれば良いでしょう。
(XLOOKUP関数で、あるいはMATCH、INDEX関数の組み合わせで可能です)

※ 作業列を使用せずに行うことも可能ですが、365環境以外だと式が長くなりやすいので省略します。
    • good
    • 0

ピボットでいけんじゃない?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!