1
 Sub testing()


    'start searching for address
    Set wb = ThisWorkbook
    Set ws1 = wb.Sheets("Sheet1")
    Set ws2 = wb.Sheets("Sheet2")

    IncNum = Sheets("Sheet2").UsedRange.Columns.Count
    ExcNum = Sheets("Sheet1").UsedRange.Columns.Count
    InrNum = Sheets("Sheet2").UsedRange.Rows.Count
    Exrnum = Sheets("Sheet1").UsedRange.Rows.Count

    Set sheet1Table = Sheets("Sheet1").UsedRange
    Set sheet2Table = Sheets("Sheet2").UsedRange
    'skip header
    For InrCounter = 2 To InrNum
        For ExrCounter = 2 To Exrnum
            If sheet1Table.Cells(InrCounter, 1) = sheet2Table.Cells(ExrCounter, 1) And sheet1Table.Cells(InrCounter, 2) = sheet2Table.Cells(ExrCounter, 2) And sheet1Table.Cells(InrCounter, 3) = sheet2Table.Cells(ExrCounter, 3) Then
                If IncNum = ExcNum Then
                    Exit For
                Else
                    Dim LastCofRowCounter, lastCofthisR As Integer
                    lastCofthisR = sheet1Table.Cells(ExrCounter, Columns.Count).End(xlToLeft).Column
                    For LastCofRowCounter = lastCofthisR + 1 To IncNum
                        Sheets("Sheet1").Cells(ExrCounter, LastCofRowCounter) = Sheets("Sheet2").Cells(InrCounter, LastCofRowCounter)
                    Next LastCofRowCounter
                End If
            ElseIf ExrCounter = Exrnum Then

        'fid the last row of mastersheet
        lrowEx = Sheets("Sheet1").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        For counterCofLastR = 1 To IncNum
           Sheets("Sheet1").Cells(lrowEx + 1, counterCofLastR) = Sheets("Sheet2").UsedRange.Columns(1).Cells(InrCounter, counterCofLastR)
        Next counterCofLastR
        End If
      Next ExrCounter

Next InrCounter
End Sub


    the table looks like  
        h1 h2 h3 h4
        x  x  x  x

行 ExcNum = Sheets("Sheet1").UsedRange.Columns.Count は 4 ではなく 9 を与えており、この場合の理由はわかりません...同じテーブルで別のワークシートを試してみましたが、うまくいきました。

電話してみた

  Sub ResetUsedRng()
    Application.ActiveSheet.UsedRange
  End Sub

すべてのコードを実行する前に、これは機能しませんでした。これを含む、あなたがリンクした関連記事も読みました

    Private Sub Workbook_BeforeSave _
     (ByVal SaveAsUI As Boolean, Cancel As Boolean)
     For Each Sh In ThisWorkbook.Worksheets
      x = Sh.UsedRange.Rows.Count
      Next Sh
    End Sub

Call Workbook_BeforeSave(True, False) を呼び出しましたが、これも機能しませんでした。アイデア?

4

3 に答える 3

2

私の経験から、信頼できる唯一のものは使用することです

Lastcol =  Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column
Lastrow =  Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row

使用範囲の最後のセルを決定します。UsedRangeorを含む他のすべてのメソッドはSpecialCells(xlLastCell)End(xlUp) 間違った結果をもたらす可能性があります。

于 2013-12-29T11:29:12.573 に答える
0

Excel は、.UsedRangeプロパティの更新が苦手なことで有名です。ある時点でシートの column にデータまたは書式が適用されていた場合、プロパティが更新されていないI可能性があります。.UsedRange

は VBA で使用すると非常に便利であるため、通常、シート内の最後に使用された列と行をチェックし、に含まれる余分な行と列を削除.UsedRangeするサブを作成することで、これを回避します。これにより、プロパティが強制的に更新されます。Sheet.UsedRange

于 2013-07-29T00:17:18.550 に答える
-1

この 2 行は魔法のようです。specialcells を使用して、最後の列と最後の行を見つけます。

  usedCol = ThisWorkbook.ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
  usedRow = ThisWorkbook.ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

詳細については、Microsoft のサイトをご覧ください

http://msdn.microsoft.com/en-us/library/office/ff196157.aspx

于 2013-12-29T08:31:39.003 に答える