0

私はチェックボックスを持っていて、次のようなイベントをクリックします:

If CheckBox1.Value = True Then
Range("H5:H38").Value = Range("H4").Value

H38までの列値h5がセルh4の値と同じになるようにします。


If CheckBox1.Value = False Then

ここで、配列内の値 H5: H38 を知る必要があります。これにより、ユーザーがチェックボックスをオフにしたときに、イベントの前と同じ値が返されます。つまり、値 h5 を変換する前に: h4 に含まれる値の H38 は、ユーザーがチェックボックスをオフにした場合にアクションを元に戻すことができるように、値を配列に保存する必要があります。助けてくれてありがとう。

4

2 に答える 2

1

任意の範囲を配列に変換する関数を次に示します。

Public Function CreateArrayFromRange(yourRange As Range)
Dim retVal() As Variant, xCell As Range, upperIndex As Integer, tic As Integer

    If yourRange.Cells.Count > 0 Then
        upperIndex = yourRange.Cells.Count - 1
        ReDim retVal(0 To upperIndex)
        tic = -1
        For Each xCell In yourRange
            tic = tic + 1
            retVal(tic) = xCell.Value
        Next xCell
        CreateArrayFromRange = retVal
    Else
        CreateArrayFromRange = Array("ERROR")
    End If

End Function

これの実装は次のようになります。

Dim myArray()
myArray = CreateArrayFromRange(Range("H5:H38"))
于 2012-10-01T22:19:19.503 に答える
0

これは、あなたが要求したことを行うための抜粋です。方法を知る必要があると言ったので、これがどのように機能するかを完全に明確にするために、数行の前にいくつかのコメントを追加しました。

Option Explicit
'Declare a private variant to store the range formulas
'Variable is declared as private so that it remains in scope within the module
'Variable could also be declared as static within the sub with the same results.
Private rangeFormulas As Variant
Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
    'Transfer the range formulas to the variant.
    rangeFormulas = Range("H5:H38").Formula
    Range("H5:H38").Value = Range("H4").Value
Else
    'Restore the formulas from the private variant variable.
    Range("H5:H38").Formula = rangeFormulas 
End If
End Sub

技術的には、 と を使用することもできrangeFormulas = Range("H5:H38").ValueましRange("H5:H38").Value = rangeFormulasたが、代わりに数式を元に戻した方が同じ結果が得られるのではないかと考えました。

于 2012-10-01T00:26:16.277 に答える