dポイントプレゼントキャンペーン実施中!

画像のように横軸に「顧客」、縦軸に「当月使用した日に料金」が入力してあるエクセルがあります。
これを顧客毎に抽出(TYPE 1)し、別シートまたは別ファイルに書き出す事は簡単にできますか?
若しくは1枚のシート(ファイル)に全員の分でもいいので顧客毎のデータをまとめたいです。(TYPE 2)

(TYPE 1)
顧客1
11/5  |  850円
11/9  |  1400円
11/16  |  1200円


(TYPE 2)
顧客1          |  顧客3
11/5  |  850円  |  11/10  |   10671円
11/9  |  1400円
11/16  |  1200円

「Excelで記入項目があるところだけ抽出」の質問画像

A 回答 (2件)

こういう作業はフィルター機能を使うのがよいと思います。


TYPE2の下準備として、データ最右列の1つ右の列を作業列として使用します。

データはサンプルどおりに配置されており、E列の顧客4まで記載されているとします。
それよりもデータが多い場合は数式のセル参照の修正が必要です。

手順5,6はTYPE1の回答で、手順7,8はTYPE2の回答です。

◆手順
1.データ最右列のさらに右の列に『=COUNTA(A2:E2)』を入力して、下方向にコピペ
2.見出し行を選択
3.メニュー → データ → フィルター
4.任意の顧客の見出し行に追加された(例えば顧客1のところの)▼マークをクリックして『(空白セル)』のチェックをはずして『OK』をクリック
5.その状態でデータをコピーして別シート(別ファイル)に貼り付け・・・TYPE1の回答
6.フィルターを解除する場合は、手順3の『フィルター』の右隣にある『クリア』をクリックする
7.手順1で追加した列の▼マークをクリックして『0』のみチェックをはずして『OK』をクリック
8.その状態でデータをコピーして別シート(別ファイル)に貼り付け・・・TYPE2の回答
9.必要なものがコピペできたら完了
    • good
    • 0
この回答へのお礼

助かりました

フィルターというのがあったのですね。(^_^;
なんか、難しく考えてしまいました。
とても分かりやすい説明ありがとうございました。m(__)m

お礼日時:2018/11/15 09:25

こんばんは!



一例です。
↓の画像のような配置で元データはSheet1にあるとします。

Sheet2が「TYPE1」です。
A1セルに「顧客名」を入力するとA・B列に表示するようにしてみました。

Sheet2のA4セルに
=IFERROR(INDEX(Sheet1!A$2:A$1000,SMALL(IF(OFFSET(Sheet1!$A$2:$A$1000,,MATCH(A$1,Sheet1!$1:$1,0)-1,,1)<>"",ROW(A$2:A$1000)-1),ROW(A1))),"")

配列数式なのでCtrl+Shift+Enterで確定!(←必須★)

B4セルに
=IF(A4="","",INDEX(Sheet1!B:E,MATCH(A4,Sheet1!A:A,0),MATCH(A$1,Sheet1!$1:$1,0)-1))

(B4セルは配列数式ではありません。)
として、A4・B4セルを範囲指定 → B4セルのフィルハンドルで下へコピー!

Sheet3が「TYPE2」ですが、無理やり関数でやっています。

まず、1行目に作業用の行を設けています。
B1セルに
=IF(COUNT(Sheet1!B:B),COLUMN(),"")
という数式を入れフィルハンドルでこれ以上データはない!というくらいまでコピーしておきます。

A3セルに
=IF(B3="","","日付")

B3セルに
=IFERROR(INDEX(Sheet1!1:1,SMALL(1:1,COLUMN()/2)),"")

という数式を入れ、A3・B3セルを範囲指定 → B3セルのフィルハンドルで右へ2列ずつコピー!
これでSheet1の空白列以外の顧客が表示されます。

A4セルに
=IF(B4="","",INDEX(Sheet1!$A$2:$A$1000,SMALL(IF(OFFSET(Sheet1!$A$2:$A$1000,,MATCH(B$3,Sheet1!$B$1:$Z$1,0),,1)<>"",ROW(A$2:A$1000)-1),ROW(A1))))

配列数式なので、Ctrl+Shift+Enterで確定!

B4セルに
=IFERROR(INDEX(OFFSET(Sheet1!$A$2:$A$1000,,MATCH(B$3,Sheet1!$B$1:$Z$1,0),,1),SMALL(IF(OFFSET(Sheet1!$A$2:$A$1000,,MATCH(B$3,Sheet1!$B$1:$Z$1,0),,1)<>"",ROW(A$2:A$1000)-1),ROW(A1))),"")

こちらも配列数式なので、Ctrl+Shift+Enterで確定!

最後にA4・B4セルを範囲指定 → B4セルのフィルハンドルで右へ2列ずつコピー! → そのまま下へコピー!

これで画像のような感じになります。
※ 日付列は好みの表示形式にしてください。

※ Sheet3の作業用の行が目障りであれば、行・列を入れ替えどこか使っていない列にすることも可能です。

※ 「TYPE2」に関してはVBAの方が簡単なのですが、
今回は無理やり数式でやってみました。
とりあえずSheet1のZ列まで対応できるようにしています。m(_ _)m
「Excelで記入項目があるところだけ抽出」の回答画像1
    • good
    • 0
この回答へのお礼

ありがとう

あえての数式での回答ありがとうございます。
今回はフィルターという機能でやってみたいと思います。
が、こちらの数式も何かに使えそうですので、勉強のために一度TRYして動きを観察してみたいと思います。ありがとうございました。

お礼日時:2018/11/15 09:25

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

このQ&Aを見た人はこんなQ&Aも見ています