|
>実際のデータは”統計”というシートのR5:AC107の範囲に記されてます。
現在のコードでは、処理対象のシートの指定はしていませんので、
アクティブになっているシートに対して実行されます。
”統計”シートをアクティブにして実行できない状況であれば、
全ての Range() と Cells() の前に
Worksheets("統計"). ←「.」を忘れないでください
をつけてみてください。
また、データが入っている範囲の指定は
>For Each rngLoop In Range("A1:F3")
の部分ですので、
For Each rngLoop In Range("R5:AC107")
と変えてください。
>これをR110:AC150の間に変換した数値を入れたい
現在のものは、ある1行に、横向きに結果の数値を出力していますので、
矩形の範囲に出力するように変更します。
>Cells(4, 1).End(xlToRight).ClearContents
>Cells(4, 1).Resize(, UBound(varTmp) + 1).Value = varTmp
↓
Range("R110:AC150").ClearContents
lngCnt = 1
With Range("R110:AC150")
For Each v In varTmp
.Cells(lngCnt).Value = v
lngCnt = lngCnt + 1
Next v
End With
全部あわせると、こんな感じです。
Sub test()
Dim rngLoop As Range
Dim strCnt As String
Dim varTmp As Variant
Dim lngCnt As Long
Dim strPre As String
Dim v As Variant
lngCnt = 0
strPre = ""
For Each rngLoop In Range("R5:AC107")
'1つ前のセルと同値ならカウンタをカウントアップ
If rngLoop.Value = strPre Then
lngCnt = lngCnt + 1
'値が変わったらカンマを挟んで個数を文字列に退避
Else
If lngCnt <> 0 Then strCnt = strCnt & "," & lngCnt
lngCnt = 1
strPre = rngLoop.Value
End If
Next rngLoop
'最終データの書き込み
strCnt = Mid(strCnt, 2) & "," & lngCnt
'カンマで区切って配列に格納
varTmp = Split(strCnt, ",")
'配列の内容をセルに展開
Range("R110:AC150").ClearContents
lngCnt = 1
With Range("R110:AC150")
For Each v In varTmp
.Cells(lngCnt).Value = v
lngCnt = lngCnt + 1
Next v
End With
'配列初期化
Erase varTmp
End Sub
|
|