[[20220113111543]] 『入力のある各列の一番下のセルを取得したい』(shosinsya) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『入力のある各列の一番下のセルを取得したい』(shosinsya)

はじめまして、VBA初心者です。

B〜D列の3行目から数値・文字の入力があるシートがあります。
その数値、文字から先頭の余白、'を削除したかったので、

Sub 削除()
Dim i As Long

 For i = 3 To 100
    Cells(i, 2) = Replace(Cells(i, 2), "'", "")
    Cells(i, 2).Value = Trim(Cells(i, 2).Value)
    Cells(i, 3) = Replace(Cells(i, 3), "'", "")
    Cells(i, 3).Value = Trim(Cells(i, 3).Value)
    Cells(i, 4) = Replace(Cells(i, 4), "'", "")
    Cells(i, 4).Value = Trim(Cells(i, 4).Value)
 Next

End sub

というVBAを作ったのですが、時間が少々かかるためデータの入力がある最終行を取得するようにしようと、色々と調べて次のようにいじりました。

Sub 削除2()

 Dim i As Long

 For i = 3 To Cells(Rows.count, 1).End(xlUp).Row
    Cells(i, 2) = Replace(Cells(i, 2), "'", "")
    Cells(i, 2).Value = Trim(Cells(i, 2).Value)
    Cells(i, 3) = Replace(Cells(i, 3), "'", "")
    Cells(i, 3).Value = Trim(Cells(i, 3).Value)
    Cells(i, 4) = Replace(Cells(i, 4), "'", "")
    Cells(i, 4).Value = Trim(Cells(i, 4).Value)
 Next

End sub

ですが、文字から先頭の余白、'を削除してくれなくなってしまったので、どこが間違えているのか、どのように直せばよいか教えていただけないでしょうか。

< 使用 Excel:Excel2010、使用 OS:Windows10 >


> For i = 3 To Cells(Rows.count, 1).End(xlUp).Row

A列の最終行を取得していますね。
A列にも、データがあるのでしょうか?

(わからん) 2022/01/13(木) 11:26


>>わからん 様
A列にはデータはありません。
指摘された箇所を修正した場合、
B、C、D列それぞれの最終行を取得するには
例えば

Sub 削除3()
Dim i As Long
Dim j As Long
Dim k As Long

 For i = 3 To Cells(Rows.count, 2).End(xlUp).Row
    Cells(i, 2) = Replace(Cells(i, 2), "'", "")
    Cells(i, 2).Value = Trim(Cells(i, 2).Value)
 Next
For i = 3 To Cells(Rows.count, 3).End(xlUp).Row
    Cells(i, 3) = Replace(Cells(i, 3), "'", "")
    Cells(i, 3).Value = Trim(Cells(i, 3).Value)
 Next
For i = 3 To Cells(Rows.count, 4).End(xlUp).Row
    Cells(i, 4) = Replace(Cells(i, 4), "'", "")
    Cells(i, 4).Value = Trim(Cells(i, 4).Value)
 Next

End sub

という形になるのでしょうか。
もう少しまとめる方法があれば教えて欲しいです。
(shosinsya) 2022/01/13(木) 12:05


・余白をTrimで削除していますが、先頭だけではなく末尾のスペースも削除されますが問題無いのでしょうか
・「'」は文字列内に複数ある想定で、文字列のどの位置に含まれているかは不明なのでしょうか。
 →必ず先頭に1つだけあるということではない?
(was) 2022/01/13(木) 12:22

>A列にはデータはありません。

A列にデータがないなら、「Cells(Rows.count, 1).End(xlUp).Row」は1になりますので、
ループしません。

>B、C、D列それぞれの最終行を取得

それぞれの列で最終行が異なるなら、ご提示のようにするしかありません。

同じなら、どこかの列の最終行を取得すればいいでしょう。

(わからん) 2022/01/13(木) 12:48


>時間が少々かかる

わずか300セルで、体感できるとも思えませんが?

 Sub test()
    With ActiveSheet.UsedRange.Columns("B:D")
        .Replace "'", "", xlPart
        .Value = Application.Trim(.Value)
    End With
  End Sub

(マナ) 2022/01/13(木) 15:01


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.