End(xlUp).Row , End(xlToLeft).Column

エクステンションの作成、共用ライブラリ
返信する
K.Tsunoda
記事: 71
登録日時: 11月 2, 2008, 6:44 pm
連絡する:

End(xlUp).Row , End(xlToLeft).Column

投稿記事 by K.Tsunoda »

VBAでの End(xlUp).Row , End(xlToLeft).Column に相当する処理の汎用関数ができました。

はにゃ?さんの [OOo bbs 2/16] に掲載されているコードを元にしています。
http://hermione.s41.xrea.com/pukiwiki/p ... obbs2%2F16

全て空セルのケースや、行方向/列方向の判別、指定セル範囲の属性の違い等の改善を施して作成しました。

GetLastCell 関数 (2009/8/8 Ver 1.1)
http://blog.livedoor.jp/addinbox/archives/51212979.html

コード: 全て選択

'~~ 利用例 ~~
Sub Main
Dim oSheet As Object
Dim oCell As Object

oSheet = ThisComponent.Sheets(0)

'oCell = GetLastCell(oSheet.Rows(1),True)
'oCell = GetLastCell(oSheet.getCellRangeByName("A2:IV2"),True)

'oCell = GetLastCell(oSheet.Columns(0),True)
oCell = GetLastCell(oSheet.getCellRangeByName("A1:A65536"),True)

MsgBox oCell.AbsoluteName
End Sub

AddinBox/VBAユーザーの為のOpenOffice.org 備忘録 『ユーザー定義関数の一覧
http://blog.livedoor.jp/addinbox/archives/51249421.html
K.Tsunoda
記事: 71
登録日時: 11月 2, 2008, 6:44 pm
連絡する:

Re: End(xlUp).Row , End(xlToLeft).Column

投稿記事 by K.Tsunoda »

2009/8/8 Ver 1.1 修正
最終セルがEmptyではない場合に正しい結果が得られなかった不具合を修正しました。
1要素のみのセル範囲コンテナから取り出したオブジェクトの判定が抜けていたので追加しました。

コード: 全て選択

    Case "ScCellRangesObj", "ScTableColumnsObj", "ScTableRowsObj"
      oRanges = argRowCol
      If (oRanges.Count = 1) Then
        oRowCol = oRanges(0)
        Select Case oRowCol.ImplementationName
          Case "ScCellObj"
            GetLastCell = Nothing
            Exit Function
          Case "ScCellRangeObj", "ScTableColumnObj", "ScTableRowObj"
            'OK
          Case "ScCellRangesObj", "ScTableColumnsObj", "ScTableRowsObj"
            GetLastCell = Nothing
            Exit Function
          Case Else
            GetLastCell = Nothing
            Exit Function
        End Select
      Else

コード: 全て選択

  'Last cell is Empty?
  With oRowCol.RangeAddress
    oCell = oRowCol.SpreadSheet.getCellByPosition(.EndColumn, .EndRow)
    If (oCell.Type <> com.sun.star.table.CellContentType.EMPTY) Then
      If blnNextCell Then
        ktGetLastCell = Nothing
      Else
        ktGetLastCell = oCell
      End If
      Exit Function
    End If
  End With
  oEmptyRanges = oRowCol.queryEmptyCells()
  intEmptyRangesCount = oEmptyRanges.Count
返信する

“コードスニペット(便利な汎用コード)”に戻る