0

再確認:私はExcelのvba初心者なので、我慢してください...

非連続範囲変数の単一のセルにアクセスし、その値を変更する必要があります。

連続していない範囲変数をループするシーケンシャルな方法はありませんか?

例えば:

rng = Range("d1:d6, d12")  

この範囲には7つのセルがありますが、「cells」関数は7番目のセルをd7と見なすため、この範囲のセルをループすることはできません。または私は他の方法でできますか?

範囲をジャンプしてその中の値を変更するには、範囲自体以外の別の変数を使用する必要があるため、FOREACHを使用できません。

だからここに私がやろうとしていることの機能していない例があります:

' If I could access a range like an array

    rng(1) = Application.InputBox(prompt:="Enter customer's name: ", Title:="CUSTOMER NAME", Type:=2)
    rng(2) = Application.InputBox(prompt:="Enter travel out date: ", Title:="TRAVEL OUT DATE", Type:=1)
    rng(3) = Application.InputBox(prompt:="Enter travel back date: ", Title:="TRAVEL BACK DATE", Type:=1)
    rng(4) = Application.InputBox(prompt:="Enter number of technicians: ", Title:="TECHNICIANS", Type:=1)
    rng(5) = Application.InputBox(prompt:="Enter number of engineers: ", Title:="ENGINEERS", Type:=1)
    rng(6) = Application.InputBox(prompt:="Enter location: ", Title:="LOCATION", Type:=2)
    rng(7) = Application.InputBox(prompt:="Enter todays date: ", Title:="TODAY'S DATE", Type:=1)

セルの値を個別に操作するだけでなく、セルの値を変更して、リロードのプロセスを経ることなくそのセルに反映させたいので、配列を使用したくありません。配列の内容が範囲内にあるため、とにかく同じ問題が発生します。

助言がありますか?

4

3 に答える 3

1

うーん、これはどうですか?

Sub test()

  Dim Arr() As String         ' dynamic array,
  ReDim Arr(Selection.Count)  ' ... properly sized
  i = 0
  For Each c In Selection
    i = i + 1
    Arr(i) = c.Address        ' save each cell address
  Next c

  ' now we can reference the cells sequentially
  Range(Arr(1)) = Application.InputBox(prompt:="Enter customer's name: ", Title:="CUSTOMER NAME", Type:=2)
  Range(Arr(2)) = Application.InputBox(prompt:="Enter travel out date: ", Title:="TRAVEL OUT DATE", Type:=1)
' ...

End Sub
于 2012-07-21T18:40:14.600 に答える
1

スプレッドシート自体でアクセスしたいセルを強調表示すると、次のことができます。

Sub accessAll()
    Dim cell As Range
    For Each cell In Selection
        (do something here)
    Next cell
End Sub

これは、強調表示した各セルを取得し、それに何かを行います。

于 2012-07-21T15:48:12.420 に答える
0

非規則的または非連続的な範囲は、Areas規則的な長方形のサブ範囲を表しています。編集: 2 つのエリアが重複する可能性があることに注意してください。以下のコードを使用する場合は注意してください...

Dim a as range, c as range

For each a in yourRange.Areas
    For each c in a
      'something with c
    Next c
Next a

編集: 関数を使用して、範囲から n 番目のセルを取得できます。

範囲のサイズを超えるインデックスを要求すると、これは Nothing を返すことに注意してください。

'get the n'th cell from a non-contiguous range
'probably not efficient for large ranges...
Function NthCell(rng as Range, n as integer) as Range
    Dim i as integer, c as Range
    Dim rv as Range

    i=1
    for each c in rng.Cells
        if i=n then
            Set rv=c
            Exit For
        end if
    Next c

    Set NthCell=rv
End Function


'Sample usage:
Set rng = Range("D1:D6,D12")
NthCell(rng, 1).Value = ....
NthCell(rng, 7).Value = ....
于 2012-07-21T16:12:12.270 に答える