0

PatricK のコメントに対する編集については、末尾を参照してください。

これが基本的な質問である場合は申し訳ありませんが、私はこのサイトや他のサイトを調べていて、答えが見つかりません.

これは VBA 配列への私の最初の進出であり (私は一般的に VBA に不慣れです)、いくつかの構文に苦労しています。ワークシートから配列にいくつかのデータ (単一の列の一部) を読み込んで処理し、別のシートに書き込んでから、最初のシートから読み取ったデータで配列を上書きしようとしています。重要なポイントの 1 つは、反復ごとに読み取られるデータ ポイントの数が変化することです (たとえば、最初のループでは 4 つのデータ ポイント、2 番目のループでは 3 つのデータ ポイントなど)。そのため、配列のサイズも変更する必要があります。

コードでの私の試みは最初の反復で機能しますが、配列を空白のままにして、2 番目のループでデータを取得していないようです。これが私のコードです(これが適切にフォーマットされていない場合は申し訳ありません。現在、電話からしかインターネットにアクセスできません!):

Looping...

Dim DataSubSet

With ActiveWorkbook.Worksheets("Sheet1").Range("A" & CStr(I) & ":A" & CStr(io))
ReDim DataSubSet(1 To .Rows.Count, 1 To .Columns.Count)
DataSubSet = .Range ("A" & CStr(I) & ":A" & CStr(io))
End With

**Do processing** 

End loop

ここで i と io は、関心のあるセルを決定する変数です。それらはそれぞれ、包括的なループで変化します。

前述したように、これは最初の反復でのみ機能します。私が間違っていた場所についての指針をいただければ幸いです。

前もってありがとう、サム

-------------------------------------------------- ----------------------------------

パトリック、さらに明確にするために、あなたの要点を説明するために私がノックアップした簡単なルーチンを次に示します.

** フォーマット チェックに失敗した (まだ電話で書いている) ため、投稿できませんでした。テキスト ファイル内のコードへのドロップボックス リンクを次に示します。

https://db.tt/E0btoI5f

4

1 に答える 1

0

一度機能した理由の 1 つは、「処理を行う」コードが別のワークブックをアクティブ化したことが原因である可能性があります。また、2D 配列を使用して 1D 配列の値を格納する理由もわかりません。

しかし、試してみてください:

Dim oWB as Workbook
' Loop Start

Set oWB = ActiveWorkbook
'Or Set oWB = Workbooks("<workbook name you are trying to get the data from>")    
With oWB.Worksheets("Sheet1").Range("A" & i & ":A" & io)
    ReDim DataSubSet(1 To .Rows.Count, 1 To .Columns.Count)
    DataSubSet = .Value
End With

' Do Processing and finish loop above this line
Set oWB = Nothing

のテストデータSheet1:

テストデータ

変数を見てくださいDataSubSet(私は と を設定i = 3しましたio = 10):

ウォッチ出力

于 2013-09-30T06:36:55.743 に答える