プロが教える店舗&オフィスのセキュリティ対策術

F8セルから下方向へ、セルに何かデータが入っていれば、末尾に改行を1つ追加、
空なら下のセル(F2)へ・・・・
という処理をF列のデータが入っている最下行まで繰り返したいです。
それをG列、H列に対して行いたいのですが、
VBAで効率良く処理する方法を教えていただけないでしょうか?

A 回答 (2件)

こんにちは。


少し考えてみました。
些細なことですが、手動では、セルの中は、Lf(LineFeed)しか入らないような気がします。
VBAで試してみたら、両方とも入るようですし、Cr(Carridge Return)だけも入ります。
ただ、私は、LFのみにしてみました。

'//標準モジュール
Sub TestInsertEnter()
 Dim Rng As Range
 Dim sRng As Range
 Dim c As Range
 Dim n As Variant
 For Each n In Array("F", "G", "H")
  Set Rng = Range(n & "8", Cells(Rows.Count, n).End(xlUp))
  On Error GoTo EndLoop
  Set sRng = Rng.SpecialCells(xlCellTypeConstants, 23)
  For Each c In sRng
   c.Value = c.Value & vbLf
  Next
EndLoop:
Set Rng = Nothing
 Next
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
提示していただくまで、改行コードの種類を意識しておりませんでした。
おかげでCrとLfという存在が分かりましたが、
今回の質問の場合、vbCrLf を vbLfにすることによって、このマクロの利用者(プログラミングと縁のない方々)にとってどんな利点があるのでしょう?
「vbCrLf」のままでいるデメリット等あるのでしょうか?

お礼日時:2018/10/09 15:42

>空なら下のセル(F2)へ・・・・


下のセル(F2)はF9の間違いかと思いますが、その前提です。
以下のマクロを標準モジュールへ追加してください
----------------------------------------------------------------
Option Explicit
Public Sub 改行追加()
Call kaigyo("F")
Call kaigyo("G")
Call kaigyo("H")
End Sub

Private Sub kaigyo(ByVal col As String)
Dim maxrow As Long
Dim lrow As Long
maxrow = Cells(Rows.Count, col).End(xlUp).Row
For lrow = 8 To maxrow
If Cells(lrow, col).Value <> "" Then
Cells(lrow, col).Value = Cells(lrow, col).Value & vbCrLf
End If
Next
End Sub
    • good
    • 0
この回答へのお礼

確かにF2ではなくF9でした・・・

ありがとうございます。
うまくいきました!

作成中のマクロに組み込んで希望通りの動作をさせる事ができました。
これならkaigyoコマンドで他のマクロからも呼び出せますね。勉強になりました。

お礼日時:2018/10/05 13:38

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