1

処理のためにフォーマットする必要がある値のリストがあり、データのフォーマットが現在の形式に適していません。

値は現在、次の形式になっています。

これを手動で試みるにはレコードが多すぎます。数式または VBA を使用して、プロセスを自動化する最良の方法は何ですか?

編集: C3:C4 の値は、シート内のレコードのセットごとに表示されます。それらの下のセルの数は、1 ~ 3,000 の範囲で変化します。

ご協力いただきありがとうございます。

編集: ティム、あなたは大きな助けになり、私はそれを非常に感謝しています. いずれにせよ、私はそれを非常に初歩的に変更して、ループバックし、マークしたくないセルの値を空にしました。再度、感謝します。

Sub Tester()

Const STATUS_FLAG As String = "status code:*"

Dim v1, v2
Dim c As Range
Dim sht As Worksheet

    Set sht = ActiveSheet
    Application.ScreenUpdating = False
    For Each c In sht.Range(sht.Range("C1"), sht.Cells(Rows.Count, 3).End(xlUp))
        If c.Value Like STATUS_FLAG Then
            v1 = c.Offset(-2, 0)
            v2 = c.Offset(-1, 0)
        ElseIf c.Value Like "http:*" Then
            c.Offset(0, -2).Value = v1
            c.Offset(0, -1).Value = v2
        End If
        If c.Value Like STATUS_FLAG Then
            c.Offset(-2, -2).Value = ""
            c.Offset(-2, -1).Value = ""
            c.Offset(-1, -2).Value = ""
            c.Offset(-1, -1).Value = ""
        End If
    Next c
    Application.ScreenUpdating = True

End Sub  
4

1 に答える 1

2

編集:「ソース」パス (v1、v2) の横には記入しないでください

Sub Tester()

Const STATUS_FLAG As String = "Status code:*"

Dim v1, v2
Dim c As Range
Dim sht As Worksheet

    Set sht = ActiveSheet
    Application.ScreenUpdating = False
    For Each c In sht.Range(sht.Range("C1"), sht.Cells(Rows.Count, 3).End(xlUp))
        If Len(c.Value)=0 Then
            'reset on blank row
            v1=""
            v2=""
        ElseIf c.Value Like STATUS_FLAG Then
            v1 = c.Offset(-2, 0)
            v2 = c.Offset(-1, 0)
        ElseIf c.Value Like "http:*" and Len(v1)>0 Then
            c.Offset(0, -2).Value = v1
            c.Offset(0, -1).Value = v2
        End If
    Next c
    Application.ScreenUpdating = True

End Sub
于 2012-10-29T16:49:10.800 に答える