1

ボタンを押すとデータの行が追加され、計算に必要なパラメーターを要求するスプレッドシートを作成する必要がありますが、次の行にデータを入力することはできませんか? 私はExcelのマクロの完全な初心者であり、ユニコースでmatlabの非常に基本的なプログラミングしか行っていません。これまでの私のスクリプトは次のとおりです。

Sub AddPosTol()

' AddPosTol Macro


Dim rngSeek As Range

Set rngSeek = Range("B1")

While rngSeek <> ""
    'If the cell isn't empty, drop down one row:
    rngSeek = rngSeek.Offset(1, 0)
End

With rngSeek.Offset(0, 1)
   With .Font
       .Name = "Solid Edge ANSI1 Symbols"
       .Size = 11
       .Value = 1
   End With                                            <--added this

End With

'don't need to call Range() around rngSeek - it is already a range type

rngSeek.Offset(0, 3) = "=RC[-1]"
rngSeek.Offset(0, 4) = "0"

With rngSeek.Offset(1, 1)
    .Font.Bold = True                <--don't really need a With if only one statement
End With

'can use a With statement here if you want:

With rngSeek

    .Offset(1, 1) = "X value"
    .Offset(2, 1) = "Y Value"

    .Offset(0, 4) = "=2*SQRT((R[1]C[-3]-R[1]C)^2+(R[2]C[-3]-R[2]C)^2)"
    .Offset(0, 5) = "=2*SQRT((R4C3-R[1]C)^2+(R5C3-R[2]C)^2)"
    .Offset(0, 6) = "=2*SQRT((R[1]C[-3]-R[1]C)^2+(R[2]C[-3]-R[2]C)^2)"
    .Offset(0, 7) = "=2*SQRT((R[1]C[-3]-R[1]C)^2+(R[2]C[-3]-R[2]C)^2)"
    .Offset(0, 8) = "=2*SQRT((R4C3-R[1]C)^2+(R5C3-R[2]C)^2)"

    .Offset(0, 2) = (InputBox("Insert Positional Tolerance Diametre"))
    .Offset(1, 2) = (InputBox("Insert X value on drawing"))
    .Offset(2, 2) = (InputBox("Insert Y value on drawing"))

End With

End Sub
4

1 に答える 1

1

OK、あなたのコードを少しリファクタリングして読みやすくし、あなたの質問にも答えてみます。

まず、現在入力している行数ではなく、ワークシートの行数lastrow = Worksheets("Sheet1").Rows.Countが返されると思います。その行を実行すると、1048576 が返されました。最初の空の行を見つけるには、各行に確実に値が入力されている列を見つける必要があります。次に、その列を循環して空のセルを探します。これが最初の空の行です。

Dim rngSeek as range

set rngSeek = Range("A1") <--your starting cell

While rngSeek <> ""
    'If the cell isn't empty, drop down one row:
    rngSeek = rngSeek.Offset(1, 0)
Wend

'rngSeek is now sitting at the first row that has a blank in column A

したがって、この手法は、探している最初の行を見つけます。次に、その行にデータを入力します。上記のコード スニペットの他の要素を利用して、更新時に作業を簡単にすることができます。具体的には、次の.offsetメソッドです。

あなたのコード:

With rngSeek.offset(0, 2)
    With .Font
        .Name = "Solid Edge ANSI1 Symbols"
        .Size = 11
    End With

    .value = 1
End With

'repeat for all cells: no need to select them first, just use .offset

参考まで.Offsetに、次のようになります。

Range("Cell Reference").Offset(rows, columns)

「Cell Reference」には「A1」や「D24」などの任意のセルを指定できます。rowsは右にオフセットする行数(左にオフセットするには負の数を使用)、columns はオフセットする列数です。ダウン(上にオフセットするにはマイナスを使用)。したがって、.offset(0, 0)オフセットの値はどこにもありません。

編集:列 A を使用して最初の空白セルを探すことはできません。その場合は、offset値を変更するセルを反映するように値を調整します。値 1 は 1 列右または 1 行下にオフセットし、-1 は 1 列または 1 行にオフセットします。

追加:Range("A1").End(xlDown)ループの代わりに使用して、最初の空白のセルを見つけることをお勧めします。範囲変数をこれに等しく設定し、ループを次のように置き換えます。

set rngSeek = Range("A1").End(xlDown).Offset(1, 0)

rngSeekその後、上記の方法を使用できます。(rngSeek任意の変数名に名前を変更することもできます)。

于 2013-07-24T09:13:10.733 に答える