Page 707 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼配列の1/1000の値をシートに貼り付けるには? ハマゾウ 03/2/8(土) 17:29 ┣Re:配列の1/1000の値をシートに貼り付けるには? りん 03/2/8(土) 17:57 ┃ ┗Re:配列の1/1000の値をシートに貼り付けるには? ハマゾウ 03/2/8(土) 22:06 ┃ ┗Re:配列の1/1000の値をシートに貼り付けるには? りん 03/2/8(土) 23:50 ┃ ┗Re:配列の1/1000の値をシートに貼り付けるには? ハマゾウ 03/2/9(日) 0:05 ┗Re:配列の1/1000の値をシートに貼り付けるには? Mr.M 03/2/8(土) 21:57 ┗Re:配列の1/1000の値をシートに貼り付けるには? ハマゾウ 03/2/8(土) 23:04 ─────────────────────────────────────── ■題名 : 配列の1/1000の値をシートに貼り付けるには? ■名前 : ハマゾウ <hama@mb.town.yatsuo.toyama.jp> ■日付 : 03/2/8(土) 17:29 ■Web : http://www.cty8.com/nsha3921/Home/index.htm -------------------------------------------------------------------------
Single型やDouble型を使わずに、長整数型(Long)配列の1/1000の値をシートに貼り付けるにはどのようにすればよいのでしょうか? 以下のコードが思いついたのですが、もっと簡単な方法は無いものでしょうか? ご教授願います。 Sub sample() Dim data(9, 9) As Long Dim i As Integer Dim j As Integer For i = 0 To 9 For j = 0 To 9 data(i, j) = i * j Next j Next i With Sheets("sheet1") .Range(.Cells(2, 1), .Cells(11, 10)) = data() .Range("A1").Copy .Range(.Cells(2, 1), .Cells(11, 10)).PasteSpecial Paste:=xlAll, Operation:=xlDivide End With End Sub |
ハマゾウ さん、こんばんわ。 >Single型やDouble型を使わずに、長整数型(Long)配列の1/1000の値をシートに貼り付けるにはどのようにすればよいのでしょうか? >以下のコードが思いついたのですが、もっと簡単な方法は無いものでしょうか? >ご教授願います。 Longで配列をきらなければいけない理由がよくわかりませんが。 >Sub sample() Dim data(9, 9) As Currency > Dim i As Integer > Dim j As Integer > > For i = 0 To 9 > For j = 0 To 9 data(i, j) = i * j / 1000 > Next j > Next i > > With Sheets("sheet1") .Range(.Cells(2, 1), .Cells(11, 10)) = data() > End With >End Sub どうしてもLongで処理したい理由がある(ほかの計算でつかうなど)場合は、同時にVariant(Currency,Double)で、セルにペーストするための配列を同時に宣言して処理をするほうが、セルに入れた後で演算するよりも処理が速いです。 |
▼りん さん、ご返答ありがとうございます。 実は、縦65×横250のテーブルの計算を繰り返し行う処理を作成しています。 ご指摘のとおり、計算はシート上ではなく配列を使って行っており、すべての計算が終わってからシートに貼り付ける方法をとっています。小数点以下を含む数字を扱っているので、現状ではSingle型を使っているのですが、ケタ落ち誤差を解消する処理が必要となるため満足できる処理速度が得られていません。そのため、計算速度が速く、ケタ落ち誤差の生じないLong型を使いたいのです。計算精度は小数点以下3桁程度で十分なので、1000倍の整数として計算しておき、貼り付ける際に1/1000に戻そうと考えています。 何か良い方法はございませんでしょうか? |
ハマゾウ さん、こんばんわ。 >ケタ落ち誤差の生じないLong型を使いたいのです。計算精度は小数点以下3桁程度で十分なので、1000倍の整数として計算しておき、貼り付ける際に1/1000に戻そうと考えています。 もう解決しているようですが。 小数3桁ならば通貨型(Currency)を使えばいいですよ。 |
▼りん さん: > もう解決しているようですが。 > 小数3桁ならば通貨型(Currency)を使えばいいですよ。 通貨型でも誤差が生じないので、今回の場合は適しているのですね。 いろいろな方法を教えていただき、ありがとうございました。 |
おじゃまします。 こんな方法もあるかもしれません。 Sub test() Range("A1:C10").Value = Evaluate("A1:C10/1000") End Sub 的はずれでしたらすいません。 |
▼Mr.M さん: 的射抜いております。 どうもありがとうございました。 |