エクセルのVBAのプログラミングについて質問です。


セルに以下の様な文字が入っています。

今日は

京都へ


行ってきます。


セル内はALT+ENTERキーで改行されています。

このセルの中の改行を読み取り<br>タグを付け以下のような処理をするプログラムを作成することは可能でしょうか?

今日は<br><br>

京都へ<br><br><br>


行ってきます。

この処理を値がある列A全てのセルに行うVBAプログラムを書ける方おりましたら

コードを書いていただけないでしょうか?

お手数をおかけしますがよろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/09/30 10:15:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:SALINGER No.3

回答回数3454ベストアンサー獲得回数969

ポイント10pt

sub101さんのコードがシンプルでいいですね。私の方は力技で。


Sub Macro()
    Dim str As String
    Dim i As Long
    Dim j As Long
    Dim k As Long
    Dim r As Long
    Dim LastRow As Long
    
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row
    For r = 1 To LastRow
        If Cells(r, 1).Value <> "" Then
            str = Cells(r, 1).Value
            j = 0
            For i = 1 To Len(str)
                If Mid(str, i + j, 1) = Chr(&HA00) Then
                    k = 0
                    If i > 1 Then
                        While Mid(str, i + j - k - 1, 1) = Chr(&HA00)
                            k = k + 1
                        Wend
                    End If
                    str = Left(str, i + j - k - 1) & "<br>" & Mid(str, i + j - k)
                    j = j + 4
                End If
            Next i
            Cells(r, 1).Value = str
        End If
    Next r
End Sub

その他の回答3件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント35pt

セルA1に変換元文字列、セルB1に変換後の文字列を入れるとすると、VBAのコードは以下の通り。

s1 = Range("A1").Value
s2 = Replace(s1, Chr(&HA00), "<br />")
Range("B1").Value = s2

確認していないのですが、UnicodeベースのExcelであれば、セル内改行コードは &HA0 です。

もしうまく動かないようでしたら、「セル内の改行コードに注意」を参考に、セル内改行コードを確認してください。

id:aiomock

ご回答ありがとうございます。

2008/09/23 11:06:19
id:sub101 No.2

回答回数1ベストアンサー獲得回数0

ポイント35pt

こんなかんじかな?

    Dim target As Range
    Dim buf As String
    
    Const SOURCE = vbLf & "<br>" & vbLf
    Const SEARCH = "<br>" & vbLf & vbLf
    
    For Each target In Columns("A").SpecialCells(xlCellTypeConstants)
        
        buf = Replace(target, vbLf, "<br>" & vbLf)
        
        Do While InStr(buf, SOURCE)
            buf = Replace(buf, SOURCE, SEARCH, , 1)
        Loop
        
        target = buf
        buf = Empty
    Next
id:aiomock

ご回答ありがとうございます。

プログラムちゃんと実行されました。

2008/09/23 14:59:50
id:SALINGER No.3

回答回数3454ベストアンサー獲得回数969ここでベストアンサー

ポイント10pt

sub101さんのコードがシンプルでいいですね。私の方は力技で。


Sub Macro()
    Dim str As String
    Dim i As Long
    Dim j As Long
    Dim k As Long
    Dim r As Long
    Dim LastRow As Long
    
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row
    For r = 1 To LastRow
        If Cells(r, 1).Value <> "" Then
            str = Cells(r, 1).Value
            j = 0
            For i = 1 To Len(str)
                If Mid(str, i + j, 1) = Chr(&HA00) Then
                    k = 0
                    If i > 1 Then
                        While Mid(str, i + j - k - 1, 1) = Chr(&HA00)
                            k = k + 1
                        Wend
                    End If
                    str = Left(str, i + j - k - 1) & "<br>" & Mid(str, i + j - k)
                    j = j + 4
                End If
            Next i
            Cells(r, 1).Value = str
        End If
    Next r
End Sub
id:GIJYUTUSYA3 No.4

回答回数8ベストアンサー獲得回数0

ポイント10pt

http://www.hotdocument.net/を使えばできるかもしれません。

よろしければ、参考に。

  • id:tomokazu0525
    念のため、2点確認させてください。

    1.
    セルA内に、改行にプラスして、<BR>タグを二つつけるということですよね?
    つまり、あるセルの中身が
    「今日は<br><br>

     京都へ<br><br><br>


     行ってきます。」

    になるということですよね?

    それとも、HTMLファイルにまで出力するということですか?
    (その場合、私の能力ではプログラム書けませんが。。。)

    2.
    文字列の入っていない行の改行には<BR>タグをつけないということでしょうか。

  • id:aiomock
    ご回答ありがとうございます。


    <<<1、それとも、HTMLファイルにまで出力するということですか?

    HTMLファイルの出力はしないです。

    <<<2.文字列の入っていない行の改行には<BR>タグをつけないということでしょうか。

    プログラムをするエクセルですが

    文字列が入っていない場合はそれ以降文字列が無いのでプログラム終了となります。

    ありがとうございます。
  • id:taknt
    Columns(1).Replace What:=Chr(&HA00), Replacement:="<br />", LookAt:=xlPart, SearchOrder:=xlByRows, SearchFormat:=False, ReplaceFormat:=False


    普通に置換するとこうなるが、質問では 改行は そのまま残すことになっている
    みたいなので、ちょっと面倒ですね。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません