ここから本文です

エクセル、VBAで質問です。 空白セルと0が入ったセルを上に詰めたいのですが、...

fur********さん

2017/7/1421:21:40

エクセル、VBAで質問です。

空白セルと0が入ったセルを上に詰めたいのですが、何かいい方法はありますか?

イメージ

A B C D E
1 0
2

0
3 あ あ か
4
5
6 あ さ


マクロ実行

A B C D E
1 あ あ さ か
2 あ
3
4
5
6

注意したいのは、セルの削除ではなく下にある行の値を上に詰めるところです。

枠を太字で囲っていたり、式を組んでいる箇所もあり、削除で凸凹になりたくないのです。

何卒よろしくお願い致しますm(_ _)m

すみません、見えずらいですが、アルファベットは列で数字は行です。

閲覧数:
93
回答数:
2

違反報告

ベストアンサーに選ばれた回答

sk_********さん

2017/7/1422:27:35

furu1414furuさん

1.次のコードを標準モジュールに貼り付ける
2.該当セル範囲を選択する
3.マクロを実行する

該当のセル範囲がわからなかったため、選択しているセル範囲を対象としました。
選択しているオブジェクトが、セルでない場合、マクロは実行されません。

Sub Sample()
If TypeName(Selection) <> "Range" Then Exit Sub
If Selection.Cells.Count = 1 Then Exit Sub
Dim i As Long, j As Long
Dim r As Long, c As Long, lngSC As Long
Dim varV As Variant, v As Variant
With Selection
v = .Value: r = .Rows.Count: c = .Columns.Count
For i = 1 To c
lngSC = 1
For j = 1 To r
If v(j, i) = 0 Then
v(j, i) = Empty
Else
varV = v(j, i): v(j, i) = Empty
v(lngSC, i) = varV: lngSC = lngSC + 1
End If
Next
Next
.Value = v
End With
End Sub

ベストアンサー以外の回答

1〜1件/1件中

tam********さん

2017/7/1421:45:48

作ってみたら、こうなった。

Private Sub CommandButton1_Click()

For C = 1 To 5
G1 = 1
For G2 = 1 To 7

If Cells(G2, C) > "" And Cells(G2, C) <> 0 Then
Cells(G1, C) = Cells(G2, C)
If G2 > G1 Then Cells(G2, C) = ""
G1 = G1 + 1
End If

Next
Next

End Sub

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる