- ベストアンサー
古いエクセルのマクロについて
エクセルのマクロについての質問です。 Excel2000を使用しています。 昔のロータス123のマクロのようにシートに命令が書いてあって、それをVBに書き直そうと思っているのですがどうやって書いたらよいのかわからなくて困っています。 中身ですが、sheet1に数値が入っており、参照するセルは a5,c9,c18,h20,h21 です。 次に、Macroというシートがあって、その中身が 行 A列 1 OK 2 vol=10 3 ERR=0.00001 4 =FOR("COUNTER",1,50) 5 =Sheet1!$C$9-Sheet1!$H$21 6 =IF(ABS(A5)<ERR) 7 =RETURN() 8 =END.IF() 9 vol=vol+A5/Sheet1!$C$18 10 =SELECT(Sheet1!$H$20) 11 =FORMULA(vol) 12 =NEXT() 13 =RETURN() です。 マクロ名は"OK"です。 初心者なのですが、ご親切な方、教えていただけると助かります。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
実際には回答1のようなコードになると思いますが 比較するためにちょと冗長になりますが、 提示のコードとVBAのコードの行番号を合わせてみました。 同じ行番号が同じ意味のコードになります。 '---------------------------------------------- 1 Sub OK() Dim dblVol As Double Dim dblErr As Double Dim myVal As Double Dim i As Integer 2 dblVol = 10 3 dblErr = 0.00001 4 For i = 1 To 50 5 myVal = Sheets("Sheet1").Range("C9").Value - Sheets("Sheet1").Range("H21").Value 6 If Abs(myVal) < dblErr Then 7 Exit Sub 8 End If 9 dblVol = dblVol + myVal / Sheets("Sheet1").Range("C18").Value 10 Sheets("Sheet1").Range("H20").Select 11 ActiveCell.Value = dblVol 12 Next i 13 End Sub '------------------------------------------- 質問者の行番号7のReturnは、VBAではEnd Subと似たようなものですが VBAでは、Sub~End Subの間にさらにEnd Subは書けないので 最後(End Sub)へ飛ばす、即ちそこを抜ける(Exit Sub)となります。 ただ、意味も分からずに回答まる写しでは何でしょうから 「4.0マクロ」をキーにしてネット検索してみてください。 ヒットしたサイトを眺めてみることをお奨めします。
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 VBAのコードとしては、不完全かもしれませんが、なるべく同じ変数にして内容も似せました。ただし、Err とA5 は、VBA関数とセル名ですから、使わないようにしました。 ただ、せっかくVBAにしてもプロシージャにしても、セルを使っている限りは、スピードはあまり変わらないですね。 >sheet1に数値が入っており >a5,c9,c18,h20,h21 です。 A5 は、Sheet1のA5のことではなく、=Sheet1!$C$9-Sheet1!$H$21 の戻り値です。 なお、Ver4 マクロ関数のHelp は、英語でしたら、Microsoft ダウンロードに残っているはずです。 '----------------------------------------------- Sub vbaOK() Dim dbVol As Double Dim dbERR As Double Dim iCounter As Integer Dim dbA5 As Double Dim Sh1 As Worksheet Set Sh1 = Worksheets("Sheet1") dbVol = 10 dbERR = 0.00001 For iCounter = 1 To 50 dbA5 = Sh1.Range("C9").Value - Sh1.Range("H21").Value If Abs(dbA5) < dbERR Then Exit For Else dbVol = dbVol + dbA5 / Sh1.Range("C18").Value Sh1.Range("H20").Value = dbVol End If Next Set Sh1 = Nothing End Sub