プロが教えるわが家の防犯対策術!

エクセルで表を作成しました。
B2=IF(B8="",B7,"")
B3=IF(B8="★",B9,"")
B4=IF(B8="★",B10,"")
と入力しております。

これを、空白の列を削除して左に詰めたいのですがマクロなど検索してみましたが
関数が既に入力されている場合はできないようです。
また、検索から空白のセルなどもやってみましたが関数のためできないようです。
上記の関数に何をつければ、一発で表示できますでしょうか?

最終表示は→の右側状態にしたいです。

また行を削除でなく列を削除ということでなおさらわからなくなりました。
別シートまたは違うセルに表示させる方法でない関数を教えて頂けるとありがたいです。



お手数をおかけしますがどなたか知恵をおかしください。

「エクセル関数 空白(関数あり)の列を削除」の質問画像

質問者からの補足コメント

  • 申し訳ありません。ご指摘があったとおり
    B2=IF(B8="",B7,"")
    B3=IF(B8="★","",B9)
    B4=IF(B8="★","",B10)
    です。
    すみませんでした。

      補足日時:2017/12/06 15:48

A 回答 (6件)

#4です。



式に無駄がありました。恥ずかしながら修正しておきます。
B2に
=IFERROR(INDEX($A$7:$G$10,ROW()-IF(ROW()>2,0,1),SMALL(IF($B$8:$G$8="",COLUMN($B$8:$G$8)),COLUMN(A1))),"")

配列数式であることは変わりません。
    • good
    • 1
この回答へのお礼

わざわざ修正をありがとうございます。
今回、関数動きました!!

ありがとうございます。

お礼日時:2017/12/07 15:31

こんばんは!



>行を削除でなく列を削除ということで・・・

画像の配置だと、「★」の列も削除されますが、それでも良いのでしょうか?
VBAになりますが一例です。

Sub Sample1()
Dim j As Long, myRng As Range
For j = 2 To Cells(2, Columns.Count).End(xlToLeft).Column
If Cells(2, j) = "" Then
If myRng Is Nothing Then
Set myRng = Cells(2, j)
Else
Set myRng = Union(myRng, Cells(2, j))
End If
End If
Next j
If Not myRng Is Nothing Then
myRng.EntireColumn.Select '//★//
End If
End Sub

※ とりあえず「選択」でやめています。
削除してよいのであれば「★」の行を
myRng.EntireColumn.Delete

に変更してみてください。m(_ _)m
    • good
    • 0
この回答へのお礼

書き込みありがとうございます。
すばらしいですね。
可動いたしました。

お礼日時:2017/12/07 14:57

こんにちは



>B2=IF(B8="",B7,"")
>B3=IF(B8="★",B9,"")
>B4=IF(B8="★",B10,"")
>と入力しております。
この式の通りに入れると、ご提示の図(←よく見えないけれど)のようになるとは思えないので、勝手に想定しました。


B2に以下の関数式を入れ、

=IFERROR(INDEX(OFFSET($A$7:$G$7,ROW()-IF(ROW()>2,1,2),0),SMALL(IF($B$8:$G$8="",COLUMN($B$8:$G$8)),COLUMN(A1))),"")

配列数式なので、Ctr + Shft + Enter で確定。
これを下、右方向にコピーフィル
以上で、できるのではないかと思います。


※ #1様も指摘してらっしゃいますが、不必要に関連を複雑にしているので、式も複雑になります。
※ 何らかの修正が必要になった際に自力でできるように、内容を把握しておいてください。
「エクセル関数 空白(関数あり)の列を削除」の回答画像4
    • good
    • 0

>検索から空白のセルなどもやってみましたが関数のためできないようです。



表をコピー→値貼り付けしてから表を範囲選択した状態で、検索で空白(何も入れない)を探せばいいのでは?全て検索で下に出てきているリストを全部選択したら空白セルだけ選択されるので右クリック→削除→左方向にシフトでできませんか?

というか、まず書かれている通りに式を入れると名前と数値がバラバラになるのが気になるし(多分B3とB4の式の真と偽が逆?)、もう少し言葉でも説明してもらえますか?
    • good
    • 0

もちろんマクロ(VBA)なら出来ますが、絵を見る限り7~10行目にデータがありますよね、ここはいじってはいけないのですよね。

それですと対象エリアを何だかの形で指定しないと出来ません。どのように指定するつもりですか?以下から選択してください。
① A2:G4 を選択状態にしてマクロを実行する。
② マクロの中に範囲を組み込む
③ その他(詳しく説明してください)
    • good
    • 0

作業用の行を作って、そこに「空白セルがあれば "1" なければ ”0” のような数式を記入し、


作業用の行に ”1” が入力されている列だけを削除する。
…ようにしてはいかがでしょう。


・・・余談・・・

自分なら初めから行列を入れ替えた表を作るなあ。
そのほうが処理が楽。
    • good
    • 0
この回答へのお礼

書き込みありがとうございます。
元々の表が(他者が作成)このような配列でありその集計をとっています。
私も作成していてこれじゃあ・・・となり困っておりました。

お礼日時:2017/12/06 15:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています