エクセルVBA、または関数について質問です。


4行目に任意の数字が複数のセルに記入されています。
それらの数字の30%を2行目に、70%を3行目に記入するというマクロ、または関数を作って下さい。

例えば、4行目のA列が100の場合、2行目に30、3行目に70とするようにしてください。

ただし、小数点が付く場合は四捨五入するようにしてください。
なおこれらの作業は4行目に数字のある場合は全ての列で行うようにしてください。


以上、よろしくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/03/01 16:49:17
  • 終了:2007/03/01 17:03:55

回答(1件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982007/03/01 17:00:27

ポイント60pt
Sub Macro1()
'
' Macro1 Macro
'
' Keyboard Shortcut: Ctrl+q
'
    
    For a = 1 To 256
        If Cells(4, a) = "" Then Exit For
        Cells(2, a) = Round(Cells(4, a) * 0.3, 0)
        Cells(3, a) = Round(Cells(4, a) * 0.7, 0)
    Next a
End Sub

http://exinfo.biz/lec/lec_round.shtml

id:taroemon

いつもご回答ありがとうございます。

完璧にできました。

2007/03/01 17:03:27
  • id:llusall
    Round は四捨五入じゃないよ。
    丸めだよ。
  • id:taknt
    http://support.microsoft.com/kb/225330/ja

    変な仕様なんだね。


  • id:SALINGER
    銀行型丸めを回避するためには、
    Cells(2, a) = Cells(4, a) * 0.3
    Cells(3, a) = Cells(4, a) * 0.7
    にしてRoundを使わないで、
    2行目と3行目の書式を数値にして、小数点以下0にすれば算術型丸めになりますよ。
  • id:llusall
    へっ?!
    ふつうに、常識ですょ。

    今までのtakntさんのシステムは大丈夫?
  • id:taknt
    エクセルのVBAは、仕事で使っていないから 問題ないです。
  • id:llusall
    ん?

    VisualBasic
    AccessのVBA
    VB.NETのMathクラスのRoundメソッド
    Delphi、CBuilder
    Java java.lang.Math のRound
    ・・・

    みんな、み~~んな、そうだよ。
    ほんと、大丈夫?


    ところで、仕事でどんな言語使ってるんですか??
  • id:taknt
    Cells(2, a) = Round(Cells(4, a) * 0.3, 0)
    Cells(3, a) = Round(Cells(4, a) * 0.7, 0)

    の部分を
    Cells(2, a) = Int(Cells(4, a) * 0.3)
    Cells(3, a) = Int(Cells(4, a) * 0.7)

    にすると 算術型になります。

  • id:taknt
    おかしいな VBに Round関数なんてないのに。

    ま、丸め処理は 私は してないので 関係ないです。

    今後の参考にしておきます。
  • id:llusall
    >おかしいな VBに Round関数なんてないのに。
    おかしいですねぇ。どのようなバージョンを使っておられるのだろう・・・。

    >ま、丸め処理は 私は してないので 関係ないです。
    いつもきっぱりと割り切っているのですね。承知しました。
    私もこれで細かい事は忘れますね。
  • id:Mook
    えっ、
    Int は切捨てでは?

    表示ではなく、数値を四捨五入なら、
    Round を Application.WorksheetFunction.Round に変更でよいと思います。
  • id:llusall
    ん????
    takntさんに気を取られていて油断してました。

    ちょっと、ちょっとちょっと!
    >SALINGERさん
    >2行目と3行目の書式を数値にして、小数点以下0にすれば算術型丸めになりますよ。
    #なってない、なってない。
    表示(見かけ)と実際の数値とは違いますよ。
  • id:SALINGER
    まあ、その数値を直接何かに使うのであればダメだが、見て確認するだけかもしれませんし。
  • id:taknt
    私が変な仕様といったのは 私が提示したリンク先のことだよ。


    それから VBにRound関数が加わったのは VB6からですね。

    Excelでもワークシート関数のRound関数は 算術型。
  • id:llusall
    >それから VBにRound関数が加わったのは VB6からですね。
    VB5以前をメインにお仕事されているということでしょうか?

    ・・・って、
    takntさん、
    アイコンの意味する通り「ネタ・ジョーク」でコメントされてます?
    ネタとして突っ込めば良かったのですかね。
    どーも空気が読めません。<(><)>
  • id:rikuzai
    う~んと、関数だったら
    A2=IF(ISNUMBER(A4),ROUND(A4*0.3,0),"")
    A3=IF(ISNUMBER(A4),ROUND(A4*0.7,0),"")
    後は列方向にフィルコピーでいいだけなので、
    なんで関数で処理しちゃわないのかなぁ。
    (昨日書いてる途中で解決しちゃいました)


    ところで4行目の数字に小数点以下の数字があったりすると、
    A2+A3がA4にならないケースが出てくると思いますが、
    基本整数処理ということなんでしょうね。
  • id:llusall
    >う~んと、関数だったら
    そうですね。
    VBAにばかり気を取られていました。
    数式で済むのであればその方が良いですね。
    リアルに変化するし。

    VBAでやるのであれば、
    四捨五入のロジックは、沢山ネットに転がっているかと思いますが、

    Mookさんや、takntさんの「変な仕様(M$)」で紹介していただいた
    ワークシート関数のRoundを使用するのがスマートで良いかもしれませんね。
  • id:SALINGER
    コメント欄の議論は質問とはかけ離れて「丸め」についてのことになっているので
    質問者を置き去りにした議論はあまり感心しませんね。
    そもそも扱う数字が大きければ最初の回答でも別に問題はありませんし、
    作ったものを印刷するだけなら私の回答でもいいはず。
    (まあ、あるセルを「3月15日」にしてくださいという質問に、それは本当はシリアル値だからなってないという人はいないんだけどねw)
    回答者が出したいろいろな答えから、質問者が状況に合う回答を選べばいいだけのこと。
    私を含め質問者が満足した質問にコメントを入れるべきではなかったかもしれません。
    一番困惑してるのはtaroemonさんか・・・w
  • id:taknt
    今のところ VB5以前を用いてます。

    ま、VB6等も使ったことは ありますが
    丸め処理をしなくてもいいプログラムもたくさんありますからね。

    私も Round関数は 丸め処理に使うぐらいの認識しかなかったですね。
    全知じゃないので、知らないことも たくさんあります。

    常識といわれても 知らないことは たくさんありますけど。

    丸め処理に関しては、もう少し 確認したほうが よかったけど
    おかしいと 言われなければ 気が付かないです。


  • id:llusall
    >takntさん
    ひどい事を言ってしまいました。ゴメンナサイ(。_。)
  • id:taroemon
    質問者です。

    みなさん熱心なコメントありがとうございます。
    これまで傍観しておりましたが、
    SALINGERさんのご指摘のとおり、
    これほどコメントがのびてしまったことに多少困惑しています。

    活発なご意見、ご指導に水を差すようで恐縮ですが、
    ちょうど一区切りついたこと
    質問者が満足していることに免じ、
    このへんで切りにしていただけると幸いです。

    私の勉強不足のため、
    いろいろご迷惑をおかけしておりますが、
    また質問をしますので、
    あらためて皆様からご指導いただきたいと思います。
    今後ともよろしくお願いします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません