0

いくつかの癖を含む単一のデータ列を使用しています。問題の詳細の下に VBA コードを含めました。

データの編成方法の例:

  • 名前
  • 裁判所
  • オファー
  • 裁判所
  • オファー
  • オファー
  • 裁判所
  • オファー

ただし、データの収集方法により、Court が常にリストされるとは限りません。データを転置すると、これにより列が破棄されます。私が書いた VBA は、Offe のインスタンスがあるたびに、前のセルが Court の場合は Offe を定期的に出力することによって、それを修正しようとしていました。前のセルが Court でなかった場合は、前の Court (CourtCell として保存) を出力し、Offe を出力して次のセルに進みます。

Object Required エラーが発生します。

Sub CourtAdder()

Dim lngRowLast As Long, _
lngRowPaste As Long, _
lngColOffset As Long
Dim rngCell As Range, _
rngDataSet As Range
Dim strSourceTab As String, _
strOutputTab As String

 'Tab name containing source data.  Change to suit.
strSourceTab = "Sheet1"
 'Tab name for data output.  Change to suit.
strOutputTab = "Sheet2"

lngRowLast = Sheets(strSourceTab).Cells(Rows.Count, "A").End(xlUp).Row

 'Assumes the original dataset is in Column A and starts at Row 1.  Change to suit.
Set rngDataSet = Sheets(strSourceTab).Range("A1:A" & lngRowLast)

Application.ScreenUpdating = False

For Each rngCell In rngDataSet

    If Left(rngCell.Value, 5) = "Court" Then
        CourtCell = ActiveCell.Value
    End If
    If Left(rngCell.Value, 4) = "Offe" Then
        If Left(Rng.Cell.Value.Offset(-1, 0), 4) = "Cour" Then
            lngRowPaste = 27
            lngColOffset = 1
        Else
            ActiveCell.PasteSpecial (xlPasteValues)
            lngRowPaste = 1
            lngColOffset = 1
        End If
    Else
        lngRowPaste = lngRowPaste + 1
        lngColOffset = 1

    End If

'        Sheets(strOutputTab).Cells(lngRowPaste, lngColOffset).Value = rngCell.Value'
 '       lngColOffset = lngColOffset + 1 '


Next rngCell

Application.ScreenUpdating = True


End Sub
4

1 に答える 1

0

いくつかのポイント:

  1. 読み取りセルを物理的に循環していないため、 を使用してActiveCellも に何も保存されませんCourtCell
  2. 行と列を循環して貼り付けることは、生データが表示されているので意味がありません。
  3. 何もコピーしていないため、使用PasteSpecialしても何も実行されません。これがエラーの場所です

forループを次のように構成します。

lngColOffset = 1
For Each rngCell In rngDataSet

    If Left(rngCell.Value, 5) = "Court" Then
    'if a court field?

        'save value and don't copy any values
        CourtCell = rngCell.Value

    Else
    'if not a court field?

        'add last saved court and current offe to out put sheet
        Sheets(strOutputTab).Cells(1, lngColOffset).Value = CourtCell
        Sheets(strOutputTab).Cells(2, lngColOffset).Value = rngCell.Value

        'go to next column to write
        lngColOffset = lngColOffset + 1

    end if

Next rngCell

これが理にかなっており、理解できたことを願っています。そうでない場合は、もっとお手伝いできます。

于 2013-03-30T11:40:32.883 に答える