• ベストアンサー

古いエクセルのマクロについて

エクセルのマクロについての質問です。 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"です。 初心者なのですが、ご親切な方、教えていただけると助かります。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.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)
回答No.1

こんばんは。 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

関連するQ&A