• 締切済み

エクセルについて

下記のような処理を関数でしたいです。 例えば下記のように入力されている表があるとします。 A1 1月1日 B1 100円 C1 空欄 D1 現金 E1 データA A2 1月2日 B2 空欄 C2 101円 D2 現金 E2 データB A3 1月3日 B3 101円 C3 空欄 D3 電子マネー E3 データA A4 1月4日 B4 102円 C4 空欄 D4 現金 E4 データC これを下記のように現金の部分だけ抽出しデータAもしくはデータBと入力されているものは金額と空欄の部分を逆にしたいです。 G1 1月1日 H1 空欄 I1 100円 J1 現金 K1 データA G2 1月2日 H2 101円 I2 空欄 J2 現金 K2 データB G3 1月4日 H3 102円 I3 空欄 J3 現金 K3 データC

みんなの回答

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.8

補助列などが必要のない数式で対応する場合は、以下のような配列数式を使うことになります。 =IF(COUNTIF($D$1:$D$100,"現金")<ROW(A1),"",INDEX($A:$D,SMALL(IF($D$1:$D$100="現金",ROW($A$1:$A$100),""),ROW(A1)),COLUMN(A1))) ひとまず上記の数式を入力して、Ctrl+Shift+Enterで確定し、右方向に4つ下方向に適当数オートフィルすれば、現金の該当データが抽出されます(適宜セルの表示形式を日付などに変更する)。 この2列目の数式と3列目の数式には、表示列を入れ替えるため、以下のような調整を行います(COLUMN関数に(($E$1:$E$100="データA")+($E$1:$E$100="データB"))を加減)。 2列目のセル =IF(COUNTIF($D$1:$D$100,"現金")<ROW(A1),"",INDEX($A:$D,SMALL(IF($D$1:$D$100="現金",ROW($A$1:$A$100),""),ROW(A1)),COLUMN(A1)+(($E$1:$E$100="データA")+($E$1:$E$100="データB")))) 2列目のセル =IF(COUNTIF($D$1:$D$100,"現金")<ROW(A1),"",INDEX($A:$D,SMALL(IF($D$1:$D$100="現金",ROW($A$1:$A$100),""),ROW(A1)),COLUMN(A1)-(($E$1:$E$100="データA")+($E$1:$E$100="データB"))))

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.7

この質問はエクセルの「表の組み換え」の問題だ。 関数では、例えば現金を指定して現金を抜き出す関数は、複雑な式になる。普通ここへ質問するレベルの人では意味がわからないと思う。丸写しして、勉強して、応用するのも手である。 ーー 私はこういう「表の組み換え」にはエクセルVBAが必要と思っている。 判らないかもしれないが、書いておく。 例データ Sheet1のA2:E5に(-は空白セルを示す) 1月1日 100円 - 現金 データA 1月2日 - 101円 現金 データB 1月3日 101円 - 電子マネー データA 1月4日 102円 - 現金 データC こういう風に質問文に例データを書いてくれると判りやすい(希望)。一々セルごとにセル番地を書かれると視認性を損なう。 ーー コード ヒョウジュンモジュールの Dim sh1, sh2 Set sh1 = Worksheets("Sheet1") 'Sheet1を使う。原データ Set sh2 = Worksheets("Sheet2") 'Sheet1を使う。結果データ k = 2 '結果データは2行目から d = sh1.Range("A65536").End(xlUp).Row '原データ最終行 MsgBox d For i = 2 To d '--D列が現金の行を対象にするそれ以外は、書き出しはしない If sh1.Cells(i, "D") = "現金" Then sh2.Cells(k, "A") = sh1.Cells(i, "A") sh2.Cells(k, "B") = sh1.Cells(i, "C") sh2.Cells(k, "C") = sh1.Cells(i, "B") sh2.Cells(k, "D") = sh1.Cells(i, "D") sh2.Cells(k, "E") = sh1.Cells(i, "E") k = k + 1 '次の書き出しは1行下への用意 End If Next i End Sub このコード(のIFからENDIF間での部分以外は)は他の課題にも多くの場合で使える。少し慣れると直ぐ思いつく。 ーー 実行結果 (Sheet2 (Sheet2のA列は表示形式を日付に設定する) 1月1日 - 100円 現金 データA 1月2日 101円 - 現金 データB 1月4日 102円 現金 データC

全文を見る
すると、全ての回答が全文表示されます。
noname#204879
noname#204879
回答No.6

別解です。(添付図参照) Sheet2 において、 A2: =IF(Sheet1!A2="","",Sheet1!A2) B2: =IF(OR($E2="データA",E2="データB"),IF(Sheet1!$C2,Sheet1!$C2,""),IF(Sheet1!$B2,Sheet1!$B2,"")) C2: =IF(OR($E2="データA",$E2="データB"),IF(Sheet1!$B2,Sheet1!$B2,""),IF(Sheet1!$C2,Sheet1!$C2,"")) D2: =IF($A2="","",Sheet1!D2) セル D2 を右隣にドラッグ&ペースト 範囲 A2:E2 を下方にズズーッとドラッグ&ペースト 最後に、[オートフィルタ]で「種類」(D列)の“現金”を抽出すればOK。

全文を見る
すると、全ての回答が全文表示されます。
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.5

F列を作業列としてF1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(D1="現金",COUNTIF(D$1:D1,D1)-IF(OR(E1="データA",E1="データB"),0.5,0),"") 次にお求めの表ですがG1セルには次の式を入力してK1セルまで横にオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(ROW(A1)>COUNT($F:$F),"",INDEX($A:$E,MATCH(ROW(A1),$F:$F,1),IF(COLUMN(A1)=1,1,IF(COLUMN(A1)=2,IF(MOD(INDEX($F:$F,MATCH(ROW(A1),$F:$F,1)),1)=0.5,3,2),IF(COLUMN(A1)=3,IF(MOD(INDEX($F:$F,MATCH(ROW(A1),$F:$F,1)),1)=0.5,2,3),COLUMN(A1)))))) 最後にG列を選択して右クリックし、「セルの書式設定」から「表示形式」の「日付」で望みの日付を選択します。 また、H及びI列ではB及びC列で空白のセルには0が表示されますがそれらを見かけ上で空白にするためには、H及びI列を選択し「セルの書式設定」から「表示形式」の「ユーザー定義」で 0;; と入力すればよいでしょう。

全文を見る
すると、全ての回答が全文表示されます。
  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.4

表は、「A2:E5」にあるとしています。A1からの表なら、「-ROW($A$1)」をすべて削除してください。 下記数式は、いずれも配列数式なので、数式入力後、数式バーにカーソルがある状態で、「Shift+Ctrl+Enter」を押す必要があります。数式の両端に「{ }」がついて、「{=INDEX(・・・・・)}」のように表示されます。 ほとんど同じ式で、最後の列インデックスの値が値がうだけです。 後、必要なだけ下にフィルしてください。 数式が長いですが、作業領域は必要ありません。 なお、「0」が表示されて面白くないというのであれば、「ツール」―「オプション」―「表示」―「ゼロ値」のチェックをはずせばいいでしょう。 G2: =INDEX($A$2:$E$5,SMALL(IF($D$2:$D$21="現金",ROW($D$2:$D$21)-ROW($A$1),""),ROW()-ROW($A$1)),1) H2: =IF(OR(K2="データA",K2="データB"),INDEX($A$2:$E$5,SMALL(IF($D$2:$D$21="現金",ROW($D$2:$D$21)-ROW($A$1),""),ROW()-ROW($A$1)),3),INDEX($A$2:$E$5,SMALL(IF($D$2:$D$21="現金",ROW($D$2:$D$21)-ROW($A$1),""),ROW()-ROW($A$1)),2)) I2: =IF(OR(K2="データA",K2="データB"),INDEX($A$2:$E$5,SMALL(IF($D$2:$D$21="現金",ROW($D$2:$D$21)-ROW($A$1),""),ROW()-ROW($A$1)),2),INDEX($A$2:$E$5,SMALL(IF($D$2:$D$21="現金",ROW($D$2:$D$21)-ROW($A$1),""),ROW()-ROW($A$1)),3)) J2: =INDEX($A$2:$E$5,SMALL(IF($D$2:$D$21="現金",ROW($D$2:$D$21)-ROW($A$1),""),ROW()-ROW($A$1)),4) K2: =INDEX($A$2:$E$5,SMALL(IF($D$2:$D$21="現金",ROW($D$2:$D$21)-ROW($A$1),""),ROW()-ROW($A$1)),5)

全文を見る
すると、全ての回答が全文表示されます。
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

【方法その1】  まず、M1セルに次の数式を入力して下さい。 =IF(INDEX($D:$D,ROW())="現金",ROW(),"")  次に、M1セルをコピーしして、M2以下に貼り付けて下さい。  次に、G2セルに次の数式を入力して下さい。 =IF(ROWS($2:2)>COUNTIF($D:$D,"現金"),"",INDEX($A:$A,SMALL($M:$M,ROWS($2:2))))  次に、H2セルに次の数式を入力して下さい。 =IF(ROWS($2:2)>COUNTIF($D:$D,"現金"),"",IF(INDEX(IF(OR($K2="データA",$K2="データB"),$C:$C,$B:$B),SMALL($M:$M,ROWS($2:2)))="","",INDEX(IF(OR($K2="データA",$K2="データB"),$C:$C,$B:$B),SMALL($M:$M,ROWS($2:2)))))  次に、I2セルに次の数式を入力して下さい。 =IF(ROWS($2:2)>COUNTIF($D:$D,"現金"),"",IF(INDEX(IF(OR($K2="データA",$K2="データB"),$B:$B,$C:$C),SMALL($M:$M,ROWS($2:2)))="","",INDEX(IF(OR($K2="データA",$K2="データB"),$B:$B,$C:$C),SMALL($M:$M,ROWS($2:2)))))  次に、J2セルに次の数式を入力して下さい。 =IF(ROWS($2:2)>COUNTIF($D:$D,"現金"),"","現金")  次に、K2セルに次の数式を入力して下さい。 =IF(ROWS($2:2)>COUNTIF($D:$D,"現金"),"",INDEX($E:$E,SMALL($M:$M,ROWS($2:2))))  次に、G2~K2の範囲をコピーしして、同じ列の2行目以下に貼り付けて下さい。 【方法その2】  まず、G2セルに次の数式を入力して下さい。 =IF(ROWS($2:2)>COUNTIF($D:$D,"現金"),"",INDEX($A:$A,SUMPRODUCT(ROW($D$1:INDEX($D:$D,MATCH("゛",$D:$D,-1)))*($D$1:INDEX($D:$D,MATCH("゛",$D:$D,-1))="現金")*(COUNTIF(OFFSET($D$1,,,ROW($D$1:INDEX($D:$D,MATCH("゛",$D:$D,-1)))-ROW($D$1)+1),"現金")=ROWS($2:2)))))  次に、H2セルに次の数式を入力して下さい。 =IF(ROWS($2:2)>COUNTIF($D:$D,"現金"),"",INDEX(IF(OR($K2="データA",$K2="データB"),$C:$C,$B:$B),SUMPRODUCT(ROW($D$1:INDEX($D:$D,MATCH("゛",$D:$D,-1)))*($D$1:INDEX($D:$D,MATCH("゛",$D:$D,-1))="現金")*(COUNTIF(OFFSET($D$1,,,ROW($D$1:INDEX($D:$D,MATCH("゛",$D:$D,-1)))-ROW($D$1)+1),"現金")=ROWS($2:2))))&"")  次に、I2セルに次の数式を入力して下さい。 =IF(ROWS($2:2)>COUNTIF($D:$D,"現金"),"",INDEX(IF(OR($K2="データA",$K2="データB"),$B:$B,$C:$C),SUMPRODUCT(ROW($D$1:INDEX($D:$D,MATCH("゛",$D:$D,-1)))*($D$1:INDEX($D:$D,MATCH("゛",$D:$D,-1))="現金")*(COUNTIF(OFFSET($D$1,,,ROW($D$1:INDEX($D:$D,MATCH("゛",$D:$D,-1)))-ROW($D$1)+1),"現金")=ROWS($2:2))))&"")  次に、J2セルに次の数式を入力して下さい。 =IF(ROWS($2:2)>COUNTIF($D:$D,"現金"),"","現金")  次に、K2セルに次の数式を入力して下さい。 =IF(ROWS($2:2)>COUNTIF($D:$D,"現金"),"",INDEX($E:$E,SUMPRODUCT(ROW($D$1:INDEX($D:$D,MATCH("゛",$D:$D,-1)))*($D$1:INDEX($D:$D,MATCH("゛",$D:$D,-1))="現金")*(COUNTIF(OFFSET($D$1,,,ROW($D$1:INDEX($D:$D,MATCH("゛",$D:$D,-1)))-ROW($D$1)+1),"現金")=ROWS($2:2)))))  次に、G2~K2の範囲をコピーしして、同じ列の2行目以下に貼り付けて下さい。

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

No.1です! たびたびごめんなさい。 投稿した後で前回、余計なことを書いていたのに気づきました。 ※以下の数行がが不必要でした。 前回の数式だと、列すべてを範囲指定していますので、 どの行からデータが始まっていてもちゃんと表示されると思います。 何度も失礼しました。m(_ _)m

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 現金出納帳に転記するような感じですかね。 一例です。 ↓の画像(小さくて見づらかったらごめんなさい。)でM列を作業用の列として使っています。 作業列M1セルに =IF(D1="現金",ROW(),"") という数式を入れ、オートフィルでずぃ~~~!っと下へコピーしておきます。 (作業列が目障りであれば遠く離れた列を利用するか、M列を「非表示」にします) そして、G1セル(セルの表示形式は「日付」にしておく)に =IF(COUNT(M:M)<ROW(A1),"",INDEX(A:A,SMALL(M:M,ROW(A1)))) H1セルに =IF($G1="","",IF(INDEX($B:$C,SMALL($M:$M,ROW(A1)),COLUMN($C$1)-COLUMN(A1))="","",INDEX($B:$C,SMALL($M:$M,ROW(A1)),COLUMN($C$1)-COLUMN(A1)))) として隣のI1セルまでオートフィルでコピー! J1セルに =IF($G1="","",INDEX(D:D,SMALL($M:$M,ROW(A1)))) として隣のK1セルまでコピー! 最後にG1~K1セルを範囲指定 → K1セルのフィルハンドルで下へコピー! これで画像のような感じになります。 ※ 質問では1行目からのデータになっていますが、通常1行目は項目行になっていると思いますので、 数式のセル番地は実状に応じて適宜変更してみてください。 以上、参考になれば良いのですが・・・m(_ _)m

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

関連するQ&A

  • LibreOfficeの関数について

    たとえば下記のように、データが入力されているとします。 B5 1月1日 C5 データ1 D5 100 E5 空欄 F5 現金 G5 分類A B6 1月2日 C6 データ2 D6 空欄 E6 200 F6 A銀行 G6 分類B B7 1月3日 C7 データ3 D7 300 E7 空欄 F7 B銀行 G7 分類C B8 1月4日 C8 データ4 D8 空欄 E8 400 F8 C銀行 G8 分類D B9 1月5日 C9 データ5 D9 500 E9 空欄 F9 現金・D銀行 G9 分類E B10 1月6日 C10 データ6 D10 空欄 E10 600 F10 E銀行・現金 G10 分類G このデータを関数を使って、下記のように並べ替えをしたいです。 F列に、現金の文字があるものだけを抽出し、E列の分類が、EもしくはGだったら金額のD部分を入れ替えて表示する。そのほかの分類は、入れ替えをせずにそのまま表示する。 J6 1月1日 K6 データ1 L6 100 M6 空欄 N6 現金 E6 分類A J7 1月5日 K7 データ5 L7 空欄 M7 500 N7 現金・D銀行 E7 分類E J8 1月6日 K8 データ6 L8 600 M8 空欄 N8 E銀行・現金 E8 分類G このようなことを関数で行いたいです。できれば、0やエラー表示は出ないものがいいです。よろしくお願いします。

  • エクセルVBAについて教えてください

    エクセル2003 シート1     A       B      C 1  3月1日 A 100     *A列はカレンダーコントロールより選択としています 2  4月1日 B 100 3  3月1日 C 200     *B列はコンボボックスより選択としています 4  3月1日 D 200 5  4月1日 E 300     *C列は直接入力としています 6  4月1日 F 300 7  3月1日 G 100 8  4月1日 H 200 9  3月1日 I 200 10  4月1日 J 100 上記シート1の表のC列を下記シート2のC列に条件集計する シート2    A       B       C 1  3月1日   A~E     500    *選択した日付ごと及びA・B・C・D・Eの集計  2  3月1日   F~J     300    *選択した日付ごと及びF・G・H・I・Jの集計     3  4月1日   A~E     400    *選択した日付ごと及びA・B・C・D・Eの集計    4  4月1日   F~J     600    *選択した日付ごと及びF・G・H・I・Jの集計  すいませんが上記コードを教えてください 困ってます よろしくお願いします      

  • 関数について

    例えば下記のような表があるとします。 sheet1の表から、sheet2の表に現金のみを抽出したいです。 このときに、収入や、支出と記入されているところは、金額を逆にして表示したいです。 できれば、できるだけ短い式でマクロや配列数式?は使いたくないです。 丸投げとなってしまいますがよろしくお願いします。 元データイメージ sheet1 C3 1月1日 D3 収入 E3 100 F3 空欄 G3 現金 C4 1月1日 D4 支出 E4  空欄  F4 101 G4 商品券 C5 1月2日 D5 購入 E5 空欄 F5 102 G5 商品券 C6 1月3日 D6 その他 E6 103 F6 空欄 G6 現金 C7 1月4日 D7 支出 E7 F7 104 G7 現金 抽出データイメージ sheet2 C3 1月1日 D3 収入 E3 空欄 F3 100 G3 現金 C6 1月3日 D6 その他 E6 103 F6 空欄 G6 現金 C7 1月4日 D7 支出 E7 104 F7 空欄 G7 現金

  • エクセルで2列以上のものを同時に並び替えするには

    エクセルで下記のようなデーターがあるとします。 1 A  G     B  H 2 C  I  ○   D  J 3 E  K   F  L このようにひとつの項目に2行づつあるものに対して、最後に○をつけたものを先頭に2行そのまま一気に並び替えるにはどのようにすればよろしいでしょうか?要するに 2 C  I  ○   D  J 1 A  G     B  H 3 E  K   F  L このようにしたいです。 よろしくお願いいたします。

  • エクセル マクロでセルを自動移動

    例1のようになっているエクセル表があります。 データは右方向、下方向へ増えます。 Cの列以降は4つ単位でしかデータは増えません。 それを例2の表のように列A,Bのデータはそのままに Cの列以降の4つのセルを区切りに下の行に移動して、 空白の列まで言ったらA2の行以降を最後の行まで繰り返しするという マクロを書くことは可能でしょうか。 出来ましたらそのマクロを教えてください。 例1 A1 B1 C1 D1 E1 F1 G1 H1 I1 J1 K1 L1 M1 N1 A2 B2 C2 D2 E2 F2 G2 H2 I2 J2 A3 B3 C3 D3 E3 F3 G3 H3 I3 J3 K3 L3 M3 N3 例2 A1 B1 C1 D1 E1 F1 A1 B1 G1 H1 I1 J1 A1 B1 K1 L1 M1 N1 A2 B2 C2 D2 E2 F2 A2 B2 G2 H2 I2 J2 A3 B3 C3 D3 E3 F3 A3 B3 G3 H3 I3 J3 A3 B3 K3 L3 M3 N3

  • エクセルでデータを反映させたい。

    エクセルで下記のことをしたいのですが、どのような方法が ありますか?   A B C D E (列) 1 1  a b c d 2 2  e f g h 3 3  i j k l (行) ・他シートにA1の「1」を入れると、B~E列のデータが反映する。 (A列の数字が個人を指すもので、それを選択すると付随するデータ(B~E)も反映するということなんですが・・・。 説明が下手で申し訳ないのですが、どなたか教えて下さい。

  • エクセルデータの並べ替えに関して

    エクセルデータの並べ替えに関して A列からH列まで数値が入っていて、それが8,000行くらいあります。(毎回変動します。) A1からH8000くらいのセルに値が入っています。 エクセルを縦長に使用しているので、このまま印刷をすると印刷面の右側半分以上が空白に なってしまいます。 マクロを利用して、これらの値を96行ごとに2列分けたいと思っていますが、どうやったら 良いか、教えていただけないでしょうか。 (マクロ実行前)--------------  A B C D E F G H 1 1 2 3 4 5 6 7 8  2 2 3 4 5 6 7 8 9 3 3 4 5 6 7 8 9 10 4 4 5 6 7 8 9 10 11 ・・・・・・ ---------------------------- のように下方向に数字が並んでいる場合、マクロを実行したら 次のようにしたいと思っています。 (マクロ実行後)--------------  A B C D E F G H (I) J K L M N O P Q 1 1 2 3 4 5 6 7 8(1行空き)97 98 99 100 101 102 103 104 2 2 3 4 5 6 7 8 9(1行空き)98 99 100 101 102 103 104 105 3 3 4 5 6 7 8 9 10(1行空き)99 100 101 102 103 104 105 4 4 5 6 7 8 9 10 11(1行空き)100 101 102 103 104 105 106 ・・・ 96 96 97 98 99 100 101 102 103(1行空き)192 193 194 195 196 197 198 199 97 193 194 195 196 197 198 199 200(1行空き)289 290 291 292 293 294 295 296 ・・・・・・ ---------------------------- (1)A1からH96までを切り取って、J1に貼り付ける。 (2)「(1)」で切り取って出来た空欄を削除して上方向にシフトする。 (3)A97からH192までを切り取って、J97に貼り付ける。 (4)「(2)」で切り取って出来た空欄を削除して上方向にシフトする。 といった操作を「切り取って出来た空欄を削除して上方向にシフトする。」という操作を しようとしたら上方向にシフトするデータがなくなるところまで続けたいと 思っています。

  • エクセルで空白せるだけ削除したい

    エクセルの操作で困っています。 どなたか、ご教授お願い致します。 例えば(4列4行のセルとお考えください)   A  空欄  F  空欄  空欄  C  空欄 空欄   B  空欄 空欄  H  空欄  D   E   G を空欄だけ削除して上に詰めて   A   C   F   H   B   D   E   G のように並び変えたいのですが良い方法はないでしょうか? 空欄を削除したい範囲は非常に広範囲で、どの列も昇順や降順で並んでいる訳ではなくランダムな文字列です。

  • excel 関数作成の簡素化 ?

    A B C D E F G H I J 1784 1784 1781 1782 1809 1813 1821 1813 1784 1784 (1)A-B B-C C-D D-E E-F F-G G-H H-I I-J (1)0 3 -1 -27 -4 -8 8 29 0 (2)=SUMIF(A:I,">0",A:I) で 40になる 上記の(1)を使用せず (2)のように一気に出来ないか? もしも 表示が悪ければ 書き直し する為 回答不要

  • エクセルについて

    エクセルで A B C D E F G H I J K L M N O P Q R … と並んでいるデータを A B C D E F G H I J K L … のように並べ変えたいのですが、最も効率のよい方法を教えてください。 上記のアルファベット1つにセル1つです。 Office2007を使用しています。 以上、宜しくお願い致します。

このQ&Aのポイント
  • ぷららのメールを新しいパソコンにエクスポートし、インポートしたい方法について教えてください。
  • メールのインポートとエクスポート方法を詳しく解説します。ぷららのメールを新しいパソコンに移行するための手順やポイントをご紹介します。
  • ぷららのメールを新しいパソコンにエクスポートし、インポートする方法についての情報をお探しですか?詳しい手順や注意点をご紹介します。
回答を見る

専門家に質問してみよう