• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル2000のマクロでこんな事出来ますか?)

Excel2000のマクロでデータを指定の順序で入れ替え、項目名を書き換え、掛け算と合計を計算する方法

このQ&Aのポイント
  • エクセル2000のマクロを使用して、データの入れ替えと書き換え、掛け算と合計の計算を行う方法を教えてください。
  • データにはA~AEまでの項目があり、入れ替える順序はC、A、T、U、W、V、AA、Z、Nです。
  • Zの項目を「仕入単価」、AAの項目を「数量」と書き換え、AAとZの掛け算結果を新しい列に表示し、合計金額を計算します。

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.7

> 教えて頂いたマクロを見ながらいろいろと試したのですがどうも上手くいきません。 > その辺り分り易く教えて頂けると嬉しいです。 ご自分で列の順序の入れ替えをマクロの記録でやってみてどのような記述になるのか見てみましたか? とりあえず回答は書きましたが、自分でなおせないと応用がきかなくて困ると思いますよ。 Sub TEST04() Dim x As Long With ActiveSheet .Columns("C").Cut .Columns("A").Insert Shift:=xlToRight .Columns("T:U").Cut .Columns("C:D").Insert Shift:=xlToRight .Columns("W").Cut .Columns("E").Insert Shift:=xlToRight .Columns("W").Cut .Columns("F").Insert Shift:=xlToRight .Columns("AA").Cut .Columns("G").Insert Shift:=xlToRight .Columns("AA").Cut .Columns("H").Insert Shift:=xlToRight .Columns("O:P").Cut .Columns("I:J").Insert Shift:=xlToRight .Columns("K:AE").Delete Shift:=xlToLeft 'J列不要の場合は("J:AE")にする .Columns("I").Insert Shift:=xlToRight .Range("G1") = "数量" .Range("H1") = "仕入単価" .Range("I1") = "合計金額" x = .Range("H" & .Rows.Count).End(xlUp).Row .Range("I2:I" & x).FormulaR1C1 = "=ROUNDDOWN(RC[-2]*RC[-1],0)" .Range("I" & x + 1).FormulaR1C1 = "=SUM(R[" & 1 - x & "]C:R[-1]C)" .Range("G2:G" & x).NumberFormatLocal = "0;[赤]-0" .Range("I2:I" & x + 1).NumberFormatLocal = "#,##0;[赤]-#,##0" .Range(.Range("A1"), .Range("A1").End(xlToRight)).Interior.ColorIndex = 6 End With End Sub

so2580
質問者

お礼

何度もお手数をお掛けし申し訳ありませんでした。 丁寧に教えて頂きました事、心から感謝申し上げます。 >ご自分で列の順序の入れ替えをマクロの記録でやってみてどのような >記述になるのか見てみましたか? >とりあえず回答は書きましたが、自分でなおせないと応用がきかなくて >困ると思いますよ。 おっしゃる通りです。 少しずつですが勉強していきたいと思います。 本当に有難うございました。

その他の回答 (6)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.6

おはようございます。merlionXXです。 > G列、I列の中で-(マイナス)の表示がされる事があります。 > その際にその数字を赤文字で表示させたいのですが、 セルの書式設定を変えればいいというのはわかりますよね? ご自分でマクロの記録で書式設定の変更をやってみて、それがどのような記述になるのか一度見てくださいね。 今回は下記のような修正になります。 GとI列はマイナス時は赤字、I列はさらにカンマが入るんでしたね。 Sub TEST03() Dim x As Long With ActiveSheet .Columns("C").Cut .Columns("A").Insert Shift:=xlToRight .Columns("T:U").Cut .Columns("C:D").Insert Shift:=xlToRight .Columns("W").Cut .Columns("E").Insert Shift:=xlToRight .Columns("W").Cut .Columns("F").Insert Shift:=xlToRight .Columns("AA").Cut .Columns("G").Insert Shift:=xlToRight .Columns("AA").Cut .Columns("H").Insert Shift:=xlToRight .Columns("T").Cut .Columns("I").Insert Shift:=xlToRight .Columns("J:AE").Delete Shift:=xlToLeft .Columns("I").Insert Shift:=xlToRight .Range("G1") = "数量" .Range("H1") = "仕入単価" .Range("I1") = "合計金額" x = .Range("H" & .Rows.Count).End(xlUp).Row .Range("I2:I" & x).FormulaR1C1 = "=ROUNDDOWN(RC[-2]*RC[-1],0)" .Range("I" & x + 1).FormulaR1C1 = "=SUM(R[" & 1 - x & "]C:R[-1]C)" .Range("G2:G" & x).NumberFormatLocal = "0;[赤]-0" .Range("I2:I" & x + 1).NumberFormatLocal = "#,##0;[赤]-#,##0" .Range("A1:J1").Interior.ColorIndex = 6 End With End Sub

so2580
質問者

お礼

有難うございます。 何度も感謝致します。 希望通りになりました。 さらに今後の可能性として下記のような場合も考えらるのですが、 (またか!とお叱りを受けるのを覚悟で質問させて下さい) 元データのN列が最後に来ますが、これがN列では無くI列が最後の場合、 又はI列、J列と二つの列が最後の場合はどうなるのでしょうか? N列は必要無しです。 その他はまったく同じ条件です。 教えて頂いたマクロを見ながらいろいろと試したのですがどうも上手くいきません。 その辺り分り易く教えて頂けると嬉しいです。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

> 一つ後で気が付いたんですがI列の合計を一番下のセルに表示させるには > どうすれば良いのでしょう? > それとI列のみカンマで区切りを入れたいのですが合わせて教えて下さい。 では、これでいかがでしょうか? どこが変わったか見比べてください。 Sub TEST02() Dim x As Long With ActiveSheet .Columns("C").Cut .Columns("A").Insert Shift:=xlToRight .Columns("T:U").Cut .Columns("C:D").Insert Shift:=xlToRight .Columns("W").Cut .Columns("E").Insert Shift:=xlToRight .Columns("W").Cut .Columns("F").Insert Shift:=xlToRight .Columns("AA").Cut .Columns("G").Insert Shift:=xlToRight .Columns("AA").Cut .Columns("H").Insert Shift:=xlToRight .Columns("T").Cut .Columns("I").Insert Shift:=xlToRight .Columns("J:AE").Delete Shift:=xlToLeft .Columns("I").Insert Shift:=xlToRight .Range("G1") = "数量" .Range("H1") = "仕入単価" .Range("I1") = "合計金額" x = .Range("H" & .Rows.Count).End(xlUp).Row .Range("I2:I" & x).FormulaR1C1 = "=ROUNDDOWN(RC[-2]*RC[-1],0)" .Range("I" & x + 1).FormulaR1C1 = "=SUM(R[" & 1 - x & "]C:R[-1]C)" .Range("I2:I" & x + 1).NumberFormatLocal = "#,##0" .Range("A1:J1").Interior.ColorIndex = 6 End With End Sub

so2580
質問者

お礼

merlionXXさん 何度も本当に有難うございます。 思い通りになりました。 欲を言いますが、あと一つだけ教えて下さい。 G列、I列の中で-(マイナス)の表示がされる事があります。 その際にその数字を赤文字で表示させたいのですが、その場合は どうすれば良いのでしょう?

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。 merlionXX さんから回答が出ていますから、私としては、今のところVBAを書くのは控えますが、 >表示も502.00のようにするのではなく502と小数点を表示させたくありません。 ここの部分ですが、おそらく、片方の単価の部分は、"0.00" で、もう片方の数量が、デフォルト状態で、金額欄は、もともとは、デフォルトの状態のままであったと思うのです。 そういう場合は、単価の書式に引きずられて、金額欄も、"0.00" になってしまうので、意図的に、セルの書式を、"0" または、"#,##0" などとしておいたら、そういう問題は発生しなくなると思います。数式は、merlionXX さんの ROUNDOWN でよいと思います。

so2580
質問者

お礼

お礼が遅くなり申し訳ありませんでした。 私の意図している事が出来ました。 有難うございます。 一つ後で気が付いたんですがI列の合計を一番下のセルに表示させるには どうすれば良いのでしょう? それとI列のみカンマで区切りを入れたいのですが合わせて教えて下さい。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

では、前回答えたものをちょといじって・・・ Sub TEST01() Dim x As Long With ActiveSheet .Columns("C").Cut .Columns("A").Insert Shift:=xlToRight .Columns("T:U").Cut .Columns("C:D").Insert Shift:=xlToRight .Columns("W").Cut .Columns("E").Insert Shift:=xlToRight .Columns("W").Cut .Columns("F").Insert Shift:=xlToRight .Columns("AA").Cut .Columns("G").Insert Shift:=xlToRight .Columns("AA").Cut .Columns("H").Insert Shift:=xlToRight .Columns("T").Cut .Columns("I").Insert Shift:=xlToRight .Columns("J:AE").Delete Shift:=xlToLeft .Columns("I").Insert Shift:=xlToRight .Range("G1") = "数量" .Range("H1") = "仕入単価" .Range("I1") = "合計金額" x = .Range("H" & .Rows.Count).End(xlUp).Row .Range("I2:I" & x).FormulaR1C1 = "=ROUNDDOWN(RC[-2]*RC[-1],0)" .Range("I2:I" & x).NumberFormatLocal = "G/標準" .Range("A1:J1").Interior.ColorIndex = 6 End With End Sub でいいでしょうか?

so2580
質問者

お礼

お礼が遅くなり申し訳ありませんでした。 私の意図している事が出来ました。 有難うございます。 一つ後で気が付いたんですがI列の合計を一番下のセルに表示させるには どうすれば良いのでしょう?

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 前回、同様のご質問をなさって解決していますね。 http://oshiete1.goo.ne.jp/qa2937725.html その時に、再び質問するかもしれないとお書きになっていますので、了解はしていますが、今は、どういう状況なのですか? ここを直してほしいとか、前のものは、うまくなかったとか、最初からというものでもないと思いますが。

so2580
質問者

お礼

御回答有難うございます。 その節は有難うございました。 お陰で前回の分は上手くいきました。 ですが、 「その列の項目には「合計金額」と入れ他の項目と同じように黄色で塗り潰す。 さらにZの単価は基本的に330.00のように小数点以下二桁が入っています。 たまに100.50のように単価に銭が入る事があります。 その場合の計算として例えば仕入単価100.50で数量が5とすれば答えは502となり 銭も計算した上で合計のところで小数点以下は切り捨てにされます。 表示も502.00のようにするのではなく502と小数点を表示させたくありません。」 の部分を追加したいのです。 ただそれだけです。その為に前回の部分も含めて書き直す必要があるのであれば 再度御指示願えればと思います。 度々の事で申し訳ありませんが宜しくお願いします。

  • yokomaya
  • ベストアンサー率40% (147/366)
回答No.1

マクロの記録でできると思いますよ。 順番を入れ替えると考えるからややこしいですが 新しいシートに必要な項目を順に列でコピーしていけば単純ですから。 項目名の書き換えもできますし、数式入力は.end(xlup)を使って最終行を得ればいいでしょう。 単価については Sub test() For Each cl In Selection If cl.Value = Int(cl.Value) Then cl.NumberFormatLocal = "0" Else cl.NumberFormatLocal = "0.00" End If Next End Sub な感じでよろしいかと。

so2580
質問者

お礼

早々に有難うございました。 参考にさせて頂きます。

関連するQ&A