1

function() と sub() で行き詰っています。私のコード:

sub test()
Dim Firstrow, FirstCol As Integer
Workbooks("wb").Activate
Workbook(1).Worksheet(1).Select
FirstRow = 16
FirstCol = 20

LastCell = FindLastcell(FirstRow,FirstCol) 'LastCell is in "RiCj" format  
FirstCell = Cells(FirstRow, FirstCol).Address(ReferenceStyle:=xlR1C1) 'FirstCell is in "RiCj" format     
RngSelect = Range(FirstCell, LastCell).Select 'Range Method has failed. Obvious. See [1]
[more code to copy as text on Notepad the selection]
End Sub

今私の機能:

Public Function FindLastCell(ByVal int1 As Integer, ByVal int2 As Integer) As Variant ' what kind of return dim shall I choose ?
' find first empty cell in a range and return its adress 

LastRow = Cells(Rows.Count, int1).End(xlUp).Row
LastCol = Cells(int2, Columns.Count).End(xlToLeft).Column
FindLastCell = Cells(LastRow, LastCol).Address(ReferenceStyle:=xlR1C1)
End Function

多くのバリアントを試した後、希望する結果が得られません。実際には次のようになります。

  • 私の関数は、このスタイル Cells(int1,int2) でセル アドレスとして使用する整数のリストまたは配列を返します。
  • 私のsub()で、そのようなものを書きます:

    RngSelect = Range(Cells(i,j),Cells(k,l)).Select

関数またはサブエラーでこのホワイトアウトトリガーを達成する方法がわかりません。

[1] http://msdn.microsoft.com/en-us/library/office/ff838238.aspx範囲アドレスにテキスト引数を使用する場合は、A1 スタイルの表記でアドレスを指定する必要があります (R1C1 は使用できません)。 -スタイル表記)。

ご協力ありがとう御座います。

4

1 に答える 1

2

いくつかのこと...

  1. 変数をDim Firstrow, FirstCol As IntegerVBA のように宣言すると、最後の変数のみが として宣言されIntergerます。最初のものは として宣言されますvariant。代わりにこれを使用してください。Dim Firstrow As Integer, FirstCol As Integer
  2. 行を操作するときは、行変数を として宣言しないでくださいInteger。として宣言しLongます。Excel 2007 以降では、これらを宣言するとエラーIntegerが発生する可能性があります。Overflow
  3. INTERESTING READの使用を避ける.Select/.Activate
  4. オブジェクトを完全に修飾します。たとえば、Cellsオブジェクトによってエラーや予期しない結果が生じる場合があります。
  5. での数字の使用は避けてくださいWorksheet(1)。シートの実際の名前またはコードネームを使用してください。これは、シートがシャッフルされた場合に正しいシートで作業できるようにするためです。

今あなたの質問に。

関数は必要ありません。これを見る

Dim wb As Workbook
Dim ws As Worksheet

Sub test()
    Dim Firstrow As Long, FirstCol As Long
    Dim FirstCell As String, LastCell As String
    Dim RngSelect As Range

    Firstrow = 16: FirstCol = 20

    '~~> Change this to the relevant path
    Set wb = Workbooks.Open("C:\wb.xlsx")
    Set ws = wb.Sheets("Sheet1")

    With ws
        FirstCell = Split(.Cells(, FirstCol).Address, "$")(1) & Firstrow

        LastRow = .Cells(.Rows.Count, FirstCol).End(xlUp).Row
        LastCol = .Cells(Firstrow, .Columns.Count).End(xlToLeft).Column

        LastCell = Split(.Cells(, LastCol).Address, "$")(1) & LastRow

        Set RngSelect = ws.Range(FirstCell & ":" & LastCell)

        Debug.Print RngSelect.Address
    End With

    '
    '[more code to copy as text on Notepad the selection]
    '
End Sub

ただし、まだ関数が必要な場合は、これを参照してください。

Dim wb As Workbook
Dim ws As Worksheet

Sub test()
    Dim Firstrow As Long, FirstCol As Long
    Dim FirstCell As String, LastCell As String
    Dim RngSelect As Range

    Firstrow = 16: FirstCol = 20

    '~~> Change this to the relevant path
    Set wb = Workbooks.Open("C:\wb.xlsx")
    Set ws = wb.Sheets("Sheet1")

    With ws
        FirstCell = Split(.Cells(, FirstCol).Address, "$")(1) & Firstrow
        LastCell = FindLastCell(FirstCol, Firstrow)
        Set RngSelect = ws.Range(FirstCell & ":" & LastCell)

        Debug.Print RngSelect.Address
    End With

    '
    '[more code to copy as text on Notepad the selection]
    '
End Sub

Public Function FindLastCell(ByVal int1 As Long, ByVal int2 As Long) As String
    Dim LastRow As Long, LastCol As Long

    With ws
        LastRow = .Cells(.Rows.Count, int1).End(xlUp).Row
        LastCol = .Cells(int2, .Columns.Count).End(xlToLeft).Column
        FindLastCell = .Cells(LastRow, LastCol).Address
    End With
End Function
于 2013-10-29T18:06:57.187 に答える