dポイントプレゼントキャンペーン実施中!

例えば、Excelのデータで各セルに次のような入力があります。

A A A B C D
A A B C D
A B C D

これを

A A A B C D
  A A B C D
    A B C D

というように、空白のセルを右方向に削除し、一番右に入力のあるセルの列にすべての行を揃えたいです。
500行以上あるデータなので、一気にできる方法を探しています。
セル選択後、削除する時に「左方向にシフト」や「上方向にシフト」はあっても、「右方向にシフト」がないため、データ処理に苦戦しています。

マクロの知識がないので、マクロを使わない方法(複雑すぎなければ関数でも・・・)があれば嬉しいです。
最終的には、

A B C D
A B C D
A B C D

とまとめる予定のデータです。


拙い説明で申し訳ありませんが、
もし、ご存知の方がいらっしゃっいましたら、よろしくお願いいたします。

A 回答 (3件)

添付図参照


H1: =COUNTBLANK(A1:F1)
J1: =IF(COLUMN(A1)>$H1,OFFSET($A1,,COLUMN(A1)-1-$H1),"")
「Excel2007 セルを右方向に削除す」の回答画像1
    • good
    • 1
この回答へのお礼

COLUMNやOFFSETという関数は、まるで思いつきもしなかったです。
というより初めて知りました。

意味は分からないでも、貼り付けて出来たときは感動ものでした。

このたびは助かりました。
ご回答、本当にありがとうございました。

お礼日時:2013/04/14 20:41

元データを最終データにするための別解



添付図参照
1.H列は全て数値の 0 を入力
2.セル I1 に式 =(B1=A1)*(B1<>"")を入力して、此れを右方にズズーッとM列までドラッグ&ペースト
3.セル O1 に式 =IF(H1,1,A1&"") を入力して、此れを右方にズズーッとT列までドラッグ&ペースト
4.範囲 H1:T1 を下方にズズーッとドラッグ&ペースト
5.O~T列全体を選択して、[コピー]→[値の貼り付け]を実行した後、
6.[ジャンプ]→[セル選択]で[定数]の[数値]を選択して[OK]をクリック

後は、お馴染みの『削除する時に「左方向にシフト」』を実行すればよろしいかと。
「Excel2007 セルを右方向に削除す」の回答画像3
    • good
    • 0
この回答へのお礼

Excelでも出来ないことがあるんではないかと思ってしまったのが浅かったです。
今回は、Excelの奥深さがとても分かりました。

それにしても、ここで回答してくださる皆さんの知識や技量はすごいですね。
ここで質問して良かったです。

ありがとうございました。

お礼日時:2013/04/14 20:48

こんばんは!


>マクロの知識がないので、マクロを使わない方法・・・
とありますが、関数でやる場合は作業用のSheet等を使用すれば可能だと思います。

ただ、敢えてお望みでないVBAでの一例を投稿してみます。
関数での方法をご希望のようですので、当然無視してもらっても構いません。

画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に
↓のコードをコピー&ペーストしてマクロを実行してみてください。
データは1行目からあるとしています。

Sub 右寄せ() 'この行から
Dim i As Long, j As Long, k As Long
j = ActiveSheet.UsedRange.Columns.Count
For i = 1 To ActiveSheet.usederange.Rows.Count
k = Cells(i, Columns.Count).End(xlToLeft).Column
If k <> j Then
Cells(i, 1).Resize(1, k).Cut Cells(i, j - k + 1)
End If
Next i
End Sub

Sub 重複削除()
Dim i As Long, j As Long
On Error Resume Next
For i = 1 To ActiveSheet.UsedRange.Rows.Count
For j = Cells(i, Columns.Count).End(xlToLeft).Column To 1 Step -1
If Cells(i, j) = "" Or WorksheetFunction.CountIf(Rows(i), Cells(i, j)) > 1 Then
Cells(i, j).Delete shift:=xlToLeft
End If
Next j
Next i
Cells(1, 1).CurrentRegion.SpecialCells(xlCellTypeBlanks).Delete shift:=xlToLeft
End Sub 'この行まで

二つ目の「重複削除」のマクロを実行すると、
最終的にまとめる予定の表示になると思います。
※ 右寄せのマクロと重複削除して左寄せのマクロ二つを載せてみました。
※ 一旦マクロを実行すると元に戻せませんので別Sheetでマクロをためしてみてください。

あくまで参考程度で、こんな感じでできる!と思ってもらえるだけでOKです。m(_ _)m
    • good
    • 0
この回答へのお礼

すごいですね、マクロ・・・
やはり覚えるべきはマクロ、ですね。
時間はかかりそうですが、いつか習得したいものです。

回答を寄せていただき、ありがとございました。

お礼日時:2013/04/14 20:44

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