シート上に文字列がランダムにばら撒かれています。
(ばら撒かれている範囲もケースバイケースを想定しています)
最終的に、文字列をA1から順番に並べたいと思いました。
手順としてA列の文字列が入力されているセル行を調べてその回数ループさせる。もし、セルの値が""ならばセルを削除し上に詰める。そのときA列の最終行数を-1する。最終行数までくるとその列は終わり。
次の列に移動し繰り返して完了。
と、もくろんだのですが、A列のみで無限ループに陥ってしまいました。どなたか?詳しい方いらっしゃいましたら教えてください。
Sub test()
Set sh1 = Worksheets("sheet1")
For j = 1 To 50
LastRow1 = sh1.Cells(65536, j).End(xlUp).Row
For i = 1 To LastRow1
If sh1.Cells(i, j).Value = "" Then
sh1.Cells(i, j).Delete (xlShiftUp)
i = i - 1
LastRow1 = LastRow1 - 1
End If
Next
Next
End Sub
No.1
- 回答日時:
無限ループは以下のように下の行から削除していけば大丈夫です。
ただ、このままでは、A列以外は、A列の同じ行が空白だと、最初に削除されてしまいますよ。考え直した方がいいと思います。
Sub test()
Set sh1 = Worksheets("sheet1")
For j = 1 To 50
LastRow1 = sh1.Cells(65536, j).End(xlUp).Row
For i = LastRow1 To 1 Step -1
If sh1.Cells(i, j).Value = "" Then
sh1.Cells(i, j).Delete (xlShiftUp)
End If
Next
Next
End Sub
ありがとうございます。
下から、削除なんですね。助かりました。
次の課題は、セルの範囲幅の検出と、A列への集合です。
また悩みそうなので、今から心配です。
また、宜しくお願いいたします。
No.3
- 回答日時:
For Next文の中に
If i = LastRow1 Then
Exit For
End If
と入れてみたらどうでしょ?
ご回答ありがとうございます。
結局、教えて頂いた内容を踏まえて次のようになりました。
何か?指摘頂ければと思います。
皆さんも宜しくお願いいたします。
Sub test()
Application.ScreenUpdating = False
Set sh1 = Worksheets("sheet1")
Dim Column_address As String
Column_address = sh1.UsedRange.Address
right_botmm_address = Right(Column_address, Len(Column_address) - InStrRev(Column_address, ":"))
Last_Column = sh1.Range(right_botmm_address).Column
For j = 1 To Last_Column
LastRow1 = sh1.Cells(65536, j).End(xlUp).Row
For i = LastRow1 To 1 Step -1
If sh1.Cells(i, j).Value = "" Then
sh1.Cells(i, j).Delete (xlShiftUp)
End If
Next
Next
StartRowA = 1
For j = 2 To Last_Column
LastRow1 = sh1.Cells(65536, j).End(xlUp).Row
sh1.Range(Cells(1, j), Cells(LastRow1, j)).Cut
sh1.Range(Cells(StartRowA, 1), Cells(StartRowA, 1)).Select
sh1.Paste
StartRowA = StartRowA + LastRow1
Next
Application.ScreenUpdating = True
End Sub
No.4ベストアンサー
- 回答日時:
こんばんは。
あまりご質問をちゃんと読んでいないので、上手くいかないかもしれませんが、こんな風に作ってみました。たぶん、空のセルを削除して、最後の要件は、空いた列を左に寄せていくのですよね。
Sub DeleteBlankCells()
Dim i As Integer
With ActiveSheet
On Error Resume Next
For i = .Range("A1").SpecialCells(xlCellTypeLastCell).Column To 1 Step -1
.Columns(i).SpecialCells(xlCellTypeBlanks).Delete xlShiftUp
If WorksheetFunction.CountA(.Columns(i)) = 0 Then
.Columns(i).Delete
End If
Next i
On Error GoTo 0
End With
End Sub
丁寧は回答有難う御座います。
私が書いたマクロの10倍ぐらいの速度で、処理が完了してしまいました。画面の更新を止める必要がないほどに!!
マクロには、独特の考え方と、深い知識が必要なことを痛感しました。
今後とも宜しくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) Sub 分けてソートして貼り付ける() Dim srcSheet As Worksheet Dim 6 2023/08/04 19:57
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定の文字がある行以外を削除...
-
excelのデータで色つき行の抽出...
-
直近の5個の平均を求めたい
-
[EXCEL]ボタン押す→時刻が表に...
-
【Excel関数】UNIQUE関数で"0"...
-
アクティブになっている行をマ...
-
エクセル マクロで数値が変っ...
-
Excel グラフのプロットからデ...
-
【EXCEL】連続データの個数を抽...
-
エクセルで特定の文字列が入っ...
-
Excel 時刻の並び替え
-
エクセルのセルに指定画像(.jpg...
-
チェックボックスをクリックし...
-
セルの色によって条件文をつけ...
-
エクセル マクロ オートフィ...
-
エクセル2016で時間を入力して...
-
電話番号の入力方式が違うデー...
-
このような複雑な表をワードで...
-
エクセルで、ポインタのある行...
-
Excel マクロで特定のセルに入...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
エクセル マクロ オートフィ...
-
【Excel関数】UNIQUE関数で"0"...
-
[EXCEL]ボタン押す→時刻が表に...
-
結合されたセルをプルダウンの...
-
エクセル マクロで数値が変っ...
-
Excel グラフのプロットからデ...
-
AのセルとB行を比較して、一致...
-
エクセル 上下で列幅を変えるには
-
Excel ウインドウ枠の固定をす...
-
特定の文字がある行以外を削除...
-
excelのデータで色つき行の抽出...
-
エクセル2016で時間を入力して...
-
excel 小さすぎて見えないセル...
-
EXCELで最後の行を固定
-
エクセルVBA 最終行を選んで並...
-
VBAで色の付いているセルの行削除
-
エクセルマクロで偶数行(又は...
-
エクセルのセルに指定画像(.jpg...
-
罫線の斜線を自動で引くマクロ
おすすめ情報