|
▼多摩川 さん:
>セルの値を変数1に格納し、次のセルの値を変数2に格納。
>変数2>変数1の時、Trueを返すようなコードを作成しました。
>
>Sub test1()
> Dim ws As Worksheet
> Dim aaa() As Long
> Dim i As Long
> Set ws = ThisWorkbook.Sheets(1)
> ws.Range("b:c").ClearContents
> ws.Range("c1:c20").Value = [{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20}]
> For i = 1 To ws.Range("C1").End(xlDown)
> ReDim Preserve aaa(i): aaa(i) = ws.Cells(i, 3)
> If aaa(i) > aaa(i - 1) And aaa(i - 1) <> 0 Then ws.Cells(i, 2) = "True"
> Next i
>End Sub
>
>上記のコードでは全て True を得られます。
>
>次に、セルからの取得ではなく、ファイルから値を取得し、
>上記と同じように True を得るコードを作成しました。
>aaa.txt は 1, 2, ・・・,20 と1行毎に数値があるとします。
>
>Sub test2()
> Dim ws As Worksheet
> Dim Ln As String
> Dim aaa() As Long
> Dim i As Long
> Set ws = ThisWorkbook.Sheets(1)
> i = 0
> ws.Range("a:a").ClearContents
> Open "aaa.txt" For Input Access Read As #1
> Do Until EOF(1)
> Line Input #1, Ln
> i = i + 1
> ReDim aaa(i): aaa(i) = LTrim(Left(Ln, 8))
> If i > 1 Then
> If aaa(i) > aaa(i - 1) And aaa(i - 1) <> 0 Then ws.Cells(i, 1) = "True"
> End If
> Loop
> Close
>End Sub
>
>やっていることは、同じだと思っているのですが、
>test2 では True が得られません。
>原因を教えていただけないでしょうか?
>よろしくお願いします。
ReDim Preserve aaa(i)
と
ReDim aaa(i)
の違いはわかりますか?
前の値を初期化してしまってますよ。
Long型の初期値は 0です。
なので And条件でひっかかりますね。
|
|