- ベストアンサー
エクセル2000のマクロで教えて下さい。
日々あるデータが送られてきます。 A~AEまであります。 マクロで下記のようにしたいのです。 残すのはA、C、N、T、U、V、W、Z、AAのみですが順序を入替えたい。 順番としてC、A、T、U、W、V、AA、Z、Nの順です。 どのようにすれば良いのか教えて下さい。 もし補足が必要なら申し付け下さい。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
#3です。 #3で書いた拙いコードに追加のご要望を加えるとこんな感じでしょうか。 Sub TEST001() 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:I").Insert Shift:=xlToRight .Range("G1") = "仕入数" .Range("H1") = "仕入単価" .Range("I1") = "合計金額" .Range("K1") = "備考" x = .Range("H" & .Rows.Count).End(xlUp).Row .Range("I2:I" & x).FormulaR1C1 = "=RC[-2]*RC[-1]" End With End Sub #5のWendy02さんのコード、勉強になります。 VBAだと横のソートが出来るんですね!
その他の回答 (7)
- taocat
- ベストアンサー率61% (191/310)
こんにちは。 回答ではありませんが、Wendy02さんが触れてないのでMerlionXXさんに一言。 それにもしかして質問者もご存知ないかもしれないので。。。 >VBAだと横のソートが出来るんですね! VBAでなくてもできますが。。。(^^;;; それからご自分の回答を拙いコードだと仰ってますが 質問者のレベルをちゃんと考慮している点に置いて優れた回答だと思いますよ。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 下から数えて、5行目の .Rows("1").Delete の後、4行目のEnd With との間に、以下の項目を付けたしします。 .Rows("1").Delete -----ここから始まり------------------------------ With .Range("A1") .Offset(, 6).Value = "仕入数" .Offset(, 7).Value = "仕入単位" .Offset(, 8).EntireColumn.Insert .Offset(, 8).Value = "合計金額" .Range(.Offset(1, 8), .Offset(1, 7).End(xlDown).Offset(, 1)).FormulaLocal = "=RC[-2]*RC[-1]" .Offset(, 10).Value = "備考" End With -----ここで終わり--------------------------------- End With Application.ScreenUpdating = True Set r = Nothing
お礼
御礼が大変遅くなりました事をお詫び致します。 その後なんとか上手くいくようになりました。 しかしその後若干の仕様の変更があった為、再度御教授願う事になるかもしれません。 その時はまた宜しくお願い致します。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 #1さんの言うような内容ですが、実際に私が書いてみました。 一旦、保存してから、行ってください。ダメな場合は、保存をしなければよいのですから。 '---------------------------------------------------- Sub TestSample() Dim ar As Variant Dim i As Integer Dim v As Variant Dim r As Range Application.ScreenUpdating = False With ActiveSheet .Rows("1").Insert ar = Split("C,A,T,U,W,V,AA,Z,N", ",") .Range("A1:AA1").Value = 99 i = 1 For Each v In ar .Range(v & "1").Value = i i = i + 1 Next v .Range("A1:AA65536").Sort _ Key1:=.Range("A1"), _ Order1:=xlAscending, _ Header:=xlGuess, _ OrderCustom:=1, _ MatchCase:=False, _ Orientation:=xlLeftToRight Set r = .Range("A1:AA1").Find(99, , xlValues, 1) .Range(r, .Range("IV1").End(xlLeftToRight)).EntireColumn.Delete .Rows("1").Delete End With Application.ScreenUpdating = True Set r = Nothing End Sub
お礼
早々に御回答頂きました事に感謝致します。 お礼が遅くなったしまいました事をお詫び致します。 その後、確認致しましたところ下記の部分の追加が必要となりました。 再度お手数ですが御教授願えれば幸いです。 順番に並び替えますと元データのAA、Zが7番目8番目にきます。 でAAの項目には「出荷数」Zの項目には「販売単価」と元データには入っています。 それをそれぞれ「仕入数」「仕入単価」に変えたいのです。 さらに9番目の列に「合計金額」という新たな項目を作り「出荷数」と 「販売単価」の掛け合わせた数値を入れたいのです。 で、10番目に元データのNをそのまま反映させて、さらに11番目に 項目名「備考」という列を新たに作成したいのです。 「備考」の列は項目以外の行は空白です。 以上になりますが補足が必要な際は申しつけ下さい。
- kobouzu_su
- ベストアンサー率45% (24/53)
こんにちは。 方法はいくつかあると思いますが、一案。 新しくシートを追加してそこにコピー抽出していく方法です。 ●元シート名は、Sheet1 としています。 '---------------------------------------------------- Sub Test() Dim myClms Dim C As Integer myClms = Array("C", "A", "T", "U", "W", "V", "AA", "Z", "N") Sheets.Add after:=Sheets(Sheets.Count) For C = LBound(myClms) To UBound(myClms) Sheets("Sheet1").Columns(myClms(C)).Copy Columns(C + 1) Next C End Sub '------------------------------------------------------------ それからこういった類の処理には上記のように配列を利用することをお勧めします。 配列に「並べたい順番に」抽出したい列番号を入れておくと、 順番を変えたい時とか、抽出したい列の増減にも柔軟に対応が出来ますから。
お礼
早々に御回答頂きました事に感謝致します。 お礼が遅くなったしまいました事をお詫び致します。 その後、確認致しましたところ下記の部分の追加が必要となりました。 再度お手数ですが御教授願えれば幸いです。 順番に並び替えますと元データのAA、Zが7番目8番目にきます。 でAAの項目には「出荷数」Zの項目には「販売単価」と元データには入っています。 それをそれぞれ「仕入数」「仕入単価」に変えたいのです。 さらに9番目の列に「合計金額」という新たな項目を作り「出荷数」と 「販売単価」の掛け合わせた数値を入れたいのです。 で、10番目に元データのNをそのまま反映させて、さらに11番目に 項目名「備考」という列を新たに作成したいのです。 「備考」の列は項目以外の行は空白です。 以上になりますが補足が必要な際は申しつけ下さい。
- merlionXX
- ベストアンサー率48% (1930/4007)
#2です。 AE列まであったのですね。修正します。 Sub TEST01() 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 End With End Sub
お礼
早々に御回答頂きました事に感謝致します。 お礼が遅くなったしまいました事をお詫び致します。 その後、確認致しましたところ下記の部分の追加が必要となりました。 再度お手数ですが御教授願えれば幸いです。 順番に並び替えますと元データのAA、Zが7番目8番目にきます。 でAAの項目には「出荷数」Zの項目には「販売単価」と元データには入っています。 それをそれぞれ「仕入数」「仕入単価」に変えたいのです。 さらに9番目の列に「合計金額」という新たな項目を作り「出荷数」と 「販売単価」の掛け合わせた数値を入れたいのです。 で、10番目に元データのNをそのまま反映させて、さらに11番目に 項目名「備考」という列を新たに作成したいのです。 「備考」の列は項目以外の行は空白です。 以上になりますが補足が必要な際は申しつけ下さい。
- merlionXX
- ベストアンサー率48% (1930/4007)
こんな感じですか? Sub TEST01() 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:AA").Delete Shift:=xlToLeft End With End Sub
お礼
早々に御回答頂きました事に感謝致します。 お礼が遅くなったしまいました事をお詫び致します。 その後、確認致しましたところ下記の部分の追加が必要となりました。 再度お手数ですが御教授願えれば幸いです。 順番に並び替えますと元データのAA、Zが7番目8番目にきます。 でAAの項目には「出荷数」Zの項目には「販売単価」と元データには入っています。 それをそれぞれ「仕入数」「仕入単価」に変えたいのです。 さらに9番目の列に「合計金額」という新たな項目を作り「出荷数」と 「販売単価」の掛け合わせた数値を入れたいのです。 で、10番目に元データのNをそのまま反映させて、さらに11番目に 項目名「備考」という列を新たに作成したいのです。 「備考」の列は項目以外の行は空白です。 以上になりますが補足が必要な際は申しつけ下さい。
要望の内容であれば、 「マクロの記録」を使って ・不要列の削除 ・列の切り取って挿入し並びを入れ替え で十分と思いますが。
お礼
早々に御回答頂きました事に感謝致します。 お礼が遅くなったしまいました事をお詫び致します。 その後、確認致しましたところ下記の部分の追加が必要となりました。 再度お手数ですが御教授願えれば幸いです。 順番に並び替えますと元データのAA、Zが7番目8番目にきます。 でAAの項目には「出荷数」Zの項目には「販売単価」と元データには入っています。 それをそれぞれ「仕入数」「仕入単価」に変えたいのです。 さらに9番目の列に「合計金額」という新たな項目を作り「出荷数」と 「販売単価」の掛け合わせた数値を入れたいのです。 で、10番目に元データのNをそのまま反映させて、さらに11番目に 項目名「備考」という列を新たに作成したいのです。 「備考」の列は項目以外の行は空白です。 以上になりますが補足が必要な際は申しつけ下さい。
お礼
御礼が大変遅くなりました事をお詫び致します。 その後なんとか上手くいくようになりました。 素人の私にも比較的分り易い内容でお陰で助かりました。 しかしその後若干の仕様の変更があった為、再度御教授願う事になるかもしれません。 その時はまた宜しくお願い致します。