- ベストアンサー
エクセルVBAでの計算結果が異なる理由
- エクセルVBAで計算を行う際に発生する結果の違いについて、具体的な例を挙げながら解説します。
- VBAの場合、計算の際に浮動小数点数の精度が限定されているため、細かな計算結果の差異が生じることがあります。
- この差異は、計算に使用する数値の桁数や計算式の組み立て方によっても影響を受けることがあります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (3)
- chie65535
- ベストアンサー率43% (8539/19415)
- K Kazz(@JazzCorp)
- ベストアンサー率31% (549/1751)
- K Kazz(@JazzCorp)
- ベストアンサー率31% (549/1751)
関連するQ&A
- エクセルでくんだVBAマクロが途中でとまるのですが、
エクセルでくんだVBAマクロが途中でとまるのですが、 どこがおかしいかご指摘して頂けませんでしょうか? 以下のプログラムは セル(19.6)にxの値を代入し、 E24にそれに対応したyを出力させるプログラムです。 あと余談となりますが、 繰り返し構文は同時に複数の変数はできないのでしょうか? 例えば以下のものは変数iをステップ0.1で加算していますが それに対応して表示させるセルを一つずつずらすために 変数kを指定してfor構文を連立させようとしたのですが うまくいきませんでした。 Sub k() Dim i As Double For i = 0 To 10 Step 0.1 Cells(22 + 10 * i, 7).Value = i Cells(19, 6).Value = i Range("H" & 10 * i + 22).Value = Range("E24").Value Next i End Sub
- ベストアンサー
- Visual Basic
- VBA(エクセル)のコンパイルエラー
お世話になります。 下記のマクロを記述したのですが、ウエから7行目の mid(Cells(i, colNum + 1).Value, 7, 11) のところで、下記のようなコンパイルエラーが出てしまいます。 試しに".Value"をとっても見ましたが、結果は同じでした。 どこをどう直せばよろしいのでしょうか、よろしくご指南くださいませ。 Sub mid_ac() Dim i As Integer Dim colNum As Integer i = 2 colNum = ActiveCell.Column Do Until Cells(i, 1).Value = "" Cells(i, colNum).Value = mid(Cells(i, colNum + 1).Value, 5, 10) i = i + 1 Loop End Sub コンパイルエラー: モジュールではなく、変数またはプロシージャを指定してください (ちなみに、このマクロは選択したセルの右隣にあるセルの左から5文字目~10文字目までを、表示させるものです。答えて下さる方には老婆心かもしれません。。。)
- 締切済み
- オフィス系ソフト
- VBAの得意な方、教えてください(初心者です)
エクセルのシートが セルA1に1 セルA2に2 セルA3に3 セルA4に4 セルA5に5 という数字が入っています。 で、セルD4には"=D2*5"という数式が入っています。 セルD2にA1の数値を代入して、出てきた数値をB1に入力、 次にD2にA2の数値を代入して、出てきた数値をB2に入力…以下続く というのをVBAで書いてみたら、下のような感じになりました。 Sub test() Dim d1 As Integer Dim d2 As Integer Dim d3 As Integer Dim d4 As Integer Dim d5 As Integer Dim p1 As Integer Dim p2 As Integer Dim p3 As Integer Dim p4 As Integer Dim p5 As Integer d1 = Cells(1, 1).Value Cells(2, 4).Value = d1 p1 = Cells(4, 4).Value Cells(1, 2).Value = p1 d2 = Cells(2, 1).Value Cells(2, 4).Value = d2 p2 = Cells(4, 4).Value Cells(2, 2).Value = p2 d3 = Cells(3, 1).Value Cells(2, 4).Value = d3 p3 = Cells(4, 4).Value Cells(3, 2).Value = p3 d4 = Cells(4, 1).Value Cells(2, 4).Value = d4 p4 = Cells(4, 4).Value Cells(4, 2).Value = p4 d5 = Cells(5, 1).Value Cells(2, 4).Value = d5 p5 = Cells(4, 4).Value Cells(5, 2).Value = p5 End Sub ここで質問です。 例では5個しかないのですが、実際は100行くらいのデータなんで 大変です。もっと簡単にする方法はありますか? 実際のセルD4の数式は、他からも参照したりしているので、 ここはいじらずに教えてください。 Excel2000、Visual Basic 6.0 ってのを使っています。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- VBAにて計算式をセルへ代入できなくて困っています
計算式を変数QRdataへ代入し その変数から指定のセルへ入力するとき、実行時エラー1004となってしまい マクロを実行できずに困っています。 Cells(3, 6).ValueもRange("F3").Fourmulaと変えたりしたのですが解決方法が解らなく どうか御教授下さい。 Dim コードナンバー As String Dim 品名1行 As String Dim QRdata As String QRdata = "=("& Chr(34) & コードナンバー & 品名1行 & Chr(34) & ",1)" Cells(3, 6).Value = QRdata ←ここでエラーとなってしまいます。
- ベストアンサー
- Visual Basic
- エクセルVBAのコピーがうまく出来ません
セルD3:D101に楽天SPのRSS数式の数値が表示されてきます。 3分おきにマクロを実行させ右側の列に順次データを追加していきたいのですが以下のマクロでは3分後にはセルE3:E101へ数式を含む全てがコピーされてしまい値だけをコピーできません。たぶん構文のCopy Cells(3, c + 1)を変更しなくてはいけないと思い試行錯誤したのですが分かりません。 どなたか教えてください。 Private Sub Macro1() Dim nextTime As Date Dim c As Date Dim d As Date Range("D3:D101").Select Selection.Copy c = Range("iv3").End(xlToLeft).Column d = Range("D65536").End(xlUp).Row Range(Cells(3, "D"), Cells(d, "D")).Copy Cells(3, c + 1) Columns("D:D").Select Application.CutCopyMode = False nextTime = Now() + TimeValue("00:03:00") Application.OnTime nextTime, "Macro1
- 締切済み
- オフィス系ソフト
- エクセル:VBA:マクロコード
エクセルVBAで、 (質問1) マクロでsheet1のデータを処理して、sheet2に結果を表示するマクロで最初にsheet2をクリアーするというのはどうコードしますか。 (質問2) マクロでsheet1のセル/データを使ったりsheet2のセル/データを使ったりしますが、データはどう切り替えるのですか。 常に今どちらのシートのことを問題にしているか宣言するのですか。 その場合、 例えば今sheet1を扱ってるとした場合にsheet2のデータCells(10, "D")をsheet1のセルCells(10, "D")に入れる場合、 Cells(10, "D")=Sheets("sheet2").Cells(10, "D")こうなりますか。
- ベストアンサー
- オフィス系ソフト
- エクセルVBAについて
前回質問させていただきました件の追加機能になります。以前質問させていただきましたマクロが下記のものです。 Sub TESTa() Dim A As Long Dim B As Long Dim C As Long Dim D As Long Dim E As Long Dim F As Long '表の行数を調べる A = Worksheets("sheet1").Range("C65536").End(xlUp).Row - 1 For C = 1 To A For B = 4 To 7 'Sheet1のデータをSheet2に複写する Worksheets("Sheet2").Cells(B - 3 + D, 15) = Worksheets("Sheet1").Cells(C + 1, 1) Worksheets("Sheet2").Cells(B - 3 + D, 6) = Worksheets("Sheet1").Cells(C + 1, B) Worksheets("Sheet2").Cells(B - 3 + D, 14) = Worksheets("Sheet1").Cells(C + 1, 3) Worksheets("Sheet2").Cells(B - 3 + D, 10) = Worksheets("Sheet1").Cells(1, B) Worksheets("Sheet2").Cells(B - 3 + D, 13) = Worksheets("Sheet1").Cells(C + 1, 2) Next D = C * 4 Next 'Sheet2の表の行数を調べる Sheets("Sheet2").Select E = Worksheets("sheet2").Range("F65536").End(xlUp).Row '0欄の確認 For F = E To 1 Step -1 If Worksheets("Sheet2").Cells(F, 6) = 0 Then '0の場合は行を削除する Cells(F, 1).EntireRow.Delete End If Next End Sub カウントするとデータ個数がSheet1で約120件になりSheet2においては、4倍になりますので約480件になります。 そこで Sheet1において12件ごとに、Sheet2,3,4...としたいのです。 Sh1 NO.1~12がSheet2 Sh1 NO.13~24がSheet3 ... 10枚のシートにしたいのですが、このマクロにどのような命令を加えればよろしいでしょうか? お手数ですがよろしくお願いいたします。
- 締切済み
- オフィス系ソフト
- 単純な掛け算なのにわけのわからない小数点が、、、
表題のとおりですが、EXCEL VBAでシートと複合させて計算したところ次のような結果が出ました。 マクロは以下のとおりです。 Private Sub CommandButton1_Click() Dim i As Integer Dim n As Integer Dim x As Integer Dim y As Single Dim d1 As Single Dim d2 As Single n = Range("L4").Value 'L4には現在399が入力されています。 y = Range("L2").Value 'L2には現在0.048が入力されています。 d1 = Range("D11").Value d2 = Range("E11").Value If n = 0 Then Exit Sub For i = 0 To n x = i + 6 Cells(x, 13) = i Cells(x, 14) = Cells(x, 13) * y Cells(x, 15) = Cells(x, 14) + d1 Cells(x, 16) = d2 - Cells(x, 14) x = x + 1 Next i End Sub こうするとCells(7, 14)に0.0480000004172325という数字が入り始め、 続きも同じように小数点の小さい桁にわけの分からない数字が出て来ます。いったい何が原因か分かりません。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- vbaマクロ 実行時エラー '91'について教えてください
下記のマクロで、ファイル指定保存をする時に "実行時エラー91 オブジェクト変数またはWithブロック変数が設定されていません”がでます。 やりたいのは、選択したセルの1番目をファイル名として 保存をしたいのですが、うまくいきません。 どうしたらよいのでしょうか? Sub Macro1() Dim セル As Object Dim i As Long i = 1 For Each セル In Selection Worksheets("Sheet2").Cells(1, i).Value = セル i = i + 1 Next ActiveWorkbook.SaveAs Filename:="D:\TEST\" & セル & ".xls" End Sub
- 締切済み
- Visual Basic
- EXCELのVBAについて教えてください。
演習1というシートの(1,1)のセルの値と(1,2)のセルの値を入れ替えるプログラムを作成したいので すがエラーが出て出来ません。コードは下記の様に書きました。 Sub 演習1() Dim sheetobj As Worksheet Dim a As Integer Set sheetobj = ThisWorkbook.Worksheets("演習1") With sheetobj a = .Cells(1, 1) .Cells(1, 1) = .Cells(1, 2) .Cells(1, 2) = a End With End Sub プログラミング自体が本を読んでも分かりません。 宜しければ小学生に教えるように文を訳してくれませんか?
- ベストアンサー
- その他(インターネット・Webサービス)