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

EXCELについての質問です。
VBAを使わずに解決したいです。
A列には日付が1000行入っており今後も3000行ぐらいまで増えていきます。
B列には金額が入っており1行おきから3行おきとランダムです。今後もランダムに入力されます。

B列の空白になっている行を削除して別シートで月ごとに1年分集計したいのですが
あらかじめセルに関数を埋め込んでおいて入力するだけで集計することはできないでしょうか?

よろしくお願いします。

●質問者: breakthrough1
●カテゴリ:コンピュータ
✍キーワード:Excel VBA セル ランダム 入力
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● spyglass
●20ポイント

他の方から回答が出れば私はポイント不要です。

結論から言うとVBA以外(シート関数だけ)では無理です。


なぜならシート関数は計算や検索する関数はあるのですが

B列の文字がなければ行間を詰める、という動的な関数はありません。

しかも今後もランダムに入力される、とういう条件なので計算式で予知する事も難しいと思われます。


かろうじて、オートフィルタからB列に対して「空白以外のセル」を指定すれば空欄を詰めて集計らしき表を表示する事は可能です。

この場合は別シートではなくデータシートページその物になりますが。


それとExcelの場合はバージョンを書かれた方が良いかも知れませんね。

バージョンが違うと関数が変わってきますので。

ご参考までに。

◎質問者からの返答

ありがとうございます。

バージョンはEXCEL2007を使っています。


2 ● たか
●20ポイント

空白行の削除

フィルタを掛け、B列の空白のみを表示します。

空白行を選択し右クリック、「行の削除」を行えば空白行のみ削除できます。

「行の削除」でなく「削除」にならないように注意が必要です。

「削除」だとフィルタで隠れている金額有りの部分も削除してしまいます。



集計

DSUMを使えば月毎集計は関数で可能です。

http://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/dsum.htm

◎質問者からの返答

ありがとうございます

DSUMで日ごとに集計していくとだいぶイメージに近いです


3 ● Mook
●20ポイント

パフォーマンスは保証できませんが、

Sheet2 の A1 に

=IF(COUNTA(Sheet1!$B$1:$B$3000)<ROW(A1),"",INDEX(Sheet1!A$1:A$3000,SMALL(IF(Sheet1!$B$1:$B$3000<>"",ROW($A$1:$A$3000),""),ROW(A1))))

と入力して、Ctl+Shift+Enter を押します。(うまくいけば前後に{ } が表示されます。)

これをA1:B3000 にコピーし、A列の書式を日付に、B列の書式を数値にします。


これでSheet1 にデータを入れていったら、B列があるものだけが表示されると思いますが、

どうでしょうか。


3000 は実際の運用の上限に合わせて変更してください。

◎質問者からの返答

ありがとうございます

日付は出るのですが・・・

もうすこし試してみます


4 ● Lhankor_Mhy
●50ポイント ベストアンサー

力技ですのであまりオススメできませんが、ここではC,D列を作業列にしてE,F列に表示させています。

A B C D E F
4/1 3000 =IF(B1>0,1,0) =MATCH(1,$C$1:$C$8,0) =INDIRECT(ADDRESS(D1,1)) =INDIRECT(ADDRESS(D1,2))
4/2 =IF(B2>0,1,0) =MATCH(1,OFFSET($C$1:$C$8,D1,0),0)+D1 =INDIRECT(ADDRESS(D2,1)) =INDIRECT(ADDRESS(D2,2))
4/2 2000 =IF(B3>0,1,0) =MATCH(1,OFFSET($C$1:$C$8,D2,0),0)+D2 =INDIRECT(ADDRESS(D3,1)) =INDIRECT(ADDRESS(D3,2))
4/2 1000 =IF(B4>0,1,0) =MATCH(1,OFFSET($C$1:$C$8,D3,0),0)+D3 =INDIRECT(ADDRESS(D4,1)) =INDIRECT(ADDRESS(D4,2))
4/5 =IF(B5>0,1,0) =MATCH(1,OFFSET($C$1:$C$8,D4,0),0)+D4 =INDIRECT(ADDRESS(D5,1)) =INDIRECT(ADDRESS(D5,2))
4/5 =IF(B6>0,1,0) =MATCH(1,OFFSET($C$1:$C$8,D5,0),0)+D5 =INDIRECT(ADDRESS(D6,1)) =INDIRECT(ADDRESS(D6,2))
4/6 =IF(B7>0,1,0) =MATCH(1,OFFSET($C$1:$C$8,D6,0),0)+D6 =INDIRECT(ADDRESS(D7,1)) =INDIRECT(ADDRESS(D7,2))
4/7 5000 =IF(B8>0,1,0) =MATCH(1,OFFSET($C$1:$C$8,D7,0),0)+D7 =INDIRECT(ADDRESS(D8,1)) =INDIRECT(ADDRESS(D8,2))

余った行にエラー値#N/Aがでます。必要に応じてiserrorなどで回避して下さい。

◎質問者からの返答

出来ました ありがとうございます

ちなみにお勧めできない理由を教えていただけないでしょうか

関連質問


●質問をもっと探す●



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