Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8823 / 13646 ツリー ←次へ | 前へ→

【30627】小数点以下切捨て 初心者 05/11/1(火) 16:03 質問[未読]
【30629】Re:小数点以下切捨て Kein 05/11/1(火) 16:26 回答[未読]
【30633】Re:小数点以下切捨て 初心者 05/11/1(火) 17:08 質問[未読]
【30648】Re:小数点以下切捨て Kein 05/11/1(火) 20:23 発言[未読]
【30765】Re:小数点以下切捨て 初心者 05/11/4(金) 15:08 お礼[未読]
【30684】Re:小数点以下切捨て ponpon 05/11/2(水) 21:12 発言[未読]
【30690】Re:小数点以下切捨て ichinose 05/11/2(水) 22:52 発言[未読]
【30693】Re:小数点以下切捨て ponpon 05/11/2(水) 23:20 発言[未読]
【30766】Re:小数点以下切捨て 初心者 05/11/4(金) 15:20 お礼[未読]
【30763】Re:小数点以下切捨て 初心者 05/11/4(金) 15:04 質問[未読]
【30764】Re:小数点以下切捨て 初心者 05/11/4(金) 15:07 発言[未読]
【30783】Re:小数点以下切捨て Kein 05/11/4(金) 17:00 回答[未読]
【30784】Re:小数点以下切捨て Kein 05/11/4(金) 17:02 回答[未読]
【30786】Re:小数点以下切捨て 初心者 05/11/4(金) 17:47 質問[未読]
【30788】Re:小数点以下切捨て Kein 05/11/4(金) 18:10 発言[未読]
【30822】Re:小数点以下切捨て 初心者 05/11/5(土) 9:40 質問[未読]
【30827】Re:小数点以下切捨て Kein 05/11/5(土) 13:45 回答[未読]
【30828】Re:小数点以下切捨て Kein 05/11/5(土) 13:46 発言[未読]
【30913】Re:小数点以下切捨て 初心者 05/11/7(月) 8:33 お礼[未読]
【30829】Re:小数点以下切捨て End 05/11/5(土) 13:48 発言[未読]
【30862】Re:小数点以下切捨て End 05/11/6(日) 3:08 発言[未読]
【30914】Re:小数点以下切捨て 初心者 05/11/7(月) 8:44 質問[未読]
【30921】Re:小数点以下切捨て Kein 05/11/7(月) 11:36 回答[未読]
【30932】Re:小数点以下切捨て 初心者 05/11/7(月) 14:10 質問[未読]
【30933】Re:小数点以下切捨て Kein 05/11/7(月) 14:24 回答[未読]
【30934】Re:小数点以下切捨て 初心者 05/11/7(月) 14:40 発言[未読]
【30936】Re:小数点以下切捨て Kein 05/11/7(月) 14:55 発言[未読]
【30937】Re:小数点以下切捨て 初心者 05/11/7(月) 15:18 お礼[未読]
【30938】Re:小数点以下切捨て 初心者 05/11/7(月) 15:35 発言[未読]
【30939】Re:小数点以下切捨て Kein 05/11/7(月) 16:18 発言[未読]
【30943】Re:小数点以下切捨て 初心者 05/11/7(月) 17:09 発言[未読]
【30945】Re:小数点以下切捨て Kein 05/11/7(月) 17:29 回答[未読]
【30949】Re:小数点以下切捨て 初心者 05/11/7(月) 18:43 質問[未読]
【30951】Re:小数点以下切捨て Kein 05/11/7(月) 21:05 回答[未読]
【30960】Re:小数点以下切捨て 初心者 05/11/8(火) 8:31 質問[未読]
【30961】Re:小数点以下切捨て 初心者 05/11/8(火) 8:35 お礼[未読]
【30967】Re:小数点以下切捨て Kein 05/11/8(火) 13:46 発言[未読]
【30969】Re:小数点以下切捨て 初心者 05/11/8(火) 14:35 発言[未読]
【30972】Re:小数点以下切捨て Kein 05/11/8(火) 15:44 回答[未読]
【30974】Re:小数点以下切捨て 初心者 05/11/8(火) 15:57 お礼[未読]

【30627】小数点以下切捨て
質問  初心者  - 05/11/1(火) 16:03 -

引用なし
パスワード
   VBA初心者です。

http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=20193;id=excel

の内容を実行したいのですが、ぜんぜん分りません。
ですが、今までずーっと悩んでいた小数点以下切捨てなので
何とか物にしたいのです。
出来れば細かく教えていただけませんでしょうか?
お願い致します。

【30629】Re:小数点以下切捨て
回答  Kein  - 05/11/1(火) 16:26 -

引用なし
パスワード
   ワークシート関数の ROUNDDOWN を使えばできます。
VBAのコードで実行するなら、WorksheetFunction.RoundDown(数値, 丸める桁数)
というようにします。

【30633】Re:小数点以下切捨て
質問  初心者  - 05/11/1(火) 17:08 -

引用なし
パスワード
   ご指導大変ありがとうございます。

ただ、ほんとに初心者でして、VBAまったくの初めてなのです。
Visual Basic を開くぐらいは出来るのですが、その後まったく分りません。
出来ればもう少し詳しくご指導願えませんでしょうか?

ぶしつけで大変すみません
ですが何とかこれを押えたいのです。お願い致します。

▼Kein さん:
>ワークシート関数の ROUNDDOWN を使えばできます。
>VBAのコードで実行するなら、WorksheetFunction.RoundDown(数値, 丸める桁数)
>というようにします。

【30648】Re:小数点以下切捨て
発言  Kein  - 05/11/1(火) 20:23 -

引用なし
パスワード
   >Visual Basic を開くぐらいは出来るのですが
プロシージャの作り方さえ分からない、ということですか ?
それを教えるのは簡単だけど、その前にどこでどんな使い方をしようとしている
のか書いてないのでは、はたしてVBAで処理するのが適切かどうかさえ、判断
できませんがね・・。

【30684】Re:小数点以下切捨て
発言  ponpon  - 05/11/2(水) 21:12 -

引用なし
パスワード
   初心者さん

Keinさんおっしゃるように、
具体的なシートのレイアウトを表示して、
何行目何列目のセルの値の小数点以下を切り捨てたいというように
詳しく説明されると、ヒントをいただけると思いますよ。
 
 以下のコードの意味は、
ワークシートモジュールに記述します。
マクロを実行したいシートのタブを右クリック→コードの表示
で、出てきたところにコピペします。(記述します)

’ワークシートのセルの値が変化したら実行するマクロ
Private Sub Worksheet_Change(ByVal Target As Range)

  ’変化するセルは、A1です。それ以外は、終了。
  If Target.Address(0, 0) <> "A1" Then Exit Sub

  ’イベントの発生をさせないようにして
  Application.EnableEvents = False

    ’ターゲット(この場合は、A1)の値を整数切り捨てにしなさい。
    Target.Value = Int(Target.Value) ’Intはヘルプで調べましょう

  ’イベント発生を許可
  Application.EnableEvents = True

’マクロの終了
End Sub

【30690】Re:小数点以下切捨て
発言  ichinose  - 05/11/2(水) 22:52 -

引用なし
パスワード
   ▼ponpon さん、みなさん、こんばんは。

>
>    ’ターゲット(この場合は、A1)の値を整数切り捨てにしなさい。
>    Target.Value = Int(Target.Value) ’Intはヘルプで調べましょう
>
値が正数の場合は、Int関数でもよいのですが・・・、
以下のコードを実行してみて下さい。
'=====================================================
Sub main()
  MsgBox "商品 りんご  数量 15個  単価 75円 税込み請求額は : Int(15 * 75 * 1.05)= " & Int(15 * 75 * 1.05)
  MsgBox "返品処理1 商品 りんご  数量 -15個  単価 75円 税込み払戻額 : Int(-15 * 75 * 1.05)=" & Int(-15 * 75 * 1.05)
  MsgBox "商品 りんご  数量 15個  単価 75円 税込み請求額は : Fix(15 * 75 * 1.05)=" & Fix(15 * 75 * 1.05)
  MsgBox "返品処理2 商品 りんご  数量 -15個  単価 75円 税込み払戻額 : Fix(-15 * 75 * 1.05)=" & Fix(-15 * 75 * 1.05)
  MsgBox "返品処理3 商品 りんご  数量 -15個  単価 75円 税込み払戻額 : RoundDown(-15 * 75 * 1.05, 0)=" & _
      WorksheetFunction.RoundDown(-15 * 75 * 1.05, 0)
End Sub


Excelで事務処理計算をしている方は大勢おられると思います。
1円に泣くこともないように・・・。

やっぱり、切捨てはRounddownでしょうかねえ!!


因みに端数処理に関する

http://ja.wikipedia.org/wiki/%E7%AB%AF%E6%95%B0%E5%87%A6%E7%90%86

にVBAのRound関数の丸めの定義もありました。
VBAのHelpでは、はっきりしませんよね!!

【30693】Re:小数点以下切捨て
発言  ponpon  - 05/11/2(水) 23:20 -

引用なし
パスワード
   ichinoseさん、みなさん、こんばんは。

ヘルプを読んでみました。
微妙に違うもんですね。
普通の感覚からいうと、ROUNDDOWNが一番あいますね。
正の数の場合は、Int(number)、Fix(number)でも良さそうですね。


ROUNDDOWN(数値,桁数)

数値   切り捨ての対象となる実数値を指定します。

桁数   数値を切り捨てた結果の桁数を指定します。

解説

ROUNDDOWN 関数は、ROUND 関数に似た働きをしますが、常に数値の切り捨てを行う
点で異なります。
桁数に正の数を指定すると、数値は小数点の右 (小数点以下) の指定した桁で切り
捨てられます。
桁数に 0 を指定すると、数値は最も近い整数として四捨五入されます。
桁数に負の数を指定すると、数値は小数点の左 (整数部分) の指定した桁 (1 の位
を 0 とする) に切り捨てられます。


Int(number)

Fix(number)

引数 number は必ず指定します。引数 number には、倍精度浮動小数点数型
(Double) の数値または任意の有効な数式を指定します。引数 number に Null 値
が含まれている場合は、Null 値を返します。

解説

Int 関数と Fix 関数は、どちらも引数 number の小数部分を取り除いた整数値を
返します。

引数 number に負の値を指定した場合には、Int 関数が引数 number を超えない最
大の負の整数を返すのに対して、Fix 関数は引数 number 以上の最小の負の整数を
返します。たとえば、引数として -8.4 を指定すると、Int 関数は -9、Fix 関数
は -8 をそれぞれ返します。

【30763】Re:小数点以下切捨て
質問  初心者  - 05/11/4(金) 15:04 -

引用なし
パスワード
   >Keinさんおっしゃるように、
>具体的なシートのレイアウトを表示して、
>何行目何列目のセルの値の小数点以下を切り捨てたいというように
>詳しく説明されると、ヒントをいただけると思いますよ。

ご返答ありがとうございます。
確かに質問するのに、情報提示少なすぎでした。keinさんはじめスミマセンでした。
ワークシート内の計算結果の小数点以下全てにおいて切り捨てたいのです。
具体的には見積書、請求書等の業務処理です。
社内の計算方法はPCが導入される前の手書きの時から全員が切り捨手の処理をしています。
セルA6の内容「=C6*E6」、A6からA118まで続きます。(見積の項目)
見積る内容により、項目は1行の時もあれば、50行ぐらいになるときもあります。
たとえば10行になったとします。
その合計の15%を諸経費として計上します。
「=sum(A6:A○○)*0.15」をその都度手入力しています。(これは仕方がありません)
その結果が、切捨てになってほしいのです。
最後に消費税も切り捨てております。これも手入力です。
考えてみると、列は決まってますが、行は決まってません。

ただ、先にも書きましたが、ワークシート内の計算結果の全てを切り捨てにしたいのが希望です。

こんな説明でも、ご指導お願いできますでしょうか?

【30764】Re:小数点以下切捨て
発言  初心者  - 05/11/4(金) 15:07 -

引用なし
パスワード
   >たとえば10行になったとします。
>その合計の15%を諸経費として計上します。
>「=sum(A6:A○○)*0.15」をその都度手入力しています。(これは仕方がありません)

10行に限定しましたので、「=sum(A6:A15)*0.15」をA16に手入力です。

【30765】Re:小数点以下切捨て
お礼  初心者  - 05/11/4(金) 15:08 -

引用なし
パスワード
   おっしゃるとおりですね・・・
今後気を付けます。ごめんなさい。

【30766】Re:小数点以下切捨て
お礼  初心者  - 05/11/4(金) 15:20 -

引用なし
パスワード
   ▼ichinose さん:こんにちは!

実行してみました。
名前のとおりの初心者ですので意味はぜんぜん分りませんが、面白いですね。
VBAはまりそうです。
でも、皆さん色んな関数etc工夫して使用されていてすごいですね。
勉強になりました。(理解できたのか!?)
少しづつ、勉強して行こうと思ってます。

また、当方の質問見かけましたときにはご指導お願いします。

ponponさんの返信に
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=30763;id=excel
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=30764;id=excel
追記致してます。ご指導のお願いします。

【30783】Re:小数点以下切捨て
回答  Kein  - 05/11/4(金) 17:00 -

引用なし
パスワード
   Sub 小数点切り捨て()
  Dim MyR As Range, C As Range
  Dim Fom As String, St As String

  On Error GoTo ELine
  Set MyR = Cells.SpecialCells(3)
  On Error GoTo 0
  For Each C In MyR
   Fom = C.Formula
   If Left$(Fom, 6) <> "=ROUND" And IsNumeric(C.Value) Then
     St = Right$(Fom, Len(Fom) - 1)
     C.Formula = "=ROUNDDOWN(" & St & ",0)"
   End If
  Next
  Set MyR = Nothing
ELine:
End Sub

で、どうでしょーか ?

【30784】Re:小数点以下切捨て
回答  Kein  - 05/11/4(金) 17:02 -

引用なし
パスワード
   この方がいくらかいいですね。

Sub 小数点切り捨て2()
  Dim MyR As Range, C As Range
  Dim Fom As String, St As String

  On Error GoTo ELine
  Set MyR = Cells.SpecialCells(3, 1)
  On Error GoTo 0
  For Each C In MyR
   Fom = C.Formula
   If Left$(Fom, 6) <> "=ROUND" Then
     St = Right$(Fom, Len(Fom) - 1)
     C.Formula = "=ROUNDDOWN(" & St & ",0)"
   End If
  Next
  Set MyR = Nothing
ELine:
End Sub

【30786】Re:小数点以下切捨て
質問  初心者  - 05/11/4(金) 17:47 -

引用なし
パスワード
   ▼Kein さん:こんにちは!
大変ありがとうございます。&成功致しました。
先日は大変失礼致しましたのに心暖かいご指導、恐悦至極でございます。

ご承知のとおり、意味も判らずコピペで完成させて、まったくの他力本願で、恥ずかしいのですが、
世にはすごい知識の方々がいらっしゃると改めて感じさせられます。

ハズカシついでに、根本的なことをもうひとつ質問させていただきたいのですが、図々しいでしょうか?(ですね!)

もちろん、ご指導いただいた方法で申し分ないのですが、
もし、出来れば・・・、マクロ実行することなく、前記で書いた手入力を終えた時点で
切捨てに出来ないものかなぁとわがままな考えも出てきております。
質問する場所がここじゃないと言われそうですが、図々しいついでに聞いちゃいます。
VBAの根本も解ってないのに何いってるんだ!と怒らないでください。

ただ、なんとなくそんな方法はないんじゃないかと自分でも思ってきました。
何日もお付き合い下さいまして、大変スミマセン<(_ _ ;)>

【30788】Re:小数点以下切捨て
発言  Kein  - 05/11/4(金) 18:10 -

引用なし
パスワード
   >マクロ実行することなく、前記で書いた手入力を終えた時点で
>切捨てに出来ないものか
その方がむしろ本来的な考え方ですね。私のコードをよく見てください。
何をやっているのか、ひとことで言うと "数式の書き換え" です。つまり、
初めに入力されていた数式を、わざわざマクロを使って書き換えしているのです。
それも数式が入力されていて数値が表示されているセルを、実行するたびに
全部ループして調べている・・。これでは非効率と言わざるを得ませんね。
ということでもうお分かりのように、答えは「初めから ROUNDDOWN関数を
組み込んだ数式を入力しておけば良い」ということになります。
とても簡単なことだったのです・・・。

【30822】Re:小数点以下切捨て
質問  初心者  - 05/11/5(土) 9:40 -

引用なし
パスワード
   ▼Kein さん:おはようございます。
私は非効率なほうを望んでるのでしょう。
確かにはじめに入力していればいいと思うのですが、私どもの見積の場合、
1.項目が何行あるかわからない。
2.必ず諸経費及び消費税が発生する(手入力)
ここで手入力の際、必ずROUNDDOWNを常に付けてあげればいいのですが、
必ずしも私だけが使用する雛形でないものですから、違う人間が作成する場合
どうしてもここを指示出来ないのです。(言ってもわからない人が多いため)

作業の流れを具体的に書きます。
1.金額(A1)、単価(B1)を入力していきます。
2.C1のセルの内容「=A1*B1」には自動的に計算結果が表示されます。
 この作業が1行〜数行続きます。
3.数行続いた後、諸経費の計算 セルC○に=sum(C1:C○)*0.15 と手入力します。
 実際にはオートsumボタンから行います。

で、このオートsumボタンを押した時点で、ROUNDDOWNが消えてしまいます。
付け足せばいいのは解るのですが、付け足せない理由が前記に書いたとおりで、
自分以外の人間も使うからです。


keinさんから教わったマクロにボタンを付けて、見積作成後必ずボタンを押して
マクロ実行するように運用いたします。


ただ、もしお時間あるようでしたら、
enterキーを押して確定するごとに、マクロを実行する・・・
なんて出来ないものかなぁと独り言を言ってみます。

(諸経費の計算を手入力「C○に=sum(C1:C○)*0.15」して確定
       ↓
 すると頭にROUNDDOWN関数が自動的についてくる。)


はじめから事細かく書き出せばkeinさんにもご迷惑をかけないで済んだものを
反省しております。

【30827】Re:小数点以下切捨て
回答  Kein  - 05/11/5(土) 13:45 -

引用なし
パスワード
   >enterキーを押して確定するごとに、マクロを実行する
>頭にROUNDDOWN関数が自動的についてくる
ということなら、先に回答したコードをセル入力イベントに変更して

Private Sub Worksheet_Change()
  Dim MyR As Range, C As Range
  Dim Fom As String, St As String

  On Error GoTo ELine
  Set MyR = Target.SpecialCells(3, 1)
  On Error GoTo 0
  Application.EnableEvents = False
  For Each C In MyR
   Fom = C.Formula
   If Left$(Fom, 6) <> "=ROUND" Then
     St = Right$(Fom, Len(Fom) - 1)
     C.Formula = "=ROUNDDOWN(" & St & ",0)"
   End If
  Next
  Application.EnableEvents = True
  Set MyR = Nothing
ELine:
End Sub

とすれば良いでょう。これを目的のシートのシートモジュールに入れて下さい。

【30828】Re:小数点以下切捨て
発言  Kein  - 05/11/5(土) 13:46 -

引用なし
パスワード
   訂正。マクロタイトルは

Private Sub Worksheet_Change(ByVal Target As Range)

と、して下さい。

【30829】Re:小数点以下切捨て
発言  End  - 05/11/5(土) 13:48 -

引用なし
パスワード
   こんにちは。
今日はみなさんお休みかしらね^ ^

>enterキーを押して確定するごとに、マクロを実行する・・・
enterキーはややこしいのでダブルクリックではどうでしょう?

目的のシートのタブを右クリックして[コードの表示]
表示されたモジュールに以下コードをコピペしてください。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Dim Scel As Range, Per As Long
  Set Scel = Range("C1") '←必要に応じ変更
  Per = 15 '←必要に応じ変更
  With Target
    If .Column <> Scel.Column Or .Row <= Scel.Row Then Exit Sub
    .Formula = "=ROUNDDOWN(SUM(" & Scel.Address(0, 0) & ":" _
      & .Offset(-1).Address(0, 0) & ")*" & Per & "/100,0)"
  End With
  Cancel = True
  Set Scel = Nothing
End Sub

基準セルをC1とした場合、C列のセルをダブルクリックすると式がはいります。
何も入力しなくて可です。

基準セルや諸経費割合を変えたい場合は、『'←必要に応じ変更』部分を変えてください。

#ユーザー定義関数という手もあるかもしれませんね(独り言)

【30862】Re:小数点以下切捨て
発言  End  - 05/11/6(日) 3:08 -

引用なし
パスワード
   すいません。話をムシかえすわけじゃないですが
整数切り捨てのワークシート関数だったら今回のケースは
ROUNDDOWNでなくTRUNKでいいんじゃないですか?
ROUND系の関数って桁指定の引数に特徴あると思うので。
(今さらなんでどうでもいいかもしれませんが)

【30913】Re:小数点以下切捨て
お礼  初心者  - 05/11/7(月) 8:33 -

引用なし
パスワード
   ▼Kein さん:おはようございます!!!!!

出来ました!振えました!感動です!!!
長々とお付き合い下さいまして、本当にありがとうございます。
本当に親切な方々ばかりで、ただただお礼の念ばかりです。
ずっと悩んでいた事で本当にありがたく、マジで感動の武者震いでした。

これから少しずつ勉強し、少しはVBAこなせるようがんばります。
keinさんのように、アドバイスできるようなスキルまでは到底及びませんが・・・

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

【30914】Re:小数点以下切捨て
質問  初心者  - 05/11/7(月) 8:44 -

引用なし
パスワード
   ▼End さん:はじめまして、おはようございます。
>>enterキーを押して確定するごとに、マクロを実行する・・・
>enterキーはややこしいのでダブルクリックではどうでしょう?

やってみました!面白いですね。本当にここの住民さんはスキルの高い
方々ばかりで肩身が狭いです。

ずうずうしくお願いしてみたいと思います。

ダブルクリックは通常よくある作業ですので、たとえば、ctrlキーを押しながら
enterキーでマクロ実行なんかですと非常に助かるんです。

ちなみに、keinさん方頂きましたマクロも併用して使用したいのですが、
出来るのでしょうか?

【30921】Re:小数点以下切捨て
回答  Kein  - 05/11/7(月) 11:36 -

引用なし
パスワード
   対象のシートモジュールに

Private Sub Worksheet_Activate()
  Application.OnKey "^{ENTER}", "MyCalc"
End Sub

Private Sub Worksheet_Deactivate()
  Application.OnKey "^{ENTER}"
End Sub

を入れて、標準モジュールに

Sub MyCalc()
  Dim Fom As String, St As String
 
  If TypeName(Selection) <> "Range" Then Exit Sub
  With ActiveCell
   If .HasFormula = False Then Exit Sub
   Fom = .Formula
   If Left$(Fom, 6) <> "=ROUND" Then
     St = Right$(Fom, Len(Fom) - 1)
     .Formula = "=ROUNDDOWN(" & St & ",0)"
   End If
  End With
End Sub

を、入れて下さい。これで、一度対象シートから別のシートを開き、再度
対象シートを開くとキーにマクロが割り当てられます。ENTERキーは「テンキーの」
ENTERのみ有効ですから、数式を入力したセルへカーソルを持ってきて、
Ctrl + テンキーのENTER を押してみて下さい。

【30932】Re:小数点以下切捨て
質問  初心者  - 05/11/7(月) 14:10 -

引用なし
パスワード
   ▼Kein さん:ごめんなさいm(_ _ ;)m
また、説明が不足しておりました。何度もお手数をおかけ致してるのに
大変申し訳ございません。

小数点以下切捨ての作業は、先にご指導頂きましたコードで
完璧にクリアしております。これを替えることはまずありません。
欲しかった機能は諸経費の計算なんです。
Endさんのコードですと、ダブルクリックで諸経費の計算(15%)を
してくれます。

これを、ctrlキーで出来ないものかと思い質問しました。
つまり標題と趣旨は変わってます。

ctrlキー + enterキーで諸経費の計算「=sum(C1:C○)*0.15」をさせる。
確定と同時に先にKeinさんから貰いましたコードで、頭にrounddownが付く

これがしたかったのです。

毎回オートSamボタンをクリックし、カーソルを移動させて*0.15と手入力が
面倒になっちゃいました。

Endさんのコードですと、ダブルクリックで諸経費の計算と少数点以下切り捨てを
同時にしてくれますが、先に書きましたが、諸経費の前の項目が何行になるか、
決まっていません。、Endさんのコードですと、ダブルクリックのセルの
一つ前のセルまでの合計×0.15をしてくれますので、これが、ctrl+enterで、
出来れば好都合なのです。

ちなみに、諸経費計算のセルはF6からです。(=sum(F6:F○)*0.15)

又ご指導願えますでしょうか?宜しくお願い致します。

【30933】Re:小数点以下切捨て
回答  Kein  - 05/11/7(月) 14:24 -

引用なし
パスワード
   では、先の"MyCalc"というプロシージャの中身を、以下のように変更して下さい。
それから合計する範囲は、常に「F1からアクティブセルの1つ上」までになります。

Sub MyCalc()
  Dim Ad As String
 
  If TypeName(Selection) <> "Range" Then Exit Sub
  If Intersect(ActiveCell, Range("F6:F65536")) Is Nothing Then
   Exit Sub
  End If
  With ActiveCell
   If Not IsEmpty(.Value) Then Exit Sub
   Ad = .Offset(-1).Address   
   .Formula = "=ROUNDDOWN(SUM($F$1:" & Ad & ")*0.15,0)"
  End With
End Sub

【30934】Re:小数点以下切捨て
発言  初心者  - 05/11/7(月) 14:40 -

引用なし
パスワード
   ▼Kein さん:さっそくのごしどうありがとうございます。

うまく行きませんでした。

対象のシートモジュールに
Private Sub Worksheet_Activate()
  Application.OnKey "^{ENTER}", "MyCalc"
End Sub

Private Sub Worksheet_Deactivate()
  Application.OnKey "^{ENTER}"
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim MyR As Range, C As Range
  Dim Fom As String, St As String

  On Error GoTo ELine
  Set MyR = Target.SpecialCells(3, 1)
  On Error GoTo 0
  Application.EnableEvents = False
  For Each C In MyR
   Fom = C.Formula
   If Left$(Fom, 6) <> "=ROUND" Then
     St = Right$(Fom, Len(Fom) - 1)
     C.Formula = "=ROUNDDOWN(" & St & ",0)"
   End If
  Next
  Application.EnableEvents = True
  Set MyR = Nothing
ELine:
End Sub

を入れて、

標準モジュールのを入れて、標準モジュールに
Sub MyCalc()
  Dim Ad As String
 
  If TypeName(Selection) <> "Range" Then Exit Sub
  If Intersect(ActiveCell, Range("F6:F65536")) Is Nothing Then
   Exit Sub
  End If
  With ActiveCell
   If Not IsEmpty(.Value) Then Exit Sub
   Ad = .Offset(-1).Address
   .Formula = "=ROUNDDOWN(SUM($F$6:" & Ad & ")*0.15,0)"
  End With
End Sub

です。
どこか解りますでしょうか?

【30936】Re:小数点以下切捨て
発言  Kein  - 05/11/7(月) 14:55 -

引用なし
パスワード
   >Private Sub Worksheet_Change(ByVal Target As Range)
これはいちおう、削除しておいて下さい。
それから押すキーですが「Ctrl + テンキーのEnter」にしてますか ?
ノートPCでテストしていると、うまくいかない場合があります。
あと、キーを押すときは必ず「F6以下のF列で、空白のセルをアクティブ」に
している必要がありますが、その条件を満たしてますか ?
以上の点をチェックしてみてください。

【30937】Re:小数点以下切捨て
お礼  初心者  - 05/11/7(月) 15:18 -

引用なし
パスワード
   ▼Kein さん:できました!

空白でなかったのが原因でした。
それでもDeleteキーの一回の操作が増えただけですので、今までより遥かに楽です。

このたびは、長々とお付き合い下さいまして、誠にありがとうございました。
菓子折りの一つでももって、持参致したい気持ちでいっぱいです。

社内では、これでも出来る方だとは思っておったんですが、全然まだまだですね。

本当に本当にありがとうございました。
文字だけで済ませてしまう掲示板のシステムに歯がゆさを感じます。

また、お力とお知恵を拝借いたしたき時は投稿させて頂きます。
その時はまた、Keinさんと出会えれば幸いにございます。

最後に再度お礼させて頂きます。

本当にありがとうございました!

【30938】Re:小数点以下切捨て
発言  初心者  - 05/11/7(月) 15:35 -

引用なし
パスワード
   ▼Kein さん:
と、思ったんですが実は・・・

一度別のシートを開きもう一度戻るとマクロが割り当てになるというのが
一番最初だけだと思ったのですが、毎回だったんですね。

つまり見積書の雛形で考えてますので、
見積毎に、シートのクリック操作が必要になってしまうのですね・・・

もちろん、もちろん!それでも操作は楽になるのですが、


できれば・・・


自己の満足に貪欲な当方に、再びお知恵を拝借できませんでしょうか?

【30939】Re:小数点以下切捨て
発言  Kein  - 05/11/7(月) 16:18 -

引用なし
パスワード
   イベントの種類については適当に選んだだけです。要は「何をきっかけにして」
マクロを起動し、キーの割り当てを行えば良いか ? ということです。
そのきっかけの種類を選ぶのは、あなた自身が最も適切であろうと思いますから、
書いてみて下さい。
それから、値を入力済みのセルでも数式を入れるようにしたいなら
If IsEmpty ・・・Exit Sub というコードを、一行削除するだけで OK です。
さらに、何度もF列に入力していくとなると、累計の計算になると思いますが、
そのままでは「既に計が出ているセル」も累計対象になってしまいます。その点は
了解されてますか ?

【30943】Re:小数点以下切捨て
発言  初心者  - 05/11/7(月) 17:09 -

引用なし
パスワード
   ▼Kein さん:またまたありがとうございます。

>イベントの種類については適当に選んだだけです。要は「何をきっかけにして」
>マクロを起動し、キーの割り当てを行えば良いか ? ということです。
>そのきっかけの種類を選ぶのは、あなた自身が最も適切であろうと思いますから、
>書いてみて下さい。

「A1に何か入力されたら」でうまく行きませんでしょうか?
A1は初めは空白ですが、必ず入力します。これ起動に使えませんでしょうか?


>それから、値を入力済みのセルでも数式を入れるようにしたいなら
>If IsEmpty ・・・Exit Sub というコードを、一行削除するだけで OK です。

試しました!これでキー操作がまた一つ省けます♪


>さらに、何度もF列に入力していくとなると、累計の計算になると思いますが、
>そのままでは「既に計が出ているセル」も累計対象になってしまいます。その点は
>了解されてますか ?

この件に関しては、OKです。
これは当方のみの使用になると思います。必要であれば手入力で訂正します。

【30945】Re:小数点以下切捨て
回答  Kein  - 05/11/7(月) 17:29 -

引用なし
パスワード
   >「A1に何か入力されたら」
ならばシートモジュールに・・

Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
   If .Address <> "$A$1" Then Exit Sub
   If .Count > 1 Then Exit Sub
   If IsEmpty(.Value) Then Exit Sub
  End With
  Application.OnKey "^{ENTER}", "MyCalc"
End Sub

を、入れるぐらいで出来ます。
あと、キーへの割り当てを解除する方は、ご自分で考えてみて下さい。
先のレスのように Worksheet_Deactivate にするとか、ブックを閉じる直前に
するなら、ThisWorkbookモジュールへ入れる Workbook_BeforeClose などが
あります。中身のコードは

Application.OnKey "^{ENTER}"

の一行だけです。

【30949】Re:小数点以下切捨て
質問  初心者  - 05/11/7(月) 18:43 -

引用なし
パスワード
   ▼Kein さん:
自分なりに色々と試したのですが、ダメでした。悔しいですが私1人じゃ無理です。

今のシートモジュールの内容です。
Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
   If .Address <> "$A$1" Then Exit Sub
   If .Count > 1 Then Exit Sub
   If IsEmpty(.Value) Then Exit Sub
  End With
  Application.OnKey "^{ENTER}", "MyCalc"
End Sub
Private Sub Worksheet_Deactivate()
  Application.OnKey "^{ENTER}"
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim MyR As Range, C As Range
  Dim Fom As String, St As String

  On Error GoTo ELine
  Set MyR = Target.SpecialCells(3, 1)
  On Error GoTo 0
  Application.EnableEvents = False
  For Each C In MyR
   Fom = C.Formula
   If Left$(Fom, 6) <> "=ROUND" Then
     St = Right$(Fom, Len(Fom) - 1)
     C.Formula = "=ROUNDDOWN(" & St & ",0)"
   End If
  Next
  Application.EnableEvents = True
  Set MyR = Nothing
ELine:
End Sub

標準モジュールの内容は
Sub MyCalc()
  Dim Ad As String
 
  If TypeName(Selection) <> "Range" Then Exit Sub
  If Intersect(ActiveCell, Range("F6:F65536")) Is Nothing Then
   Exit Sub
  End If
  With ActiveCell
   Ad = .Offset(-1).Address
   .Formula = "=ROUNDDOWN(SUM($F$6:" & Ad & ")*0.15,0)"
  End With
End Sub

シートモジュールに当初入っていた
Private Sub Worksheet_Activate()
  Application.OnKey "^{ENTER}", "MyCalc"
End Sub

Private Sub Worksheet_Deactivate()
  Application.OnKey "^{ENTER}"
End Sub
は消しちゃダメなのでしょうか?

それと、一応消してくださいとおっしゃってたコードそのまま残して使用してました。
コンパイルエラー 名前が適切ではありません となりますが勝手に変えてもいいのでしょうか?
とりあえず、1を付けてみたらエラーはでませんでしたが。

まったくもって他力本願で本当に恐縮です。

【30951】Re:小数点以下切捨て
回答  Kein  - 05/11/7(月) 21:05 -

引用なし
パスワード
   シートモジュールの方は

Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
   If .Address <> "$A$1" Then Exit Sub
   If .Count > 1 Then Exit Sub
   If IsEmpty(.Value) Then Exit Sub
  End With
  Application.OnKey "^{ENTER}", "MyCalc"
End Sub

Private Sub Worksheet_Deactivate()
  Application.OnKey "^{ENTER}"
End Sub

だけにして、あとは全て削除して下さい。
「同一のイベントマクロを、同一のモジュールに書く」ということは出来ません。
標準モジュールの方は、そのままで結構です。
あと、確実にキーからマクロを解除できるように、ThisWorkbookモジュールにも

Private Sub Workbook_BeforeClose(Cancel As Boolean)

というタイトルで Application.OnKey "^{ENTER}" を入れて下さい。

【30960】Re:小数点以下切捨て
質問  初心者  - 05/11/8(火) 8:31 -

引用なし
パスワード
   ▼Kein さん:おはようございます。

何度も何度もすみません・・・m(; ._.)m
あまりにしつこいのでこれで最後にします。

無理であれば申し訳ないことですが、二つの事を同じファイルで行いたいのです。

1.小数点以下は切り捨てる。
2.ctrl+enterで、諸経費の計算結果を出す。

先にお願いしたとおり、確定毎にROUNDDOWNが頭に付く。
F列の任意のセル上でのctrl+enterの操作で、F6から任意のセルの一つ上までの
合計×0.1の計算をさせる。(イベントの実行はA1に何か入力されたら)

しかし私も執着心が強い男です。

【30961】Re:小数点以下切捨て
お礼  初心者  - 05/11/8(火) 8:35 -

引用なし
パスワード
   ▼Kein さん:
書き忘れましたが、ご指導いただいたコードで、諸経費の計算は
間違いなく出来ております。ですが、rounddownは出来なくなってますよね。

なかなかうまく行かないものですネ・・・(無理を言ってるこちらが悪いのですが)

【30967】Re:小数点以下切捨て
発言  Kein  - 05/11/8(火) 13:46 -

引用なし
パスワード
   >rounddownは出来なくなってますよね
そんなはずないです。
>05/11/7(月) 14:24
のコードのままなら、ちゃんと小数点以下は切り捨てられてますよ。
こちらでテストしてみて、問題ないことを確認してますから。

【30969】Re:小数点以下切捨て
発言  初心者  - 05/11/8(火) 14:35 -

引用なし
パスワード
   ▼Kein さん:何度もごめんなさい

諸経費の計算ではrounddownきちんと付いてきますが、ctrl+enter以外の場合でも
rounddownが必要なのです。

たとえば、諸経費15%、その下に消費税5%を設ける場合、
消費税5%はオートsumボタンから=sum(F6:F○)*0.05を手入力なります。

この手入力の部分にも、rounddownが必要なのです。

昨晩にご指導いただいたのは、諸経費の計算にはrounddownが付いてきますが、

11/7(月) 21:05 の、コードだけにして、あとは全て削除して下さい。

ですと、一番最初のenter毎にrounddownがついてくるが無くなっちゃってるのではないでしょうか?(まったくの無知ですみません)

【30972】Re:小数点以下切捨て
回答  Kein  - 05/11/8(火) 15:44 -

引用なし
パスワード
   >11/7(月) 21:05 の、コードだけにして、あとは全て削除して下さい。
>ですと、一番最初のenter毎にrounddownがついてくるが無くなっちゃってるのでは
>ないでしょうか
ん・・?? 意味が分かりませんが、MyCalcも削除したわけでは無いですよね ?
>標準モジュールの方は、そのままで結構です。
と、はっきり書いておきましたから。
>この手入力の部分にも、rounddownが必要なのです
ということは、F6以下に手入力する数式もある、という意味ですか ?
それにもROUNDDOWNをつけるなら、シートモジュールに入れたセル入力イベントを

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Fom As String

  With Target
   If .Count > 1 Then Exit Sub
   If IsEmpty(.Value) Then Exit Sub
   If .Address = "$A$1" Then
     Application.OnKey "^{ENTER}", "MyCalc"
     Exit Sub
   End If
  End With
  If Intersect(Target, Range("F6:F65536")) Is Nothing Then Exit Sub
  With Target
   If .HasFormula = False Then Exit Sub
   Fom = .Formula  
   If UCase(Left$(Fom, 5)) <> "=ROUN" Then
     Fom = Right$(Fom, Len(Fom) - 1)
     Application.EnableEvents = False
     .Formula = "=ROUNDDOWN(" & Fom & ",0)"
     Application.EnableEvents = True
   End If
  End With
End Sub

と、変更してみて下さい。

【30974】Re:小数点以下切捨て
お礼  初心者  - 05/11/8(火) 15:57 -

引用なし
パスワード
   ▼Kein さん:ペコm(。_。*)mペコm(*。_。)mペコ


本当に本当にありがとうございます。
まさしく頂きましたコードで当方の欲求を満たしております。
なんとお礼を申し上げてよいか、ただただ感謝です。

長々とお付き合い下さいまして大変恐縮しております。
また、他の閲覧されていた方々も大変の見苦しい内容でございまして、
モニター越しに赤面いたしております。
しかし、つくづくスキルの無さを痛感しました。
Keinさんにはどんなにお礼を申し上げても足りないぐらいです。

これから少しずつ勉強し、ちょっとは扱えるような人間になりたいです。
(逆に教えることは不可能だとは思いますが・・・汗)

最後に本当にありがとうございました。


チュッ

8823 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free