Page 676 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼Do Until Loopと Ifの組あわせ方おしえて... kenken 03/1/30(木) 2:33 ┗Re:Do Until Loopと Ifの組あわせ方おしえ... ポンタ 03/1/30(木) 2:53 ┗Re:Do Until Loopと Ifの組あわせ方おしえ... kenken 03/1/31(金) 2:03 ┗Re:Do Until Loopと Ifの組あわせ方おしえ... ポンタ 03/1/31(金) 9:55 ┗Re:Do Until Loopと Ifの組あわせ方おしえ... kenken 03/2/3(月) 3:21 ┗Re:Do Until Loopと Ifの組あわせ方おしえ... ポンタ 03/2/3(月) 11:18 ┗Re:Do Until Loopと Ifの組あわせ方おしえ... kenken 03/2/4(火) 23:54 ─────────────────────────────────────── ■題名 : Do Until Loopと Ifの組あわせ方おしえて... ■名前 : kenken ■日付 : 03/1/30(木) 2:33 -------------------------------------------------------------------------
お世話になってます。 もし、おわかりになるかたがいらっしゃればぜひ教えてください! ※下記で Else ActiveCell.Offset(1).Select End If のところで実行エラー1004がでてしまいます! 何が問題なのでしょうか? いろいろ構文を変えてためしたのですが、 うまくいきません! ※FDを開く Workbooks.OpenText Filename:="A:\FD.TXT", DataType:= _ xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _ Tab:=True, Semicolon:=False, Comma:=True, Space:=False, Other:=False _ , FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array (4, 1), Array(5, 1)) ※'FDからシートにコピー Worksheets("FD").Move Before:=Workbooks(MyBook).Sheets(1) Worksheets("FD").Range("E1:E201").Copy Worksheets("FD").Range("A2").PasteSpecial Paste:=xlValues Worksheets("FD").Range("B1:C201").Copy Worksheets("変換fd").Range("C2").PasteSpecial Paste:=xlValues Worksheets("変換fd").Select Range("C1").Select Do Until ActiveCell.Value = " " If ActiveCell.Offset(, -1).Value = " " Then With ActiveCell .Offset(, 2).Formula = _ "=IF(VLOOKUP($C:$C,商品コード!$A:$C,2,FALSE)=""変換"",0,VLOOKUP($C:$C,商品コード!$A:$C,3,FALSE)/$D:$D)" .Offset(1).Select ' End With Else ActiveCell.Offset(1).Select End If Loop End Sub |
65536行まで行っちゃったじゃないですか? Do Until ActiveCell.Value = " " を Do Until ActiveCell.Value = " " Or ActiveCell.Row > Range("C65536").End(xlUp).Row に変えるとどうなりますか? |
▼ポンタ さん:有難うございます! 実行エラーではなくなったのですが… でも、値がでなくなってしまいました! >65536行まで行っちゃったじゃないですか? > >Do Until ActiveCell.Value = " " >を >Do Until ActiveCell.Value = " " Or ActiveCell.Row > Range("C65536").End(xlUp).Row >に変えるとどうなりますか? 実行エラーはなくなったのですが… E列の値がでないのに終了してしまいます。 IF〜が実行されないのです! 超初心者で申し訳ありません! 参考書どおり忠実に、組んだはずなんですが… ご迷惑をおかけいたしますが、アドバイスお願いいたします。 |
Worksheets("変換fd").Select : : Loop までを、以下のようにFor〜Nextに書き換えるとどうなります? With Worksheets("変換fd") .Select For i = 1 To .Range("C65536").End(xlUp).Row If .Cells(i, 3).Value <> " " And .Cells(i, 2).Value = " " Then Cells(i, 5).Formula = _ "=IF(VLOOKUP($C:$C,商品コード!$A:$C,2,FALSE)=""変換"",0,VLOOKUP($C:$C,商品コード!$A:$C,3,FALSE)/$D:$D)" End If Next End With あと、条件が ActiveCell.Value = " " のように半角スペース1つになってますが、 これでよいのですか? 空白、半角スペース2つ以上、全角スペース、これらは表示上は " "と同じですが、別の値として処理されます。 ご確認ください。 |
▼ポンタ さん:ありがとうございます。結局原因はスペースのようでした! >ActiveCell.Value = " " >のように半角スペース1つになってますが、 >これでよいのですか? > 空白にしたつもりだったんですが… これで、関数まではうまくいったんですが… なぜか、関数の複写が一行おきになってしまいました?? なぜか、わかりますが Do Until ActiveCell.Value = "" With ActiveCell .Offset(, 2).Formula = _ "=IF(TYPE(VLOOKUP($C:$C,商品コード!$A:$C,3,FALSE))=16,$D:$D,$D:$D/VLOOKUP($C:$C,商品コード!$A:$C,3,FALSE))" .Offset(1).Select End With ActiveCell.Offset(1). Select Loop また、教えていただいた、Forを以下の様に実行したら、 実行エラー1004になってしまいました。 With Worksheets("変換fd") .Select Dim i As Integer For i = i To Range("C65536").End(xlUp).Row If Cells(i, 3).Value <> "" Then Cells(i, 5).Formula = _ "=IF(TYPE(VLOOKUP($C:$C,商品コード!$A:$C,3,FALSE))=16,$D:$D,$D:$D/VLOOKUP($C:$C,商品コード!$A:$C,3,FALSE))" End If Next End With ご迷惑をおかけしまして、申し訳ありませんが、 またアドバイスよろしくお願いいたします。 本日、会社に保存してあるファイルで再度実験してみます… |
>なぜか、関数の複写が一行おきになってしまいました?? Do Until ActiveCell.Value = "" With ActiveCell .Offset(, 2).Formula = _ "=IF(TYPE(VLOOKUP($C:$C,商品コード!$A:$C,3,FALSE))=16,$D:$D,$D:$D/VLOOKUP($C:$C,商品コード!$A:$C,3,FALSE))" .Offset(1).Select ↑ここで1行下をアクティブにしている End With ActiveCell.Offset(1). Select ↑ここで、もう1行下をアクティブにしている Loop ↑のような理由によるものではないでしょうか? >また、教えていただいた、Forを以下の様に実行したら、 >実行エラー1004になってしまいました。 Dim i As Integer を Dim i As Long にするとどうですか? #Do〜Loopがうまくいったらこちらの問題は解決しなくても良いかもしれませんが・・・。 |
▼ポンタ さん:本当にありがとうございました! 初めてマクロらしきものが完成して感激してます! また、なにかありましたら、アドバイスよろしくおねがいします! |