Excel2000で、下記のように項目毎に日付が入っている表を、


  | A  B  C
----+-----------------
11/1|11/1 11/1
11/2|11/2    11/2
11/3|   11/3

 ↓

 A  B  C
-----------------
11/1 11/1 11/2
11/2 11/3

のようにまとめるのを「マクロを使わずに」行うことは出来るでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:nankichi No.1

回答回数562ベストアンサー獲得回数2

ポイント2pt

http://www.shuiren.org/chuden/teach/hidemaru/seiki/index-j.html

秀丸エディタを使いこなす ―正規表現―インデックス――

まず、やりたいことがわかりません。

A-C列に日付をあるルールにのっとってならべたいのか?

一番よくわからないのが、要素の数が変わっている点。もと3つある日付データが二つになっているので。。。。

単に空白をつめるのなら、excelでやるより秀丸等エディタでやった方が効果的です。

excelからカット&ペーストすると、セルの区切りはtabになるので、

¥t¥t

を¥t

に置換する、などします。

id:stealthinu

Aは11/1と11/2に存在

Bは11/1と11/3に存在

Cは11/2のみに存在

という具合に、項目毎に記入していったものを、違うシートなどでまとめて表示させたいのです。

実際にはもっと多数の項目と、年間を通した日付になります。

わかりにくい書き方ですみません。

2004/11/18 18:05:08
id:taknt No.2

回答回数13539ベストアンサー獲得回数1198

ポイント3pt

マクロを使わない場合は、手動で行うしかないですね。

上の表で、Bの2行目(11/1の下)のセルを削除します。

削除時、上方向にシフトとします。

次に Cの1行目も同様な処理を行います。

それを空白のセルの個所、全部 行えば、下記の表になるでしょう。

id:stealthinu

結局空白のセルを消して上に詰める、ことをマクロや手動ではなく、自動でできないか、ということになります。

2004/11/18 18:06:30
id:taknt No.3

回答回数13539ベストアンサー獲得回数1198

ポイント15pt

http://arena.nikkeibp.co.jp/tec/excel/20040309/107640/

空白行だけを一気に削除 - デジタル - 日経トレンディネット

空白セルを一括で選択する方法がありました。

まず、範囲を指定します。

次に

編集、ジャンプ

セル選択で

空白セルをクリックして OKとします。

これで、空白セルだけが選択されますので、

この状態で

右クリックして 削除、上方向にで いいでしょう。

id:stealthinu

この操作でほとんどOKです。

一番良いのは、自動的に他のシートにこの状態が作られる、というのですがさすがにそれは無理っぽいですね。

2004/11/18 18:23:25
id:sandaler No.4

回答回数671ベストアンサー獲得回数0

ポイント10pt

URLはダミーです。

オートフィルタで「空白以外のセル」を選択して1列ずつコピペしてください。

不細工でおすすめしませんが、手動よりははるかに早いでしょう。

id:stealthinu

オートフィルタも惜しいです。

各行をそれぞれ空白以外のセルを選択してくれれば良いのに…

2004/11/18 18:28:02
id:SigZ No.5

回答回数29ベストアンサー獲得回数0

ポイント50pt

Small関数を使えばできます。

元データの表を表1、集計する表を表2とし、単純化するために項目Aについてのみ解説します。

表1の項目Aの日付が入力された範囲を B2:B31であると仮定すると、表2の先頭にはB2:B31の間に入力されている1番小さい値を参照できればいいわけですから

=small(B2:B31, 1)

という式になります。同様に表2の2番目には

=small(B2:B31, 2)

です。

これを単純に続けていけばいいのですが、=Small(B2:B31, n)の n にあたる数値を手入力するのは面倒です。このようなときはRow関数を応用します。

たとえば表2の先頭セル番地が A2 だったとすると、=Row()でそのセルが何行目かを取得できますから

=small(B2:B31, Row()-1)

とすれば、データ順位を手入力する必要がありません。

ただし、このままでは=Small(B2:B31,Row()-1)の値が取得できなかったときにエラーになります。これを回避するために If関数とIsError関数でエラー処理をします。

=If(IsError(Small(B2:B31, Row()-1))=True, ””, Small(B2:B31, Row()-1))

でほぼ期待通りの結果が得られると思います。

式をコピーするときは、表1の参照範囲 B2:B31 がずれないように範囲名をつけておくか、$B$2:$B$31 などのように絶対番地にしておくことをお忘れなく。

id:stealthinu

これでやりたいと思っていたことが完全に出来ました。

ありがとうございます!

2004/11/18 19:13:00

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません