• ベストアンサー

エクセルマクロの件(2)

お世話になります。 先日このサイトで教えていただき(No.3433483)、下記のようなマクロができました。 その節はありがとうございました。 マクロ実行したところ、1回目は問題なく動作し、マクロ実行によって作成されたデータを削除し、改めて実行すれば問題ありませんでした。 ただ、2回目以降(一覧データを削除せずそのまま実行)マクロを実行すると、毎回180行以降のデータが重複するようになりました。 3回実行すると、180行より前のデータは1行のみの表示ですが、181行目以降のものは3行同じデータが記載されるということです。 全てのデータが重複するのであれば分からなくはないのですが、一部分のみの重複なので意味が分からなくなってしまいました。 (マクロの中にそう処理するよう記載があるのだと思いますが素人のため分かりません;) 理由の分かる方がいらっしゃいましたらご指摘いただければと思いますのでよろしくお願いします。 Dim ptr As Integer Sheets("シートA").Activate ptr = Range("A65536").End(xlUp).Row Range("A4:P" & ptr).Copy Destination:=Sheets("一覧").Range("A4") Sheets("シートB").Activate ptr = Sheets("シートB").Range("A65536").End(xlUp).Row Range("A4:P" & ptr).Copy Destination:=Sheets("一覧").Range("A65536").End(xlUp).Offset(1, 0) Sheets("一覧").Activate Range(Cells(4, "A"), Cells(Range("A65536").End(xlUp).Row, "P")).Sort _ Key1:=Range("D4"), Order1:=xlAscending, Key2:=Range("E4"), _ Order2:=xlAscending, Key3:=Range("F4"), Order3:=xlAscending, _ Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal, DataOption3:=xlSortNormal ' End Sub

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.4

>ただ、当然ながらタイトル(1~3行目迄記載あり)も見事に消えました(笑) シートの仕様が解らなかったので、単純にシートをクリアするための命令を書いてしまいました・・・。 >とりあえず、3行目までは残してそれ以降を消去するといった方法を考えてみたいと思います。 こんな感じでしょうか。 Sheets("一覧").Activate Range(Range("A4:O4"), Range("A4").End(xlDown)).ClearContents >希望は全て「上書き」です。 適切な回答を得るためにも、質問時にはある程度の仕様を明記するのが一番かと思います。 質問されるかたの利用方法もマクロ作成のレベルも判別できないので、質問文から読めない部分のコードまで書いてくれませんからね。 前回は『Bのデータを貼り付ける位置で問題が発生しています。』と言う質問だったので、その部分を改善した幾つかの回答が寄せられました。 貼付け側のシート内容(タイトルの有無等)も解らないので、貼付け前に必要な作業(消去)を省いて回答したまでです。 (利用者がそれなりの対処をするだろうという思惑もありますが・・・。)

suzu-fam
質問者

お礼

タイトルが消えた件は自分の馬鹿さ加減に呆れて書いたものでしたが、事情を説明しなければ分からないですよね。 大変申し訳ありませんでした。 自分の無知さ故に質問も満足にできませんでした。 そんな中でも親切に教えていただき感謝しております。 以後自分に未知の部分ではその説明からさせていただきたいと思います。

その他の回答 (5)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.6

私も前回の質問の回答をしているようです。 私も2通り回答しており、もう一方のご回答も有ります。 ざっと自分のコードを見直したところ、180行うんうんでひっか理そうなコードは無いようです。 ーー 後は実際のデータとの関連で、止まったり、意図どおりではないケースです。これも回答のコードが不十分といえば不十分なんですが。 本件はこれに該当し、単純なコードミスではないようです。 あと質問者のケースにコードをチューニングするときの誤解などです。 ーー すぐ頭に浮かんだのはかき2点です。 いつも Range("A65536").End(xlUp).Row Usedらんげ CurrentRegion を回答で使うときは、下の行に余分なもの(別の表とか、フッタ的注釈など)、中間に空白行が、無いことを祈って回答してますが、それが1つ。 ーー それと第2シートに累積しているので、テストなどを繰り返すと 前回のものも累積していく。(クリアするコードを入れると累積にならない。) そんなことを思いました。 ーー もう改善方法は今回の皆様のご指摘で判ったようですね。 前回答の、どの分を採用されたのか書いてないのですが、 私の回答と関係なければ無視してください。 関係あればすみません。

suzu-fam
質問者

お礼

前回の質問にもお答えいただきありがとうございました。 最終的には前回の#3さんのお答えを参照させていただきました。 180行というのはデータの量の問題でしたのでこちらの問題でした。 申し訳ありません。 改善方法はあと1点(色のクリア)がはっきりしませんが、自分でも 考えてみたいと思います。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.5

#03です >色ごと消去できる方法を ClearContentsメソッドをClearメソッドに変えるだけです。 これは#02さんの回答に既に出ています。「タイトルも見事に消えてしまった」ということですからClearメソッドは試されたのですね。ちゃんと色も消えませんでしたか? 一から十まで聞くのではなかなか上達しませんよ。

suzu-fam
質問者

お礼

ありがとうございます。 clearにすればいいのかなと思い試してはみましたが、消えなかったんです。 ちなみに現在の追加した部分は Sheets("一覧").Activate Range(Range("A4:P4"), Range("A4").End(xlDown)).Clear となっています。 でも、確かに#2さんのご指摘の時は全て(きれいさっぱり)消えました。 なかなか難しいですね^^;

suzu-fam
質問者

補足

すいません、順番が逆になってしまいましたが。 改めてやってみたらClearで全て消去できました。 何度もやってできなかったんですが、前の履歴か何かが残っていたのかもしれません。 皆様何度もありがとうございました。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

2回目以降の実行時に期待する動作をしないのは、他の回答者さまも書かれているようにシートAの内容を貼り付けるのは「一覧シートのA4セル」で、シートBの内容を貼り付けるのは一覧シートの最終行の下のセルだからです。元々一覧シートにデータがあり、シートAのデータ行数が少ない場合は前のデータが残ってしまいますね。 いかようにも作り替えはできますが「どうしたい」がないと回答しづらいですね。 Sheets("一覧").Activate Range(Cells(4, "A"), Cells(Range("A65536").End(xlUp).Row, "P")).ClearContents の2行をDim宣言の直後に挿入すれば、一覧シートのデータを予め削除してから貼り付けることができます。

suzu-fam
質問者

お礼

ありがとうございます。 データの削除を自分で考えてみましたがやはり無理でした・・・ おっしゃるとおりの記載をマクロにしたところ無事以前の一覧は消去され毎回同じ一覧が作成されるようになりました。 ただ、この2行の追加だとデータのみの消去ですよね。 大変申し訳ありませんが、シートAとBのデータには行ごとに 色づけがしてあるんです。 現状だと色がそのまま残ってしまうので、色ごと消去できる方法を ご指摘いただけないでしょうか。 希望は、マクロ実行時、以前作った一覧は一覧ごと全て消去し、最新の一覧が作りたい。ということです。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

1回目の貼付けでは、A4を基準に貼付けます。 2回目の貼付けでは、Range("A65536").End(xlUp).Row.Offset(1, 0)でシートのデータの最下端+1行目を基準にしています。 1回目のデータが仮に1行の貼付けだったとしても、シートには前回のデータがあるので、2回目は残りデータの最下端+1行目から貼付く事になります。 このマクロは、何もデータの無いシートを対象に動作するようになっているので、データが重複しないようにするためには、転記前にシートの初期化(消去)を行わなくてはなりません。 コピー開始前に、 Sheets("一覧").Cells.Clear と書き加えて下さい。

suzu-fam
質問者

お礼

ありがとうございます。 早速やってみましたが、きれいに消去ができました。 ただ、当然ながらタイトル(1~3行目迄記載あり)も見事に消えました(笑) とりあえず、3行目までは残してそれ以降を消去するといった方法を考えてみたいと思います。

  • nekoron07
  • ベストアンサー率37% (69/184)
回答No.1

マクロ記述の4行目の Range("A4:P" & ptr).Copy Destination:=Sheets("一覧").Range("A4") から、「シートA」のデータは、常に「一覧」のセルA4の位置に貼り付けられるようになっており、 また、7行目の Range("A4:P" & ptr).Copy Destination:=Sheets("一覧").Range("A65536").End(xlUp).Offset(1, 0) から、「シートB」のデータは、常に「一覧」の最終行の次の行位置に貼り付けられるようになっていますので、「一覧」を削除しないままマクロを実行するとシートA部分は「上書き」、シートB部分は「追加」されるようになっています。 質問者様はどのようにしたいのでしょうか。 もし、シートAも最終行の下に追加したい、というのでしたら、4行目を Range("A4:P" & ptr).Copy Destination:=Sheets("一覧").Range("A65536").End(xlUp).Offset(1, 0) とすれば、シートAのデータも「上書き」ではなく一覧に「追加」できます。

suzu-fam
質問者

お礼

ありがとうございました。 希望は全て「上書き」です。そのためには一度全てのデータの消去をすればいいみたいですね。

関連するQ&A

  • エクセルマクロの件

    AとBにあるデータの一覧をCにコピーして、全体を日付順にソートするという処理をしたいと思っています。 そこでエクセルマクロにて (1) Aのデータの必要部分をコピー、Cに貼り付け (2) Bのデータの必要部分をコピー、Cに貼り付け (3) 全体を日付順にソート というものができました。 ただ、Bのデータを貼り付ける位置で問題が発生しています。 仮に、Aに200行までのデータが入っている場合、Bのデータを201行目に張り付けすれば問題ありませんが、Aのデータが増えたときにはAのデータの201行目以降はBのデータで上書きされてしまいます。 そこで、Bのデータを上記の例だと250行目あたりに張り付けするようにマクロを変えると、なぜかBのデータは一切Cに反映されなくなってしまいます。 この理由と、上記の対策があれば教えていただければと思います。 ちなみに、現在設定されているマクロは以下の通りです。 自動記録にてつくってあるので無駄な部分もあるかと思いますが、よろしければご覧いただければと思います。 Sheets("Aのシート").Select ActiveWindow.SmallScroll Down:=-138  Range("A4:O200").Select Selection.Copy Sheets("Cのシート").Select ActiveWindow.SmallScroll Down:=-162  Range("A4").Select ActiveSheet.Paste Application.CutCopyMode = False  Sheets("Bのシート").Select Range("G25:G28").Select Range("G28").Activate ActiveWindow.SmallScroll Down:=-30 Range("A4:O120").Select Selection.Copy Sheets("Cのシート").Select ActiveWindow.SmallScroll Down:=147 Range("A181").Select ActiveSheet.Paste Cells.Select Range("A4:O200").Select Selection.Sort Key1:=Range("C4"), Order1:=xlAscending, Key2:=Range("D4") _ , Order2:=xlAscending, Key3:=Range("E4"), Order3:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:= _ xlSortNormal, DataOption3:=xlSortNormal End Sub

  • Excelのイベントマクロ

    Private Sub Worksheet_Activate()に関する質問です。 ワークシート1と2があるとします。 ワークシート1は普通のデータが記されており、それのソートを実行するマクロをMacro1、そのデータから重複したものを外してソートするマクロをMacro2とし、Macro1から呼び出してます。 今、シート2を開いたときは必ず、シート1でMacro1を実行するようにしたいのですが、以下のように記述すると、無限ループになってしまいうまくいきません。 どなたか、方法をお教えください。 Sheet2に記載したイベントマクロ Private Sub Worksheet_Activate() Sheets("Sheet1").Select Macro1 Sheets("Sheet2").Select End Sub 標準モジュールに記載したマクロ Sub Macro1() Dim team As Integer ActiveSheet.Unprotect ("pass") Range("A3:c18").Select Selection.Sort Key1:=Range("c3"), Order1:=xlAscending, Key2:=Range("A3") ,Order2:=xlAscending, Header:=xlNo,OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal team = Range("b1").Value ActiveSheet.PageSetup.PrintArea = "$A$3:$c$" + CStr(team + 2) Macro2 Range("A1").Select ActiveSheet.Protect ("pass") End Sub Sub Macro2() Range("i3:j18").ClearContents Range("i3").Select Selection.Consolidate Sources:="R3C6:R18C7", Function:=xlMax, TopRow:=False,LeftColumn:=True, CreateLinks:=False Range("i3:k18").Select Selection.Sort Key1:=Range("k3"), Order1:=xlAscending, Header:=xlNo,OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal Range("j3:j18").Select Selection.NumberFormatLocal = "0_);[赤](0)" End Sub

  • 【Excel2010マクロ】シート名を固定したくな

    マクロには全然詳しくないので、マクロの記録を利用して下記のようなデータの並び替えのマクロを作成したのですが、sheet名が「Sheet2」(大文字小文字区別無し)じゃないとマクロが動きません。 -------------------- Sub 並び替え() ' ' 並び替え Macro ' ' Columns("A:A").Select Columns("A:AR").Select With ActiveWorkbook.Worksheets("Sheet2").Sort .SortFields.Clear .SortFields.Add Key:=Range("AN:AN"), Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add Key:=Range("AC:AC"), Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add Key:=Range("AD:AD"), Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add Key:=Range("AF:AF"), Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add Key:=Range("AG:AG"), Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add Key:=Range("AH:AH"), Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add Key:=Range("AJ:AJ"), Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add Key:=Range("AK:AK"), Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add Key:=Range("AN:AN"), Order:=xlAscending, DataOption:=xlSortNormal .SetRange Range("A:AR") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub -------------------- マクロを実行するsheet名は都度変わりますので、sheet名を固定しなくてもデータを並び替えられるようにするには、どのようにしたらよろしいのでしょうか?

  • エクセルのマクロでの並べ替えにおいて

     できるExcel2000マクロ&VBAを読みながら,マクロに初挑戦しました。ところが初めからつまづいています。  住所録の並べ替えです。131人分の住所録をフリガナをキーに並べ替えるのをマクロに記録しました。保存して,早速機能を確認しようと132人目の住所などを入力し,マクロを実行しましたが,機能しませんでした。 Moduleは以下のようになっています。 Sub 五十音順並べ替え() ' ' 五十音順並べ替え Macro ' マクロ記録日 : 2005/1/12 ユーザー名 : ' ' Range("A1:G131").Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range _ ("C2"), Order2:=xlAscending, Key3:=Range("B2"), Order3:=xlAscending, _ Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:= _ xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal, DataOption3:=xlSortNormal End Sub 最初の Range("A1:G131") の131が臭いと思い,この数字を132にしたり,住所録の131番目以上に新しいデータを挿入したりするとマクロは機能します。きっと当然のことなのでしょうが・・・。おそらく記録するときに何か問題があるのではないかと思うのですが,解決法をご教授下さい。

  • エクセル・並び替えのマクロ

    エクセルで並び替えのマクロを作ったのですが ___A ______B ______C ______D ______E ______F _____________G 1 (株)カネカ【東証1部 : 4118.T】 2 日付 __始値 _高値 _安値 _終値 _出来高 ___調整後 3 07/07 1,030 1,069 ___941 __974 30,772,000 ___974 4 07/06 1,057 1,093 1,016 1,033 26,904,000 1,033 5 07/05 1,080 1,086 1,023 1,051 26,541,000 1,051 6 07/04 1,113 1,209 1,087 1,098 36,317,000 1,098 7 07/03 1,096 1,128 1,020 1,124 23,988,000 1,124 8 07/02 1,098 1,147 1,020 1,105 28,609,000 1,105 9 07/01 1,100 1,158 1,078 1,082 17,808,000 1,082 このような表で マクロ記録開始 セルA3をクリック データ→並び替え 優先されるキー:日付・昇順 データ範囲の先頭行:タイトル行 マクロ記録終了 で、できたマクロが Sub Macro1() Range("A3").Select Range("A1:G9").Sort Key1:=Range("A3"), Order1:=xlAscending,Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal End Sub これを実行すると 1行目、2行目の(株)カネカ、日付、始値…、が8行目、9行目になってしまいます そこで、マクロの Range("A1:G9")を Range("A3:G9")に書き換えて Sub Macro2() Range("A3").Select Range("A3:G9").Sort Key1:=Range("A3"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal End Sub これを実行すると 日付が、07/07、07/01、07/02、07/03、07/04、07/05、07/06 の順番になってしまいます どうしたらよいのでしょう?

  • VBAでのエラー(新しいマクロの記録)

    新しいマクロの記録で、work1にてソート等を行って、 新しいマクロ(ソート等)を作成しました。 このマクロは単体で正常に動作するのですが、 sheet1の別のマクロにカット&ペーストで追加し、 動作させたところエラーになってしまいました。 パス的な問題だと思いますが、いまいち理解できません。 以下、ソートの中身 Sheets("work1").Select Columns("A:H").Select Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Key2:=Range("C2") _ , Order2:=xlAscending, Key3:=Range("F2"), Order3:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:= _ xlSortNormal, DataOption3:=xlSortNormal

  • エクセル VBA セルのソートの際に・・・

    いつも皆様には大変お世話になっております。 今回の質問は、BというファイルのデータをコピーしてAというファイルにい書き込むというマクロを組んでいるのですが(下の構文です)これ自体はうまく動いているのですが、Aのファイルでそのデータをソートかけたときにうまくソートされません。何でソートされないのかもさっぱりです。 セルH7に名前が入っているのですが、名前でソートかけたいのです。でもBファイル構文でコピーした名前はソートできずに終ってしまいます。 手入力で名前を入れた分はソートできます。 皆様よろしくお願いいたします。 Sub Bファイル構文() Dim e e = Range("C3") Windows("A.xls").Activate Cells(65535, 2).End(xlUp).Offset(0, 6) = e ActiveWorkbook.Close SaveChanges:=True End Sub Sub Aファイル構文() Range("A7:BE156").Select Selection.Sort Key1:=Range("H7"),Orer1:=xlDescending,:=Range("B7") _, Order2:=xlAscending, Key3:=Range("C7"), Order3:=xlAscending, Header:= _xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:= _xlSortNormal, DataOption3:=xlSortNormal End Sub

  • EXCEL VBA ソートにおいて

    EXCEL 2003 のVBAのsortにおいて、解決できなくて困って おります。 名前,色,産地,品質,味,値段,重さ, りんご,赤,青森,10,10,500,100 みかん,黄,和歌山,10,10,300,50 すいか,緑,群馬,10,8,2000,1000 メロン,黄緑,青森,10,8,2500,500 いちじく,赤,鹿児島,8,8,200,100 名前、品質、値段の順に並びかえたいと思い、 excelのVBAの記録でオートフィルタ後に 並び替えを行ったところ下記のコードが記録されました。 Sub Macro28() Cells.Select Selection.AutoFilter Selection.Sort _ Key1:=Range("A2"), Order1:=xlAscending, _ Key2:=Range("D2"), Order2:=xlAscending, _ Key3:=Range("F2"), Order3:=xlAscending, _ Header:=xlYes, OrderCustom:=1, _ MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, _ DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal, _ DataOption3:=xlSortNormal end sub ところが、これをオブジェクトのマクロに使用して(2,3行目を自分の使い たいように訂正)みると作動しません。 Private Sub CommandButton1_Click() worksheets(1).Select Selection.AutoFilter Selection.Sort _ Key1:=Range("A2"), Order1:=xlAscending, _ Key2:=Range("D2"), Order2:=xlAscending, _ Key3:=Range("F2"), Order3:=xlAscending, _ Header:=xlYes, OrderCustom:=1, _ MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal, DataOption3:=xlSortNormal End Sub watch 式では 3行目までは worksheets(1).Select = TRUE ですし Selection.AutoFilter = TRUE となっているのですが、 sortの反応が分からない状況です。 Selection.Sort _ Key1:=Range("A2"), Order1:=xlAscending, _ Key2:=Range("D2"), Order2:=xlAscending, _ Key3:=Range("F2"), Order3:=xlAscending, _ Header:=xlYes, OrderCustom:=1, _ MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal, DataOption3:=xlSortNormal この部分が問題なのかと考えております。 ネットで調べて worksheets(1).RANGE("A1:G6").Select Selection.sort…… とか worksheets(1).RANGE("A1:G6").sort とかも試してみたのですが、だめでした。 sort を使用するときにselectionとの相性や、 rangeとの兼ね合いで決まり等があるのでしょうか。 色々なサイトを回ってはいるのですが、ちょっと解決 にいたることができません。 どなたか、ご教授いただけると幸いです。

  • 並べ替えのマクロで対象行の範囲を行を増やした分だけ可変にして増やしたい。

    マクロ超初心者です。エクセル2003においての質問です。 作成した〔日付順〕のボタンを押すことで並べ替えをしたいと思い,以下のマクロを「記録」から作成したのですが, 9行~153行の間に行を挿入した場合,並べ替えの対象となる行も同じように増えてほしいのですが,常に9行~153行のままで増えてくれません。 可能なら9行より前に行を挿入した場合も同じように可変して欲しいです。 全くのマクロ初心者でどう変えればいいのか分かりません。 また,「記録」から作成したマクロには操作内容が全て存在するようなのですが, 消してもいい不要な部分も分からないので教えて頂ければありがたいです。 よろしくお願いします。 (出来れば以下を書き直して全て貼り付けて頂けるとかなり助かります。) sub 日付順()    Rows("9:153").Select    Selection.Sort Key1:=Range("I9"),Order1:=xlAscending,Key2:=Range("J9") _       ,Order2:=xlDescending,Header:=xlGuess,OrderCustom:=1,MatchCase:= _       False,Orientation:=xlTopToBottom,SortMethod:=xlPinYin,DataOption1:= _       xlSortNormal,DataOption2:=lxSortNormal    Selection.Sort Key1:=Range("H9"),Order1:=xlAscending,Key2:=Range("B9") _       ,Order2:=xlDescending,Key3:=Range("M9"),Order3:=xlAscending,Header _       :=xlGuess,OrderCustom:=1,MatchCase:=False,Orientation:=xlTopToBottom _       ,SortMethod:=xlPinYin,DataOption1:=xlSortNormal,DataOption2:= _       xlSortNormal,DataOption3:=lxSortNormal End Sub

  • マクロを使ったコピペがうまく動作しない。

    あるデータを転記用のブック(月毎にシートが分かれています。シートの内容は同一)に貼り付ける処理を行うため、下記のようなマクロを組んだのですが、何故か貼りつきません。処理終了時には、転記元ブック(シート)で最終処理の範囲(5番目のB287)を選択しています。一体何がいけないのでしょうか? データはA1からPまでで毎月可変しています。 また、転記用ブックが12枚あるため、月を指定してから貼り付けたいのですが、どのようにすればよいでしょうか?(下記は直接シ-トを指定しました) Sub test() Dim 最終行 As Integer '-------------------------------------------- 開始 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("1").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B1").PasteSpecial Paste:=xlPasteValues '-------------------------------------------- 1 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("2").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B83").PasteSpecial Paste:=xlPasteValues '-------------------------------------------- 2 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("3").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B157").PasteSpecial Paste:=xlPasteValues '-------------------------------------------- 3 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("4").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B227").PasteSpecial Paste:=xlPasteValues '-------------------------------------------- 4 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("5").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B287").PasteSpecial Paste:=xlPasteValues --------------------------------------------- 5 End Sub 

専門家に質問してみよう