人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Excelで、シート1に書いた内容を、条件分岐をした上でシート2以降に挿入させるにはどうしたら良いでしょうか。

具体的には下記のようなイメージです。
◆シート1
client1,5000,Jan
client2,2000,Feb
client3,1000,Apr
client4,1000,Apr

◆シート2(シート1から自動で書き出す)
client1,5000,Jan
client2,2000,Feb

◆シート3(シート1から自動で書き出す)
client3,1000,Apr
client4,1000,Apr

【自分で分かっていること】
・他のシートから位置指定で情報を取ることは知っています
・SUMIFやSUMPRODUCTは知っています
・ただし、配列で取ってくる方法が分かりません

これをExcelの関数だけで解決させたいのですが、どうしたらよいでしょうか。
すみません、どなたか教えてください!

●質問者: danielocean
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:Excel JAN すみません イメージ 自動
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● castiron
●35ポイント

シート分岐

シート分岐をダウンロードしてください。

{=IF($A$2<=B2+1,"",

IF(IF(ISERROR(MATCH("client1",LEFT(INDIRECT(ADDRESS(1+B2,1,,,"Sheet1")&":"&ADDRESS($A$2,1)),7),0)),$A$2+1

,MATCH("client1",LEFT(INDIRECT(ADDRESS(1+B2,1,,,"Sheet1")&":"&ADDRESS($A$2,1)),7),0))

<IF(ISERROR(MATCH("client2",LEFT(INDIRECT(ADDRESS(1+B2,1,,,"Sheet1")&":"&ADDRESS($A$2,1)),7),0)),$A$2+1</p>

,MATCH("client2",LEFT(INDIRECT(ADDRESS(1+B2,1,,,"Sheet1")&":"&ADDRESS($A$2,1)),7),0))

,MATCH("client1",LEFT(INDIRECT(ADDRESS(1+B2,1,,,"Sheet1")&":"&ADDRESS($A$2,1)),7),0)

,MATCH("client2",LEFT(INDIRECT(ADDRESS(1+B2,1,,,"Sheet1")&":"&ADDRESS($A$2,1)),7),0)))}

※一つの式ですw(やろうと思えば隣にあるセルの値を式の中にあるので式に組み込んでしまえば省略できます。もっと長くなります)

配列はCtrl+Shift+Enterを押して関数を決定します。(これをやらないと#VALUEになると思います)

結論として出来ないことはありません。見ただけでかなり強引なことをしているのが分かると思います。

(私のマシンはかなり高性能なのでもしかしたらデータの量とかによってはフリーズするかもしれません。)

けれどもVBを使ってマクロを書けばかなり簡単にできます。

For文を使って、あとは文字列比較をするだけです。

そっちを知りたいなら別途質問してい見ると良いでしょう。(完璧な物を教えてくれるはずです)

ちなみに抽出条件別に列を分けるのならばもう少し簡略化することは可能です。

たぶん、#N/Aとかデータを増やすと成るかもしれませんが、質問者さんががんばってどうにかしてください。もう疲れました・・・

(一番先頭のIF関数がいらなくてその次にあるIF関数の出力の真の場合、偽の場合の出力にそれぞれIF関数を追加してISERROR関数でチェックすればよい)

◎質問者からの返答

私の脳内ではSUMPRODUCTが限界でしたw

「配列で突っ込む」+「条件分岐」ができればOKだと思っているのですが、どうしましょうねw

これだとさすがに長すぎて、他の人に引き継ぐには長いですね・・・。

でも意味はよくわかりました!有難うございます、参考にさせていただきます。


2 ● kaiton
●35ポイント

いろいろな方法があると思いますが一案と言うことで..

  1. 元データが A1:C4 にあるものとします。
  2. Sheet1に作業列を4列(E:H)作ります。(別シートでもOK)
  3. この例で条件分岐はB列が2000以上・未満で分岐したと課程
E1 =IF(B1>=2000,ROW(),"")
F1 =IF(COUNT($E$1:$E$4)>=ROW(),SMALL($E$1:$E$4,ROW()),"")
G1 =IF(B1<2000,ROW(),"")
H1 =IF(COUNT($G$1:$G$4)>=ROW(),SMALL($G$1:$G$4,ROW()),"")

これらを下にコピー

Sheet2!A1 =IF(Sheet1!$F1<>"",INDEX(Sheet1!A$1:A$4,Sheet1!$F1,1),"")
Sheet3!A1 =IF(Sheet1!$H1<>"",INDEX(Sheet1!A$1:A$4,Sheet1!$H1,1),"")

これらを横3列、縦4行にコピー


条件が違うならE,G列を修正してください。


PS.

条件は、単純に3行目より下か上かではないんですよね?

◎質問者からの返答

回答ありがとうございます。はい、どちらかというと季節を四半期ごとに分けたいというイメージです。

まだよく理解できてません。すみません。後で試してみます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ