OS:windows2000pro
VB:VB6.0sp5

実数 num(変数) [as currency]
 (但し 小数点以下2位まで)の値の
1.整数部 num_int(変数) [as long]
2.小数部 num_dec(変数) [as long]
を上記変数に格納するのは、どのようにすればいいのでしょうか?

(例1)num = 123.02 の場合、num_int=123, num_dec=2
(例2)num = 4.20 の場合、num_int= 4, num_dec=20
(例3)num = 0.23 の場合、num_int= 0, num_dec=23

 よろしくお願いいたします

A 回答 (5件)

VB6ならこうです。


num_int = Fix(num)
num_dec = 100 * (num - num_int)
    • good
    • 1

num_int = int(num)


num_dec = (num - num_int) * 100
    • good
    • 0

No.3さんの通りです。


正の数だけに限定すればInt関数を使っても同じです。
Intのほうがなじみが深いかも。
    • good
    • 0

方法はいろいろあるんですが,文字列に変換して小数点でSplitってのもありかもしれませんね。

    • good
    • 0

こんにちは、じゃんぬねっと です。



まず、整数部は斬り捨てと同じ概念なので、
Math.Floor または Math.Ceiling (正なのか負なのかで使い分けてください) で取得できますね。

で、その取得した正数で、元の数値を引くと浮動小数部が取得できますよね。
    • good
    • 0

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

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

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

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

Qエクセルのセルで整数のみ選択したい

エクセルで、A列に上から順番に0.25ずつ増えるデータがあります。整数のセルだけ(つまり、A4の1とA8の2とA12の3・・・というように整数のセルのみを選択したいのですが、うまい方法はありますか。

Aベストアンサー

案です
関数だけでなんとかしたいなら
if (0 = a1-int(a1);a1;"")
この場合A1に数値が入っていて
A1と整数を引いてゼロになったら数値を返せばいいんですよね

QVB.NETで、[Ctrl]+[Alt]+[Del]を無効にするプログ

VB.NETで、[Ctrl]+[Alt]+[Del]を無効にするプログラムを考えています。

グローバルキーフックを使用しないで、実現する方法はありますでしょうか?
ご教示の程お願いいたします。

Aベストアンサー

>グローバルキーフック
これの引数っていろいろありますよね?

マウスとキーボードだけは.NETで捕らえることができます。
ただCTL+ALT+DELというショートカットは、これらの管理よりもっと深いところで行われているので、仮にCで作成してフックしても目的の制御の実現は出来ません。


>グローバルキーフックを使用しないで
となると、やはり#1さんの方法しかありません。


#1さんの参考URL中に
「SAS発生時の動作:」
というのがあります。そこに
「GINAのWlxLoggedOnSas()」
というところがあるのですが、その近辺を熟読してください。
そしてこれ
http://msdn.microsoft.com/en-us/library/aa380570(VS.85).aspx


#1さんが示した情報は「古い」のではなく、古くから存在する実現方法というだけです。
そして現在、新たな別方法が出現しているわけではありません。

.NETで作成するDLLとCで作成するDLLは当然異なりますので、質問の
「VB.NETで、[Ctrl]+[Alt]+[Del]を無効にするプログラム」
という質問には、「無理です」としか言いようがありません。

>グローバルキーフック
これの引数っていろいろありますよね?

マウスとキーボードだけは.NETで捕らえることができます。
ただCTL+ALT+DELというショートカットは、これらの管理よりもっと深いところで行われているので、仮にCで作成してフックしても目的の制御の実現は出来ません。


>グローバルキーフックを使用しないで
となると、やはり#1さんの方法しかありません。


#1さんの参考URL中に
「SAS発生時の動作:」
というのがあります。そこに
「GINAのWlxLoggedOnSas()」
というところがあるのですが、その...続きを読む

Qエクセルで数値を整数に直す

エクセルでセル内の数値を整数に直す方法を教えてください。

具体的には、
学校で1学期から3学期までの成績を10段階で評価でつけるとします。(成績はすべて四捨五入した整数で出します)
各学期は中間・期末テストでの10段階評価を平均し、さらに年度末は各学期の成績を足して3で割ります。

この場合、それぞれの段階で端数を四捨五入して完全な整数に直さないと、学年末の評価にずれが生じてしまうときがあります。
なぜなら、表記の上ではセルの書式設定などで整数に直しても、エクセルの計算式の上では端数処理をしていない実際の数値を使うため、合計したときにずれがでてしまうのです。

例えば、以下のような場合です
 ※( )内は実際の数値です。
 1学期 6(5.5)
 2学期 8(7.5)
 3学期 6(6.0)

整数で処理している場合の学年末評価 7(6.7・・・)
実際の数値で処理している場合の学年末評価 6(6.3・・・)

このような問題を解決するために、各学期ごとに端数を完全に整数になおしたいのですが、書式設定以外の方法で、何かやり方はないでしょうか?
ROUND関数を使えばいいのでしょうか?
ちなみに、今は打ち直して単なる数値として別に計算しています。
どなたかご存じの方がいらっしゃいましたら、教えてください。

エクセルでセル内の数値を整数に直す方法を教えてください。

具体的には、
学校で1学期から3学期までの成績を10段階で評価でつけるとします。(成績はすべて四捨五入した整数で出します)
各学期は中間・期末テストでの10段階評価を平均し、さらに年度末は各学期の成績を足して3で割ります。

この場合、それぞれの段階で端数を四捨五入して完全な整数に直さないと、学年末の評価にずれが生じてしまうときがあります。
なぜなら、表記の上ではセルの書式設定などで整数に直しても、エクセルの計算式の上で...続きを読む

Aベストアンサー

端数を整数に直す方法としては、
 ツール-オプション-計算方法-表示桁数で計算する
書式は、もちろん、「0」 としておきます。

しかし、この方法の欠点は、実際の数値が見えてきません。

=ROUND(A1,0)
として、補助列を用意します。
最後に、合計(SUM) を使うやら、平均値(AVERAGE)を使えばよいと思います。

No.1 のearthlight さんのような場合は、ひとつずつ計算しなくても、

=SUMPRODUCT(ROUND(B1:B3,0)/3)
とすればよいのでは?

それを、整数で括るのは、負の数でなければ、INT() で良いので、

=INT(SUMPRODUCT(ROUND(B1:B3,0)/3))
とすればよいと思います。

しかし、これは、中身の計算が見えてきませんので、慣れないうちは、出来れば、補助列を使って計算過程が見えたほうがよいのではないかと思います。

>正実数の整数部分だけを取り出す。
>Excelに組み込まれていたと
=SIGN(A1)*INT(ABS(A1))
または、
=TRUNC(A1)
ということなんでしょうか?

最後に、at121さんの
> 四捨五入による 切り上げで得?する人もいれば損?する人も・・
読んでみて、ハッとさせられました。(感服しました)積み上げだったら、小数点の積み上げの計算で四捨五入のほうが、親切ですよね。

例:
 5.4+5.4 =10.8 → ≒ 11
最初から、四捨五入(カッコ内は実際の数値)
 5.0(5.4)+5.0(5.4) →10.0

まとまりなくて、すみません。

端数を整数に直す方法としては、
 ツール-オプション-計算方法-表示桁数で計算する
書式は、もちろん、「0」 としておきます。

しかし、この方法の欠点は、実際の数値が見えてきません。

=ROUND(A1,0)
として、補助列を用意します。
最後に、合計(SUM) を使うやら、平均値(AVERAGE)を使えばよいと思います。

No.1 のearthlight さんのような場合は、ひとつずつ計算しなくても、

=SUMPRODUCT(ROUND(B1:B3,0)/3)
とすればよいのでは?

それを、整数で括るのは、負の数でなければ、INT() で...続きを読む

Q[VBA]変数を利用して時間を検索する方法が・・・

エクセルで表示形式が「hh:mm:ss」に設定されているセルの中から
指定のセルを検索するマクロを作ろうとしているのですが、
上手くいきません。

検索する数字を変数にして変えられるようにしたいです。

Sub Macro1()
Dim temp As Double
temp = Range("A1").Value 'A1には0:00:01を入れる

Cells.Find(What:=temp, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate
End Sub

上の記述だと、実行時エラー91「オブジェクト変数またはWithブロック・・・」が出ます。
> temp = "0:00:01"
これに書き替えると「型が違います。」になり、「""」をはずすとコンパイルエラーになります。
「What:="0:00:01"」というように、直接入れると上手くいきます。

どなたか、お力をお貸しください。
よろしくお願いします。

エクセルで表示形式が「hh:mm:ss」に設定されているセルの中から
指定のセルを検索するマクロを作ろうとしているのですが、
上手くいきません。

検索する数字を変数にして変えられるようにしたいです。

Sub Macro1()
Dim temp As Double
temp = Range("A1").Value 'A1には0:00:01を入れる

Cells.Find(What:=temp, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, MatchByte:=False, SearchF...続きを読む

Aベストアンサー

こんばんは、これでは?
>Dim temp As Double
  ↓
Dim temp As Date

>LookIn:=xlValues

LookIn:=xlFormulas

Qエクセルで、積算時間を整数にする方法

エクセルで、積算時間を整数にする方法

エクセルで勤務時間の計算をしています。

例 185:45 を、
185.75
のように整数にする方法を教えていただけないでしょうか?


A1に「185:45」として、

=AD11*24で計算すると、「4458:00」

=HOUR(AD11)+MINUTE(AD11)/60で計算すると、「17.75」
となってしまいます・・・

Aベストアンサー

24時間を乗算、セルの表示形式を「標準」にするだけです。

Q[VB.NET]Windowsアプリに、Page_PreRenderイベントは存在するか

VB.NET2003,2005についての質問です。

下記の処理を、Windowsアプリケーションで実現することは可能でしょうか。

  ・各コントロールのイベントで、メンバ変数であるフラグAに、値を設定する処理を行う。
  ・各コントロールのイベントが「終了後」、このフラグAの内容によって、処理Bを実行したい。
    例)ボタンクリックイベント→処理B
      テキストチェンジイベント→処理B
    ※各コントロールのイベントには、フラグAの判定処理を組み込まない

上記の処理は、ASP.NETであれば、Page_PreRenderイベントを利用することで実現できました。
Windowsアプリケーションには、ASP.NETにおける、Page_PreRenderイベントのようなものは存在するでしょうか。
存在しなければ、どのような方法で上記の処理を実現できるでしょうか。

以上、どうぞよろしくお願い致します。

Aベストアンサー

根本的にアプリケーションの構造が違うので同じ処理はありません

Webアプリの場合
1 クライアントがページを要求
2 サーバーが要求によるページを構築
3 クライアントにページ内容を送信
4 クライアントでページが表示される

2の処理において ページを構築する前処理が Page_PreRenderになると思います

Windowsアプリにおいて似たような処理は Window作成時のイベントだろうと考えます
しかし一度作成されたウィンドウが破棄されずにその中のコントロールので発生したイベントに対してご希望のような処理は無いかと思います

# 現実的では無いですが
使用するコントロールをUserコントロールでラップして
そのコントロールの公開イベントの内部処理において所定の処理を実効出来るようにする
といった方法が考えられます

一般的な解決方法なら
コントロールのイベント処理毎に自前のイベントハンドラを記述して
AddHandlerでコントロールのイベントとハンドラを紐付けします
自前ハンドラで希望のフラグ処理などを行ってから 引数senderで判断して 本来のイベントハンドラを処理実行といった具合でしょう

根本的にアプリケーションの構造が違うので同じ処理はありません

Webアプリの場合
1 クライアントがページを要求
2 サーバーが要求によるページを構築
3 クライアントにページ内容を送信
4 クライアントでページが表示される

2の処理において ページを構築する前処理が Page_PreRenderになると思います

Windowsアプリにおいて似たような処理は Window作成時のイベントだろうと考えます
しかし一度作成されたウィンドウが破棄されずにその中のコントロールので発生したイベントに対してご希望のよう...続きを読む

Qエクセル・整数未満切捨ての処理について

情報処理技能検定、表計算(エクセル)3級模擬の問題について
おたずねします。

整数未満切り捨ての処理を、すでにした列に
「平均(整数未満四捨五入の表示)」、「最高」、「最低」
の値を、左からオートフィルすると、
たとえば、99.1と出た場合、
どう処理したら、99(整数未満切り捨て)になりますか?

ご存知の方がいらっしゃいましたら、ご教示下さい。
よろしくおねがいします。

Aベストアンサー

こんばんわ。
Good-S15です。

ごめんなさい。
たった、今、仕事から戻り、お礼を拝見しています。
もう既に、解決されてるかもしれませんが。。。

>この平均の値(99.1)に整数未満切り捨ての
>処理をするにはどうしたらいいのでしょうか?
ということですが、「これを文章で書け」という
問題ではないですよね?

そうと仮定すると、平均の値が入っているセルには、
関数AVERAGEで計算式がはいっています。
例:AVERAGE(....)

これを丸ごと、ROUNDDOWNでくくり、その際に、
第2パラメータ(引数)に、0をつけます。
例:ROUNDDOWN(AVERAGE(...),0)

これで、解決すると思います。
Excel2000、2002で動作確認済み。

Q【VB6】 変数1 = 変数1 Or $H2

他の人が作ったプログラムの修正を行っていたところ、下記のような記述がありました。
このような Or や And の使われ方はどのようなことを意味するのでしょうか?
(gStatusはintegerです。)

記述(1)
gStatus = gs_Status Or &H2

記述(2)
If (gStatus And &H2) = &H2 Then
'処理
End IF


宜しくお願い致します。

Aベストアンサー

&H2は、16進数の「2」をあらわします。
ご質問のケースでは、BIT1の状態を制御、確認しています。
記述(1)
gs_Status のBIT1をONしている。
記述(2)
gs_Status のBIT1がONか、どうか判断している。
(gs_Status をBIT1でマスク(BIT1の情報のみを抽出))し、
BIT1と比較している。
16進数・2進数・論理演算を学習されては?
http://f1.aaa.livedoor.jp/~zahyou/oldvb/ronri.htm
http://www5b.biglobe.ne.jp/~yone-ken/VB/BinHexDec.html
http://www5b.biglobe.ne.jp/~yone-ken/VB/BinHexDec2.html

Qエクセルの整数部の桁数

エクセルで作業中です。整数部の桁数を3桁に揃えたい場合の方法を教えて下さい。よろしくお願いいたします。

Aベストアンサー

書式/セル/ユーザ設定で、##0,と入力すれば千円単位ででます。
なお、3桁区切りにしたければ、#,##0,とします。
30,000を30千円と表示したければ、#,##0,"千円"とします。

Q[×]ボタン.Enabled = False は可能?

済みません,質問が二つあります。

1.メインフォームから,BorderStyle = 1 のダイアログフォームを Modeless で開くのですが,このフォームを右上の[×]ボタンで閉じさせたくありません。[×]ボタンをクリックしても凹まないようにし(Disabled にし),さらに表示も淡色にする方法があれば,教えていただきたく存じます。

2.テキストボックスに入力された文字列が,ファイル名として有効かどうかを簡単に判定する方法はありますか? つまり,ファイル名に「\/:,…」などが使われていたら NG,しかしパス名で使われている分には OK といった判定が簡単にできるのでしょうか?

どうかよろしくお願いいたします。

Aベストアンサー

こんにちはmaruru01です。
1.について
単に[×]で閉じないようにするなら、FormのUnLoadイベントでCancelをTrueにしてやればよいと思います。
2.について
サンプルを作ってみました。ついでにファイル名が存在するかどうかのチェックもつけました。
No.3の方が言っているように、Open For InputまたはOutputでファイルを開いてみて、エラー値で判断します。
pathNameにファイル名(フルパス)を入れて、今回の質問では、-1が返ったら、ファイル名としては無効(不正なファイル名)ということになります。
参考になれば幸いです。
では。


'ファイルの存在チェック及び、不正ファイル名チェック
Public Function NGfileName(ByVal pathName As String) As Integer

  Dim Num As Integer

  NGfileName = 0
  Err.Number = 0

  On Error Resume Next

  'inputモードでファイルの存在チェック
  Num = FreeFile
  Open pathName For Input As #Num
  If Err.Number = 0 Then
    NGfileName = 1 'ファイルが存在する
  End If
  Close #Num

  If NGfileName = 1 Then Exit Function
  Err.Clear

  'outputモードで不正ファイル名チェック
  Num = FreeFile
  Open pathName For Output As #Num
  If Err.Number <> 0 Then
    NGfileName = -1 'ファイル名が不正
  End If
  Close #Num

  If NGfileName = 0 Then Kill pathName
  Err.Clear

End Function

こんにちはmaruru01です。
1.について
単に[×]で閉じないようにするなら、FormのUnLoadイベントでCancelをTrueにしてやればよいと思います。
2.について
サンプルを作ってみました。ついでにファイル名が存在するかどうかのチェックもつけました。
No.3の方が言っているように、Open For InputまたはOutputでファイルを開いてみて、エラー値で判断します。
pathNameにファイル名(フルパス)を入れて、今回の質問では、-1が返ったら、ファイル名としては無効(不正なファイル名)ということになります。
参...続きを読む


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

人気Q&Aランキング