[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『空白セルを自動的に詰める関数は?』(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等の空白セルが数式で空白になっていないのであれば、 編集>ジャンプ>セル選択>空白セルと進み 編集>削除>左方向にシフトで左に詰めるだけならできますけど。。。
(川野鮎太郎)
編集、置換で、 ,""を ,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)
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)
ご親切な説明、有難うございます。
お陰様で上手くいきました。~~~~~がアンダーライン代わりに記されていたのを勘違いしていました。
ちなみに式にある「/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)
度々のご回答、恐れ入ります。
明快なご説明、よく理解できました。縦方向の応用や名前の上に役職を付け、3行一組でも行えました。
これにて、今回の質問は終了させて頂きます。
また、私と同じような疑問をお持ちの他の方が、ここを閲覧され、HANA様のご解説を参考にされることを願っております。
この度は誠に有難うございました。
(Tacticsことてんてん)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.