• ベストアンサー

空白セルを詰めたい

皆さん宜しくお願いしますm(_ _)m。次のような事をスマートに実現できるような方法を探しています。良い方法をご存じの方、お知恵をお貸し下さい。 【ExcelWorkSheet】     A       B      C  1  2 第1項目  第1項目  第1項目  3 第2項目          第3項目  4 第3項目  第3項目  第4項目  5 第4項目  第4項目  第6項目  6 第5項目  7 第6項目  第6項目 1.まずA列が開始データで、これは不動とします。 2.次にB列へ情報を条件付きで転記します。例えば=IF(条件,"",A2)ですね。 3.これをC列の様に、空白を詰めて表示したいのです。  2.の段階の条件は多様で、他の項目が空白になることもあり得ます。どの項目が空白になっても、結果としてC列には隙間無く詰まった状態にしたいのです。項目が数字の場合は割と簡単に実現するのですが、上記の様に文字列だと困ります(^^;)。  B列の第1項目~第6項目を一度1文に繋いで、それをC列の各セルに分解するという(^^;)強引な方法は思いついたのですが、もっとスマートな方法で実現させたいのです。  宜しくお願いしますm(_ _)m。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.7

#3、#6で回答した者です。 何度もすみません。(回答者の皆様にもご迷惑おかけします。) 2行目からでしたね。 C2セル =IF(B2="","",ROW()) D2セル =IF(ISERROR(SMALL($C$2:$C$7,ROW()-1)),"",OFFSET($A$2,SMALL($C$2:$C$7,ROW()-1)-2,0)) にして下さい。 B列の条件式で、=IF(条件,"",A2)と入力してあるのを =IF(条件,"",ROW())とすれば C2セルに上記D2セル($C→$Bに変更)を入れて、 3列で出来るのではないかと思います。

OKWeb-O
質問者

お礼

3列で実現ですね(^^)。更に華麗な話に(笑)。頑張ってマスターします、より完璧なお答えをありがとうございましたm(_ _)m。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (7)

  • happypoint
  • ベストアンサー率36% (521/1422)
回答No.8

こんにちは。 OKWeb-Oさんが目指しているのは、入力規則でドロップダウンリスト(一般的にいうコンボボックス)がせっていしてあり、リストの内容を動的に変化させたい、ということではないのでしょうか? 入力規則機能を使うより、VBAのユーザーフォームを勉強されてみてはいかがでしょうか? 条件によって変化するコンボボックスなど、ある程度動的な処理も可能ですよ。

OKWeb-O
質問者

お礼

ありがとうございます(^^)。僕の説明が出来ていなかったのですが、VBAは配布時に問題が出るので採用出来ないという制約があったのです。Excelの基本機能だけでなんとかしないといけないので大変です(笑)。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.6

#3で回答した者です。 #5さんの回答を見て私の方法も間違っている事に気が付きました。 (条件式も*で拾ってしまいました) 急いで考えたので大丈夫か少し心配ですが、こちらを試してみてください。 (1)C列にB列が[""]以外ならば行番号-1を表示する   C1セル =IF(B1="","",ROW()-1)   C2セル以降C1セルをコピー (2)D列にC列の小さい番号から順に表示する   D1セル =IF(ISERROR(SMALL($C$1:$C$6,ROW())),"",OFFSET($A$1,SMALL($C$1:$C$6,ROW()),0))   D2セル以降D1セルをコピー でどうでしょうか?(他にも書き方があると思いますが、思い付きませんでした。) こちらも間違えていたらすみません。

OKWeb-O
質問者

お礼

うおぉ、今度はROW関数が(^^;)。やはり普段使わない関数も、動作をモノにしておく必要がありますね。しかも今回のはエラーが表面化しない分、綺麗です。やはり日数が経過して構成を忘れると、エラー表示が心配になってしまう物ですから。折角機会に恵まれたので、前回の動作もマスターします(^^)。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.5

ごめんなさーい。m(_ _)m B列は、条件式で入ってるんですよね。 No4の方法では、A列も並び替わってしまいます。 よく読んでなかったことに反省。。。 No3の方法でできると思います。

OKWeb-O
質問者

お礼

ありがとうございます(^^)、僕の質問文が判りにくいというのが大きな問題だったと思います(笑)。お手数おかけしてスミマセンでした。嬉しかったです(^^)。

全文を見る
すると、全ての回答が全文表示されます。
回答No.4

次の通りに行ってください。 (1)B列を選択する。 (2)上のバーの中の[データ]の中の[並び替え]を選択する。 (3)[並び替えの前に]のウィドウの中から、  [現在選択されている範囲を並び替える]を選択し、  [並び替え]ボタンを押す。 (4)[並び替え]のウィンドウがでるので、  [OK]ボタンを押す。 以上でできます。

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

1行、使用してもよければ、 (1)C列にB列で空白でない行番号をセットする   C1セル =MATCH("*",$B$1:$B$7,0)   C2セル =MATCH("*",OFFSET($B$1,C1,0):$B$7,0)+C1   C3以降はC2をコピーする (2)D列にC列の行番号を使用しB列のデータを表示する   D1セル =IF(ISNA(C1),"",OFFSET($B$1,C1-1,0))   D2以降はD1をコピーする (3)C列を非表示にする でどうでしょうか? おかしな所やわからない所があれば補足してください。

OKWeb-O
質問者

お礼

ありがとうございます(^^)。MATCH関数もOFFSET関数も使った事のない僕にとって、これは新鮮でした(^^ゞ。今、セルに教えて頂いた構成を再現して上手く動作する事を確認、目下ヘルプ等でアルゴリズムを解析中です。これは華麗な方法です、ありがとうございました(^^)!

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

VBAになりますが、指定範囲内で、行を保存しつつ、左詰するには、一例として Sub test01() Dim c As Range cl = Selection.Columns.Count For Each c In Selection If c.Value = "" Then i = c.Row j = c.Column For k = j + 1 To cl If Cells(i, k) <> "" Then c = Cells(i, k) Cells(i, k) = "" Exit For End If Next k End If Next End Sub 少数例でテスト済み。 A列を特別に空白でも詰めないならB列より右列を範囲指定してください。 ------ 但し#1お礼の「最後のC列を入力規制で「項目可変式プルダウン」化しています(^^ゞ。なので、削除等の編集行為を行わずに自動的に変化させる事が大きな目標なんです。」の意味を充分理解できませんが、VBA以外で、まず関数式その他では無理でしょう。 ------ エクセルは一般的にやり方は(1)操作(2)関数式(3)ウイザードやAddInソフト(4)VBA(5)データベース機能の参照(6)条件付書式などありますが、関数式では、自分自信のセルの値を聞く=IF()関数など入れると、自分の値が壊れるので、無理でしょうし、ネストもやたら深くなるでしょう。関数式を入れた自分以外のセルへ値を送りこむことが関数式では出来ませんから。

OKWeb-O
質問者

お礼

ありがとうございました(^^)。VBAについては考慮できないという前提があったのを書き忘れていました、スミマセン。でも、凄く参考になりました。VBAが許されたら、こちらにしてみたいと思います(^^)。

全文を見る
すると、全ての回答が全文表示されます。
  • jun9031
  • ベストアンサー率42% (51/120)
回答No.1

C列にオートフィルで「空白」をかけて、 その行をすべて削除すれば間隔はうまりますよ。 こんなんではどうでしょ? 一番単純かとおもいますが・・・。

OKWeb-O
質問者

お礼

早速のお答えありがとうございます(^^)。言葉が不足していましたが、最後のC列を入力規制で「項目可変式プルダウン」化しています(^^ゞ。なので、削除等の編集行為を行わずに自動的に変化させる事が大きな目標なんです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ピボットテーブルで空白セルの数を集計したい

    以下のように、セルに入る数が1か空白の表を、ピボットテーブルを用いて集計しています。 [A列] [B列] Aさん 1 Bさん 1 Cさん Aさん 1 Bさん このとき、ピボットテーブルには自動的に「(空白)」という項目が出てきますが、     1 (空白) Aさん 2 Bさん 1 Cさん このようになり、空白セルの数を数えてくれません。ここでいうと、BさんとCさんの(空白)の列にそれぞれ「1」が入るようにしたいのですが、 このようにする設定は可能でしょうか? excel2003を使用しています。よろしくお願いいたします。

  • 空白セルをとばして転記

       A   B   C   D   E 1 リンゴ        リンゴ   2              ミカン   3 ミカン        バナナ  4 5 6 バナナ 7 上記のように、空白のセルをとばして(詰めて)転記するにはどうすれば良いでしょうか? Dim n as long Dim k as long k = Range("A" & Rows.Count).End(xlUp).Row For n = 1 To k If Cells(n, 1) <> "" Then Cells(n, 4) = Cells(n, 1) n = n + 1 End If Next n とやると当然ながらD1のセルのみにしか転記できません A列の範囲を取得し、PasteSpecialのSkipBlanksで貼り付けてもうまくいきませんでした どうぞよろしくお願いします

  • 空白セルを飛ばしてデータをまとめるには

    A列に 1 きゅうり 2 3 なす 4 5 6 7 かぼちゃ 8 9 10 11 トマト 12  :  : と入力されています。 これを、B列に空白を飛ばして 1 きゅうり 2 なす 3 かぼちゃ 4 トマト  :  : と持って来たいのですが、うまい方法はないでしょうか。 ただ、この空白セルは本当の空白ではなく、A列は =if(参照先が300円以下のもの,その野菜のなまえ,"") というような""が入っている状態です。

  • A列が空白なら、計算式の入っているB.C・・~列も空白で表示する方法。

    A列に対して、B.C・・~列にそれぞれ違った式が入っています。 A列が空白だと、B列#N/A、C列1 ・・・と、それぞれ答えが返ってきます。 今までは、各B、C・・列に「A列が空白の場合は表示しない」設定を「条件付書式」を使ったり「IF(ISERROR・・」の関数を使ったり 無い知恵と知識を振り絞って悪戦苦闘の末、1列1列・・こつこつ設定していたのですが 「もっと簡単な方法があるのでは??」と都合のいいことを考えました。 しかし、恥ずかしながら私には知識が無いもので、そんな事が出来るのか、また仮に出来るとしても方法がわかりません。 関数でも、条件付書式でも、何でもかまいません。 指定したセルが空白の場合、そのセルに対して数式が入っている他の複数セルにも何も表示しないように一発で出来るようにするには、 どうすればいいのか教えて頂けませんか? 98です。出来るだけ簡単な方法がありがたいです。 余談なのかもしれませんが、B列にはVLOOKUPの関数、C列には「A列内の数字+1」と言う式が入っています。 C列はA列に0と入力しても、空白でも1という答えが返ってきてしまいます。そこでA列が空白の場合答えが表示されないようにしたいのです。) 宜しくお願いします。

  • 空白セルの記述方法

    Excel VBAで日付データがA列、通貨データがB列にあるとして シート1のセル(A:1)、セル(B:2)が空白セルとして条件式を作りたいのですが記述方法はどのようになりますか? 下記でよろしいでしょうか? If CDate(sheet1.cell(A:1).value) = Empty then If CCur(sheet1.cell(B:1).value) = Empty then

  • 空白セルを作りたい

    お世話になっています。 A1+A2+A3の合計をB1に表示させるとします。 A1、A2、A3には、それぞれ数字が入る場合も、未入力(空白)の場合もあります。 1、A1空白、A2空白、A3空白の場合、B1に空白。 2、A1空白、A2 数字、A3空白の場合、B1はA2の数字(空白を除いて足し算した値を返す)の式を作りたいと思い、B1に =IF(A1="","",IF(A2="","",IF(A3="","",SUM(A1+A2+A3))))としましたが、1はできますが、2ができません。A1、A2、A3どれかひとつでも空白セルがあると、B2は空白で帰ってきてしまいます。 足し算した値を返してもらうにはどうすればよいでしょうか。 関数のご指導お願いいたします。

  • エクセルで複数条件のセルの数を数えるには?

    条件(1) 1行目項目がAかBかC 条件(2) 条件(1)の列が空白ではない 条件(3) A列の空白でないセルの数を数えたいのですが、 SUMPRODUCTなどを使っても条件(2)までの数しか出せないのです。 どうぞ宜しくお願いします。

  • Excelで特定の列の空白を埋める方法

    エクセルで次のようなことは可能でしょうか? 昨日も同じような質問をいたしましたが、よろしくお願いします。 A列に次のように入力されているとします。 (昨日、質問で文字列にa,b,cを付け加える方法を教えていただきましたが、以下のものは一つずつ入力してあるとします。) 001a 001b 空白 空白 002a 空白 空白 空白 003a 空白 空白 ここの空白を 001a 001b 空白 → 001c 空白 → 001d 002a 空白 → 002b 空白 → 002c 空白 → 002d 003a 空白 → 003b 空白 → 003c とする方法はないでしょうか?(千行くらいを自動的に) あとこれに関連して別の質問ですが、 ある列の001a, 001bなどのアルファベットのみ削除(はずす)して 001,002だけの数字にする方法も教えていただけないでしょうか? よろしくお願いします。

  • エクセルで空白に自動で文字を入れる

    お世話になります。 現在、学校で成績の一覧表をエクセルで作っています。 成績は3段階で、A、B、Cでつけます。 最初に、各項目について、AとCだけを入力し、これを個人個人の成績表に転記します。 最後に、空欄の部分に、全部Bを入れないといけません。 ドロップダウンリストを作ることも考えたのですが、(これはなんとかできます)、それよりも速く、一発でBを入れるような方法は無いでしょうか? if関数などを使って、(もし空白の欄があったら、Bを入れる)みたいな設定にすればいいのかなとか、勝手に思っていますが、if関数については全然分かりません。 よろしくお願いします。

  • 空白と空白じゃないセルを判断するには?

    いつもお世話になっております。 条件により別のセルへ文字列を入力するという物を組みたいのですが、あてはめるべき表現の仕方がわからなくて困っております。 例で申しますと、 D列とE列に文字列が入っていたり空白だったりするセルが存在します。 条件は 「D列に何かしらの文字列が入っていて(特に決まった形が無い)、E列は空白の時だけ、F列へ「■」と入力し、G列は空白とする。」 「それ以外の条件はすべて、F列は空白、G列には「□」と入力する」 と、いうようにしたいのですが、空白は Dim i As Long For i = 3 To Range("B65536").End(xlUp).Row If Range("D" & i).Value = "" Then のように表現すればよいのかと思ったのですが、 「空白ではない」場合の条件をどのようにすればよいのかわかりません。(その為、全文を作る段階へ進めておりません。)   |D|E|F|G 1|あ| |■| 2|あ|え| |□ 3| |か| |□ 4| | | |□ 「空白ではない」と判断するコードの書き方をお教えいただきたく、よろしくお願いいたします。 環境はWindowsXP、Excel2003です。

専門家に質問してみよう