[[20100206142020]] 『空白セルを自動的に詰める関数は?』(Tactics) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『空白セルを自動的に詰める関数は?』(Tactics)

Excel初心者です。空白のセルを詰めたいのですが・・・
次のようにしたいのですが書籍やネット等で調べたのですが、よく解らないのでどなたかご教示お願いします。

OS WinXP Excel2007使用です。

Seet1で簡単な関数を作り、データを集計したのですが、関係のない文字や数字が入っているので、
このデータをSeet2のA:Fに整理して奇数行に名前、偶数行に数値を表示させ、下記の様に自動的に空白のセルを詰めたいのです。

Seet1のデータをSeet2に整理して表示したとします。

     A      B      C     D     E      F
 1  山田   田中   橋本        山田  山本
 2   5      2      8           5      6
 3         木村   北野  橋本        木村
 4     4      6     6            3
〜〜〜〜〜〜〜〜 以下略 〜〜〜〜〜〜〜〜〜

空白はランダムに入っています。
A1の山田はA1=Sheet1!D2 B2の5はA2=Seet!D3、E2の山田はSeet!1=F6、E3の5はSeet1!=F7、というように同じ名前や数値でも
Seet1の別々のセルを参照しています。

上記をこの様に

     A      B      C     D     E      F
 1  山田   田中   橋本  山田 山本  木村
 2   5      2      8     5     6      4
 3  北野  橋本    木村
 4   6      6      3

私の質問の仕方に不備がありましたらご指摘いただき、お解りになる方ご教示お願いします。


 えっと、回答が付かないのもなんなので、、、
 一般関数や標準機能ではそのようなものはないと思いますよ。
 D1,D2 A3,A4等の空白セルが数式で空白になっていないのであれば、
 編集>ジャンプ>セル選択>空白セルと進み
 編集>削除>左方向にシフトで左に詰めるだけならできますけど。。。

 (川野鮎太郎)


川野鮎太郎様
ご回答有難うございます。
質問内容に不足がありましたので補足いたします。
空白の部分にはSeet1の参照が空白の場合、"0"を表記させないため、Seet2の空白セルには例えば、D1に「=IF(Seet1!C9="", "",Seet1C9)」と入れています。
よく見かける技の 編集>ジャンプ>セル選択>空白セル〜ではそれが出来ないのです。
やはり、マクロでないと無理なのでしょうか?

 編集、置換で、 ,""を ,FALSE に置き換えてから
 編集、ジャンプ、セル選択で数式の論理値とされたらいかがでしょう? (PENSIONER)

 マクロを使えば出来るとは思いますが
 それよりも、こんな事に成らないように
 データ入力方法を見直すのが良いと思います。

 「以下略」と書いてありますが、略されて居なくて
 Sheet1のA1:F4セルにデータが有るとして

 B3セルの木村さんが、F1セルの位置に移動するのは
 データの入力が
  A1:B2の2行で一つの表。A3:B4の2行で一つの表。
【ではなく】
  A1:A4の2行を一組とした、一つの表。
  (一つの表が2段に成っている)
 からだと思います。

 これだと、エクセルに
  F1:F2の続きは、A3:A4に入っているからね
 と誰かが教えてあげる必要が有ります。

 これが、F列で行(段)を変えるのではなく
 G列以降に続けてデータが有れば
  ○○の続きは・・・
 なんて教える必要が無くなります。

 すると、「前に詰める」と言う指示を
 エクセルに出すだけで良くなります。

 もしも6列で段を変えたいなら
 この段階(エクセルに処理をさせる最後の段階)で
 やるのが良いと思います。

	[A]	[B]	[C]	[D]	[E]	[F]	[G]	[H]	[I]	[J]	[K]	[L]
[1]	山田	田中	橋本		山田	山本		木村	北野	橋本		木村	
[2]	5	2	8		5	6		4	6	6		3	
[3]	1	2	3		4	5		6	7	8		9	★
[4]	↑作業行							★3行目に作業行を作成					
[5]	↓Sheet2	を想定						 A3セルに=IF(A1="","",COUNT($A$2:A2))					
[6]	山田	田中	橋本	山田	山本	木村		 として、必要列までフィルドラッグ					
[7]	5	2	8	5	6	4							
[8]	北野	橋本	木村										
[9]	6	6	3										
[10]													
 A6
=IF(COUNT($3:$3)<((INT(ROW(A2)/2)-1)*6+COLUMN(A1)),"",INDEX($1:$1,MATCH((INT(ROW(A2)/2)-1)*6+COLUMN(A1),$3:$3,0)))
 A7 ↑の式を下にフィルドラッグして、INDEX関数の最初の引数  ~~~~~を $2:$2 に変更。

 A6:A7セルをF列までフィルドラッグして
 A6:A7セルを必要行フィルドラッグ。

 人の都合(F列あたりで折り返して有ると表が見やすい)
 でデータの配置などを行うと
 エクセルに何かやらせようと思ったときに
 大変な苦労を伴う場合が有ると思います。

 (HANA)

HANA様
ご回答有難うございます。
ご指示の通りやってみました。
A7 ↑の式を下にフィルドラッグして、INDEX関数の最初の引数 ~~~~~を $2:$2 に変更。 とありますが、A7セルにフィルドラッグして〜*6+COLUMN(A1)),"",INDEX($1:$1,MATCH〜の""を$2:$2 に変更するのでしょうか?〜*6+COLUMN(A1)),$2:$2,INDEX($1:$1,MATCH〜に変更したのですが、上手くいきません。何か私のやり方が間違っているのでしょうか?よろしければご回答お願いいたします。
尚、私の質問で"Seet"とありましたが、"Sheet"の誤りです。
(てんてん)←ニックネーム忘れていました。重ね重ね失礼しました。

 同じデータ・同じ配置 でやってみてもらってますか?
 まずは環境を同じにしてやってみて下さい。
 (因みに、3行目の最後の ★ は要りませんので。。。)

 そして、どの様に上手く行かないか教えて下さい。
  何も表示されない
  エラーが出る
  なんだか分からない値が出る
  その他?

 A6セルの式を下にフィルドラッグすると
=IF(COUNT($3:$3)<((INT(ROW(A3)/2)-1)*6+COLUMN(A2)),"",INDEX($1:$1,MATCH((INT(ROW(A3)/2)-1)*6+COLUMN(A2),$3:$3,0)))
 こんな式になりますので、「$1:$1」を「$2:$2」に変更です。   ~~~~~
=IF(COUNT($3:$3)<((INT(ROW(A3)/2)-1)*6+COLUMN(A2)),"",INDEX($2:$2,MATCH((INT(ROW(A3)/2)-1)*6+COLUMN(A2),$3:$3,0)))
 ↑これをA7セルに貼り付けて下さい。

 (HANA)


HANA様

ご親切な説明、有難うございます。

お陰様で上手くいきました。~~~~~がアンダーライン代わりに記されていたのを勘違いしていました。

ちなみに式にある「/2」は2行一組で扱うためのものでしょうか?
また「*6」は6列で扱うためのものでしょうか?


 そうなります。

 どこかのセルに
=INT(ROW(A2)/2)
 の式を入れて4×6の範囲にフィルドラッグ。

 さらに
=先ほどのセル-1
 をフィルドラッグ。

 さらに
=先ほどのセル*6
 ・・・
 さらに
=先ほどのセル+COLUMN(A1)
 ・・・

 して、戻り値を確認してみてください。

 実際のデータも  2行×6列にしていくなら
 まず、Sheet2を想定して数式を入れた範囲を切り取り
 Sheet2の 実際に配置したい場所に貼付け。
 数式をみると、セルの参照がSheet1に為っているので
 ROW関数とCOLUMN関数は、自分のシートの同じ位置のセルを
 参照するように変更してください。
 その後、Sheet1に戻り  行・列の挿入を行って
 こちらも実際の配置に合わせます。
 Sheet1のシート名を実際のものに変更して
 Sheet2の数式を見てもらえると
 実際のシートに合った数式が出来ていると思います。

 Sheet1の表を縦方向にしたい場合は
 応用してみてください。

 (HANA)

HANA様

度々のご回答、恐れ入ります。

明快なご説明、よく理解できました。縦方向の応用や名前の上に役職を付け、3行一組でも行えました。

これにて、今回の質問は終了させて頂きます。

また、私と同じような疑問をお持ちの他の方が、ここを閲覧され、HANA様のご解説を参考にされることを願っております。

この度は誠に有難うございました。

(Tacticsことてんてん)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.