ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)


で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。
    • good
    • 13
この回答へのお礼

四捨五入とはいわず、worksheetFunctionという手はいろいろ使えそうですね。

ありがとうございました。

お礼日時:2007/04/19 10:36

VBAでもワークシート関数が使えますから


DMN = Application.RoundDown(ZPOS / ZPS, 1)
DMN = Application.RoundUp(ZPOS / ZPS, 1)
のように記述したらどうですか。小数点以下の桁数は変更してください
    • good
    • 3
この回答へのお礼

ありがとうございます。
なるほど、桁数の指定もできるんですね。
ありがとうございました。

お礼日時:2007/04/19 10:35

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルの関数 or VBAで

A1に入力されている任意の文字列の先頭から3番目の文字をB1にコピーする
関数 or VBAを知りたいのですが。
宜しくお願いします。

Aベストアンサー

B1に以下の式を入れれば大丈夫です。
=mid(a1,3,1)

意味としてはA1のセルの左から3番目の文字から
1文字を切り取る、です。
最後の1を例えば3とかにすると、
3番目から5番目までの文字を切り取ることになります。

QExcel でシート間の重複データ(Sheet1のA=Sheet2のA かつ Sheet1のB=Sheet2のB)

Excel2000です。

Sheet1のA列・B列・C列・・・にデータが入っています。
Sheet2のA列・B列・C列・・・にデータが入っています。

Sheet1のA列とSheet2のA列は、似たようなデータが入っています。
Sheet1のB列とSheet2のB列も、同様です。
C列以降のデータは、シート間で全然関係ありません。

Sheet1の行データ(A列・B列)が、Sheet2(A列・B列)にも存在しているかどうか、
を知るには、どうすればよいですか。
C列以降の列のデータは、比較する際に使いません。

つまり、
Sheet1のA = Sheet2のA
かつ
Sheet1のB = Sheet2のB
であるような行を知りたいのですが、

どうすればよいのでしょうか。

Aベストアンサー

Sheet1、Sheet2 ともに空いている列に =A1&B1 のような連結データを作り、Matchなどで比較するとか、、、

Sheet1 の E1 =A1&B1
Sheet2 の E1 =A1&B1
Sheet1 の F1 =MATCH(E1,Sheet2!E:E,0)

QVBAで、JPG写真の撮影日時を読み出す関数?

簡単に、指定Folderにある、*.JPGファイルの、
撮影日時を読みだす、VBA関数 or Excel関数をお教えて下さい。
(VBA初心者です)
下記の自作Codeは、見様見真似で書いたものです。
VBA関数:FileDateTime(パラメータ)で読みだした「日付時刻」は、
画像の「更新日時」でした。
**** お願 ***
Q1: 一行のCodoで、原画の「撮影日時」を読みす、関数・Codeを教えて下さい。
Q2: 関数が無ければ、それに代わる、Codeはどんなものが良いのでしょうか??
**** 自作Code ***
myFolder = "C:\Users\myName\ピクチャ\3000年JPG写真"
myJPG = Dir(myFolder & "\" & "*.jpg")
MsgBox ”読み出した日付時刻=” & FileDateTime(myFolder & "\" & myJPG)
以上 宜しくお願いいたします。

Aベストアンサー

JpegExifのクラスモジュールは問題ないです。
サイトの中でも動作確認してるでしょうし、自分のところでも動作しています。


> cdateTimeOriginal = " & cDateTimeOriginal ''機能せず???

その前のInitSetが失敗してるからです。
失敗の原因は、帰ってきた日付の値(1999年)からすると、指定したファイルが無いからです。


Dir関数使わずに、

MsgBox "MyDateTimeOriginal()=" & MyDateTimeOriginal("c:\_Temp\sample.jpg")

とか、分かりやすいフォルダやファイルを直接指定では。

QEXCELでSheet2にある名前がSheet1のどこにあるのかすぐ分かる方法

EXCELでSheet2に馬の名前があります。
例えば、クイーンズルビー
Sheet1にも同じ名前がある場合
どこにあるのかSheet2のクイーンズルビー
という名前をクリックして
Sheet1のクイーンズルビーのある所にすぐ移動する方法はありますでしょうか?Sheet1のどこかにあるのは分かっているのですが、どこにあるのかは分かりません。今の所ctrl+fで入力して探しています。列の位置はCと分かっているのですが、行がどこか分からない状態です。
バージョンはEXCEL2000です。
よろしくお願いします。

Aベストアンサー

ファイル名が「Book1.xls」とします。
「Sheet2」のA3セルに「クイーンズルビー」が入力されているとします。
B3セルに「=HYPERLINK("[Book1.xls]Sheet1!$C$"&MATCH(A3,Sheet1!C:C,0),A3)」を入力します。
B3セルをクリックする事により、移動します。

Qエクセル関数 → VBAへの変換をどうやって行えばいいでしょうか? 特に、.Formula=にエクセル関数をいれたい場合

エクセル関数 → VBAへの変換
現在、エクセル関数で記述していた以下の命令をすべてVBAに置き換える必要があります。
理由は、VBAで初期化ボタンをつくってそのボタンを押したとき、対象セルにデフォルトでエクセル関数の
式を入れたいからです。

なので、エクセル関数を以下のようにVBAにいれていました
.Cells(7, 51).Formula = "C6&E6"
しかし、これを以下のようにすると、エラーになってしまいました。
.Cells(7, 51).Formula = "C6&" "&E6" '氏名の間に半角スペースを入れたいため

同様に、以下のものがすべてエラーになります。
.Cells(8, 51).Formula = "L9&M9&"年"&N9&"月"&O9&"日""
.Cells(9, 51).Formula = "IF(OR(ISNUMBER(SEARCH("090-",C9)),ISNUMBER(SEARCH("070-",C9)),ISNUMBER(SEARCH("080-",C9))),"",C9)"

どうすればよろしいでしょうか?

エクセル関数 → VBAへの変換
現在、エクセル関数で記述していた以下の命令をすべてVBAに置き換える必要があります。
理由は、VBAで初期化ボタンをつくってそのボタンを押したとき、対象セルにデフォルトでエクセル関数の
式を入れたいからです。

なので、エクセル関数を以下のようにVBAにいれていました
.Cells(7, 51).Formula = "C6&E6"
しかし、これを以下のようにすると、エラーになってしまいました。
.Cells(7, 51).Formula = "C6&" "&E6" '氏名の間に半角スペースを入れたいため

同様に、以下...続きを読む

Aベストアンサー

> .Cells(7, 51).Formula = "C6&E6"
.Cell(7, 51).Formula = "=C6&E6"

> .Cells(7, 51).Formula = "C6&" "&E6"
.Cells(7, 51).Formula = "=C6&"" ""&E6"

> .Cells(8, 51).Formula = "L9&M9&"年"&N9&"月"&O9&"日""
.Cells(8, 51).Formula = "=L9&M9&""年""&N9&""月""&O9&""日"""

> .Cells(9, 51).Formula = "IF(OR(ISNUMBER(SEARCH("090-",C9)),ISNUMBER(SEARCH("070-",C9)),ISNUMBER(SEARCH("080-",C9))),"",C9)"
.Cells(9, 51).Formula = "=IF(OR(ISNUMBER(SEARCH(""090-"",C9)),ISNUMBER(SEARCH(""070-"",C9)),ISNUMBER(SEARCH(""080-"",C9))),"""",C9)"

ポイントとして""で囲われた文字列中で「"」を使用したい場合、「'」に置き換えるか、"あ""い""う" など""を二つ重ねるようにします。
あとFormulaを使用する場合、先頭に=を入れてあげないと文字列として処理されますのでお気をつけて。

> .Cells(7, 51).Formula = "C6&E6"
.Cell(7, 51).Formula = "=C6&E6"

> .Cells(7, 51).Formula = "C6&" "&E6"
.Cells(7, 51).Formula = "=C6&"" ""&E6"

> .Cells(8, 51).Formula = "L9&M9&"年"&N9&"月"&O9&"日""
.Cells(8, 51).Formula = "=L9&M9&""年""&N9&""月""&O9&""日"""

> .Cells(9, 51).Formula = "IF(OR(ISNUMBER(SEARCH("090-",C9)),ISNUMBER(SEARCH("070-",C9)),ISNUMBER(SEARCH("080-",C9))),"",C9)"
.Cells(9, 51).Formula = "=IF(OR(ISNUMBER(SEARCH(""090-"",C9)),ISNUMBER(SEARCH(""...続きを読む

QSheet2で選んで、Sheet1にスクロール表示

Sheet1にA1~D5範囲の書式が50書式あります。 
Sheet2にSheet1の50書式タイトルがあり、タイトルをクリックしたとき、.Sheet1に選んだ、書式がトップの位置に表示する方法を関数またはマクロをお知らせ下さい。

質問方法が悪かったので、簡略化しました、画像を添付致します。

☆ここをクリックするは、Sheet2です。
☆11行目のNO.3がトップの位置で下には、NO.4・NO.5と続きます。

Aベストアンサー

シート2のシート名タブを右クリックしてコードの表示を選ぶ
現れたシートに下記をコピー貼り付ける

private sub Worksheet_BeforeDoubleClick(byval Target as excel.range, cancel as boolean)
cancel = true
on error resume next
application.goto worksheets("Sheet1").range("A:A").find(what:=cells(target.row, 1).value, lookin:=xlvalues, lookat:=xlwhole), true
end sub

シート2のA列には、シート1に記入してあるNo.3とかと「間違いなく確実に同じ内容で」記入しておく
シート2をWクリックすると、シート1にジャンプする。

まずは「簡略化」したそれと全く同じ内容でキチンとお手元に作成し、寄せられたそれぞれの回答でしっかり実現できることを確認してから、本番は自力で頑張ってください。




#補足
「うまくいかない」だけじゃ、いったい何が気に入らないのかさっぱりわかりません。具体的にいったい「どーしたいのか」不明のままなんで、「どーすればよかったのか」も当然回答できません。次回からお気を付けを。


#補足
ご相談を補足して出しなおすのは全く問題ありません。が、その際には前のご相談は、必ず解決で閉じる操作を行ってください。ほっぽらかしはマナー違反です。

シート2のシート名タブを右クリックしてコードの表示を選ぶ
現れたシートに下記をコピー貼り付ける

private sub Worksheet_BeforeDoubleClick(byval Target as excel.range, cancel as boolean)
cancel = true
on error resume next
application.goto worksheets("Sheet1").range("A:A").find(what:=cells(target.row, 1).value, lookin:=xlvalues, lookat:=xlwhole), true
end sub

シート2のA列には、シート1に記入してあるNo.3とかと「間違いなく確実に同じ内容で」記入しておく
シート2をWクリック...続きを読む

QEXCEL VBAの日付関数について

EXCEL VBAの日付関数のことでお聞きしたいことがあります。
エクセルの関数でワークデイ関数がありますが、例えば
C1セル:
=WORKDAY(A1,10,B1:B10)

これをVBAのコードで書くと、どういうコードになるのでしょうか。
VBAの関数については詳細に書かれたテキストを持っておらず、WorksheetFunctionを使ってチャレンジしてみましたが
どうも上手くいきませんでした。
初歩的な質問かも知れませんが、どうぞよろしくお願いいたします。

Aベストアンサー

過去に同じ質問がありました。

http://oshiete1.goo.ne.jp/kotaeru.php3?q=1810554&rev=1

Qエクセル Sheet1 セルで入力したものをSheet2のセルへ

エクセルのSheet1のセル(例えばB1)に入力した文字を、
Sheet2のセルの任意のセル(例えばA5)に自動で表示させるには
どうすればいいのでしょうか? 
Sheet2のA5のセルの中で、=Sheet1!B1 と入れても「0」に
なるだけで・・・エクセルの何の機能を使えばいいのか全然分かりません。よろしくお願い致します。

Aベストアンサー

「Sheet2のA5のセル」に、=Sheet1!B1 と入れ、「Sheet1のB1セル」に何も入っていなければ「0」と表示されるのが普通です。

「Sheet1のB1セル」に何も入っていない時に「Sheet2のA5のセル」に0を表示させたくない(空欄にしたい)ならば、「Sheet2のA5のセル」に、
 =IF(Sheet1!B1="","",Sheet1!B1)
と入力してみてください。

QVBAユーザー関数を外部から制御

ExcelのVBAで、標準モジュールにワークシートで使うユーザー関数を記述しています。
ユーザー関数は、使い勝手を組み込みのワークシート関数と同様にするため、 Application.Volatile (True) で自動再計算するようにしており、数百カ所以上のセルに使用しています。
しかし、他のVBAモジュールでユーザー関数の戻り値が変わるような操作をすると、その都度
数百か所以上が再計算されるため、非常に時間がかかります。
ユーザー関数のApplication.Volatile (False) にすると瞬間で終了する処理が、数分かかる場合も
あります。
他のVBAモジュールから、一時的にユーザー関数の処理内容を変更するようなことは可能でしょうか。

Aベストアンサー

ご質問の直接の回答としては
application.calculation = xlcalculationmanual
で一旦再計算を手動に止めておき、一渡りの処理を終えたら
application.calculation = xlcalculationautomatic
で再計算させます。



ただし。
>組み込みのワークシート関数と同様にするため、 Application.Volatile (True) で自動再計算するようにしており

ごく一般論でいうと、ワークシートのセルを引数に取るユーザー定義関数で作成しておき、通常はvolatileは制御しません。

例:
public function test(byval target as range) as variant
test = 引数として渡されたセルの値を元に何某の計算を行う
end function

といった具合に工夫して作成することで、引数として与えたセルに変更を加えた(=再計算チェーンに載ってくる)場合のみ適切に再計算され、シート上の全部の当該関数が毎度毎度一斉に再計算されるみたいな事態は回避します。

ご質問の直接の回答としては
application.calculation = xlcalculationmanual
で一旦再計算を手動に止めておき、一渡りの処理を終えたら
application.calculation = xlcalculationautomatic
で再計算させます。



ただし。
>組み込みのワークシート関数と同様にするため、 Application.Volatile (True) で自動再計算するようにしており

ごく一般論でいうと、ワークシートのセルを引数に取るユーザー定義関数で作成しておき、通常はvolatileは制御しません。

例:
public function test(byval target as range)...続きを読む

QExcelでSheet1,2の各合計をSheet3に総計する

月別で営業マンの営業成績を作っています。Sheet1が一月、Sheet2が二月で、それぞれ一月の合計、二月の合計とAutosumを使ってだしています。Sheet1と2の合計をSheet3に入れたいのですが、うまくいきません。どなたか教えてください。

Aベストアンサー

sheet1とsheet2、sheet3の表のレイアウトはまったく同じですか?
それでしたら、以下の方法で可能です
例)
全てのシートのレイアウトがこのようになっているとします
A   B 
1氏名 売上
2山田 200
3鈴木 300
4加藤 400

SHEET3にSHEET1・2の合計を出すには、
Sheet3のB2をクリックし、=sum( と入力
その時sheet1の見出しとsheet2の見出しをクリック(ctrlを押しながら2つのsheetとも同時に選択)
sheet1(又はsheet2)のB2をクリック
) をクリックしenter 
という風に串刺しで合計をするわけです
1つ式ができたら後はオートフィルで下にドラッグしてコピーしてやってください


また、別の方法では
合計を出したい最初のセルをクリック(例ではB2)
データメニュー→統合をクリック
集計の方法で合計を選択
統合もとの範囲・・・sheet1をクリックしB2:B4を範囲選択し追加をクリック
sheet2クリックしB2:B4を範囲選択し追加をクリック
OKをクリックでできます。
しかし、この方法ですと関数で出しているわけではないので、sheet1やsheet2の数値が変更された場合、また同じ作業をする必要が出てきます

これでお答えになってますか?

sheet1とsheet2、sheet3の表のレイアウトはまったく同じですか?
それでしたら、以下の方法で可能です
例)
全てのシートのレイアウトがこのようになっているとします
A   B 
1氏名 売上
2山田 200
3鈴木 300
4加藤 400

SHEET3にSHEET1・2の合計を出すには、
Sheet3のB2をクリックし、=sum( と入力
その時sheet1の見出しとsheet2の見出しをクリック(ctrlを押しながら2つのsheetとも同時に選択)
sheet1(又はsheet2)のB2をクリック
) をクリックしenter 
という風に串刺しで合計を...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報