• 締切済み

マクロにおける按分について

初めまして。 どうしてもマクロについて分からないので教えてください。例えば、商品に『りんご』と『みかん』があり、それぞれ3行ずつの内訳の個数が書いてあったとします。 りんごの1行目だけに金額15000円が入っていたとして、のこりのりんごの2行目と3行目にはブランクとします。トータルのりんごの個数を分母にして、分子にそれぞれの行の個数にして按分したとします。 端数がでたときには1行目にプラスします。 また次の行には『みかん』が書いてあり、りんごと同様にみかんだけで個数按分するといった仕組みにしたいと考えています。 どのような構文を書いてよいのかが分かりません。 教えてください。

みんなの回答

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.1

Sub 按分() Dim 合計個数 As Long Dim 合計金額 As Currency Dim i As Long Dim 行数 As Long 行数 = Cells(1, 1).End(xlDown).Row 合計金額 = Cells(1, 2) 合計個数 = WorksheetFunction.Sum(Range(Cells(1, 1), Cells(行数, 1))) For i = 2 To 行数 Cells(i, 2) = Round(合計金額 * Cells(i, 1) / 合計個数, 0) Next Cells(1, 2) = 合計金額 - WorksheetFunction.Sum(Range(Cells(2, 2), Cells(行数, 2))) End Sub 1列目に個数、2列目に金額として、1行目2列目に合計金額が入っているっているとして 実際は3行ではないのでしょうからLoopを使いました。

abbeyroad1
質問者

補足

rivoisuさま 早速のご返信ありがとうございます。こんなにレスポンスが速く来るとは思っていませんでした。小生の説明がよくなかったのですが、(画像添付がうまくいきませんでしたので、直接「補足内容」に入力します。 実際は下記のような感じでシートが作成されております。(二重線以下がエクセルシートです。) A列は商品(りんご、みかんなど)B列は個数(上から15、10、17) C列は金額(1行目の『りんご』15000、4行目の『みかん』の2000)です。 *商品名 * 個数 * 金額 ================================= 1 *りんご * 15(個) * 15000 --------------------------------- 2 *りんご * 10(個) * --------------------------------- 3 *りんご * 17 (個) * --------------------------------- 4 *みかん * 5 (個) * 2000 --------------------------------- 5 *みかん * 4 (個) * --------------------------------- 6 *みかん * 3(個) * --------------------------------- rivoisuさまのやり方でマクロを作成してみたのですが、1行目のりんごの¥15,000で『りんご』と『みかん』のトータル個数で按分する結果になりました。(¥2000を5:4:3で割りたいのですが、うまくできませんでした。) (行数)りんごは1行目から3行目まで、みかんは4行目から6行目までといったように認識させるにはどのようにしたらよろしいのでしょうか。(商品は常にたくさんありますし、その日その日で行数が変わります。)お手数お掛けしますが、助けてください。お願いします。

関連するQ&A

  • エクセルのマクロについて

    エクセルのマクロについて C列の最後の全角2文字が『林檎』の場合、G列のどこかに『林檎』の文言が入っています。 もし入っていない場合のみメッセージを入れる。 こんなマクロできますか?    C列       G列 5行目 ああああ林檎 いい林檎いいい ――――――――――――――――――    C列       G列 6行目 いいいい林檎 いいいいい蜜柑 ――――――――――――――――――    C列      G列 7行目 うううう林檎 林檎いいいいい ――――――――――――――――――    C列       G列 8行目 うううう蜜柑 林檎いいいいい ↑この場合6行目G列に『林檎』の文言が入っていないので『6行目』とメッセージ ※8行目はC列の最後に『林檎』の文言がないので特にメッセージはなし。 列(\"5:65536\")の範囲でお願いしますm(><)m

  • エクセルのマクロについて

    エクセルのマクロについて C列の最後の全角2文字が『林檎』の場合、G列のどこかに『林檎』の文言が入っています。 もし入っていない場合のみメッセージを入れる。 こんなマクロできますか?    C列       G列 5行目 ああああ林檎 いい林檎いいい ――――――――――――――――――    C列       G列 6行目 いいいい林檎 いいいいい蜜柑 ――――――――――――――――――    C列      G列 7行目 うううう林檎 林檎いいいいい ――――――――――――――――――    C列       G列 8行目 うううう蜜柑 林檎いいいいい ↑この場合6行目G列に『林檎』の文言が入っていないので『6行目』とメッセージ ※8行目はC列の最後に『林檎』の文言がないので特にメッセージはなし。 列("5:65536")の範囲でお願いしますm(><)m

  • (excel)値が連続していた場合、削除してしまうマクロ

    ある列で、値(文字)が連続していた場合、 一番上の行のみ残し、他の行を削除 そして、番号を*-*と合体させたいのですが、、、 マクロをつかわなきゃいけないと思うんですけど 勉強中でなかなか完成できません! どなたかレクチャーお願いします! (例) 1 りんご 2 りんご 3 みかん 4 みかん 5 みかん 6 もも 7 もも  ↓ 1-2 りんご 3-5 みかん 6-7 もも

  • 行を挿入するマクロがうまくいきません。

    Sheets("りんご").Select Rows("1:1").Select Selection.Copy Sheets("みかん").Select Range("人").Select Selection.Insert Shift:=xlDown Application.CutCopyMode = False End Sub というマクロは、りんごのシートにある1行をコピーして、 みかんのシートの人と名前定義してある特定の行にコピーする マクロです。この次に下のマクロを実行すると Sheets("りんご").Select Rows("2:3").Select Selection.Copy Sheets("みかん").Select Range("人").Select Selection.Insert Shift:=xlDown それまでのものが残ってしまい、行がどんどん増えていってしまいます。 いずれかのマクロを実行すればリセットされて行が増えないように コピーするにはどうすればよいでしょうか・・?

  • エクセルマクロ 特定の文字列を含む行を削除

    マクロについて教えてください。 以下のなかから、りんごを含んでいる行のみ削除したいのです。 できれば、inputboxで削除したい文字列を入力するようにしたいです。 1|りんご|30 2|みかん|50 3|りんご|30 4|すいか|30 5|みかん|50 いろいろ調べましたがわかりません。。お願いします。

  • 重複する項目の値を合計してまとめる。

    同じ品名が3箇所あるとして、それぞれの行に個数があります。 品名が重複する場合、その個数を合算し、他を削除します。 1 みかん 1個 2 みかん 4個 3 りんご 5個 4 みかん 4個 4 洋ナシ 2個 この場合、1行目、2行目、4行目の品名が重複するので それぞれの個数を合算し、最終的に下記のような表を作るのが目標です 1 みかん 9個 2 りんご 5個 3 洋ナシ 2個 よろくおねがいします。

  • マクロでひとつのセルから複数表示したいです

    半年くらい前にこちらで回答いただいてすごく助かりました http://okwave.jp/qa/q8213128.html ただ、データが増えたからだと思いますが、ファイルを開くのも データが表示されるのも遅くなってしまい、 マクロを使って処理できないものかと調べてみましたが、 構文からどれを組み合わせたらうまく結果がでるのか 分かりません... マクロは、ほかのデータで、構文の本に載っているものを使ったりはしていますが... 詳しい方どうか教えてくださいよろしくお願いします。 データの内容ですが、エクセルのファイルが ”管理ファイル” ”商品一覧ファイル” の2個あり、 管理ファイルに入力すると、 商品一覧ファイルより検索して該当する部分を表示したいと思っています 商品一覧ファイルの中身は次のようになっています   A      B      C 1 分類番号 商品番号 商品名 2 F100    10      みかん 3        20      りんご 4 5 V500    10      にんじん 6         20      たまねぎ 7         30      かぼちゃ ・ ・ ・ 5000行ちかいデータがはいっています 管理ファイルには、 Aの列の日付とBの列の分類番号だけ手入力します。 Bの列に入力した分類番号で登録してある、 みかんとりんごが表示されるようにしたいです。   A    B      C 1 日付  分類番号 商品番号 商品名 2 7/30  F100    10     みかん 3              20     りんご 4 5 7/31  F100    10     みかん 6              20     りんご 7 8      V500    10     にんじん 9             20     たまねぎ 10            30     かぼちゃ ・ ・ 500行くらい入力したいです。 説明がうまくなくすみません。よろしくお願いします。

  • エクセル VBA マクロについて

    初めまして。 以下のようなマクロを組みたいんですが可能でしょうか?  A     B     C    D    E    F 東京   足立区 みかん  10   5   50       葛飾区 みかん  20   3   60        港区  りんご  30   1   30 小計                       140 ( 空白行   ) 愛知  名古屋市 みかん  10   5   50      東海市    もも   10   5   50 小計                       100 上記のようなデーターシートがあります。 Dには数字が入ってるんですが、 ここに係数をかけたいんです。 たとえば、=10*1.07 とか (1)元の値に係数かける式をセルに入れるマクロはあるんでしょうか? (2)この係数を別シートのセルで入力したいんですが セルを参照できますか? (3)みかん、もも、りんごの列を検索して、  それに対応した係数かけるマクロはあるんでしょうか? 処理速度は、とくにはこだわりません。 ご指導おねがいいたします。

  • VBAのマクロに詳しい方!!

    初歩的なことですが、マクロ初心者なので 教えて下さい。 A,1に分類、B,1に商品名、C,1にH店の売上個数、D,1にK店の売上個数が入っている時、 sheet1のB列の抜き出したいセルをマウスでドラッグすると、そこの行がコピーされ、sheet2にその行がペーストされる仕組みのマクロを作りたいのですが、どうすればいいのでしょうか(´・_・`) 例えば、マクロボタンを押して、mainを選択したら、"商品を選択してください"といったinputboxが出てきて、B4:B8を選択したら、4行目から8行目までが、sheet2の2行目から6行目にコピーされているようにしたいということです。 詳しい方、教えて下さい!

  • マクロについて質問です。

    A B C   1 3 りんご 2  赤 3 くだもの 4 6 みかん 5 オレンジ 6 くだもの 7 9 ぶどう 8  紫 9 くだもの というデータがシート1にあったとして、シート2のa2セルに6と入力すると以下のようにa5セル以降に抽出し、6という入力を消すと抽出したものも消えるようなマクロ 6 みかん  オレンジ  くだもの 上のような質問で下のマクロを教えていただけたのですが、もし、みかんのb列も3だった場合いしたのようにみかんの行まで抽出できるようにするには下の構文をどうかえたらよいでしょうか。下手くそな質問ですがよろしくお願いします。 3 りんご   赤  くだもの  みかん  オレンジ  くだもの 現在、わかっている構文↓ Private Sub Worksheet_Change(ByVal Target As Range) 'この行から Dim c As Range, wS As Worksheet Set wS = Worksheets("Sheet1") With Target If .Address = "$A$2" Then If .Value <> "" Then Set c = wS.Range("B:B").Find(what:=.Value, LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then c.Offset(, 1).Resize(3).Copy Range("A5") Else MsgBox "該当データなし" End If Else Range("A5").Resize(3).ClearContents End If End If End With End Sub 'この行まで