『Select Selectionの簡略化について』(大貧民) OS XP Excel 2002 少し似ている質問ですがなんとなく前回の質問と分けたく新たに質問します。 前回のスレは、こちらです。 [[20091216094335]]『記述を短くしたい』(大貧民) SelectとSelectionの簡略についてなんですがたとえば Sub Macro1() Range("A1").Select Selection.Copy Range("C2").Select ActiveSheet.Paste End Sub は、 Sub Sample2() Range("A1").Copy Range("C2") End Sub となりますよね? これを見ているととにかくSelectが最後の行に来ていて、次の行の頭にSelectionがあるやつは 何でもかんでも削ってしまっていいのでしょうか? たとえば今私が作っているエクセルVBAの中に下記のようなものがあります。 Private Sub CommandButton1_Click() ActiveSheet.PivotTables("ピボットテーブル3").RefreshTable ActiveSheet.PivotTables("ピボットテーブル4").RefreshTable ActiveSheet.PivotTables("ピボットテーブル5").RefreshTable ActiveSheet.PivotTables("ピボットテーブル6").RefreshTable Range("B4").Select Selection.ShowDetail = False Range("F4").Select Selection.ShowDetail = False Range("J4").Select Selection.ShowDetail = False Range("N4").Select Selection.ShowDetail = False Range("A1").Select End Sub これを簡略化の感じで良くと Private Sub CommandButton1_Click() ActiveSheet.PivotTables("ピボットテーブル3,ピボットテーブル4,ピボットテーブル5,ピボットテーブル6").RefreshTable Range("B4,F4,J4,N4").ShowDetail = False Range("A1").Select End Sub となるかもしれませんがこんな感じにしちゃってOKなんでしょうか? ピボットテーブルが壊れた怖いので試せれない小心者です。 どうか上記のVBAを試してから質問しろといじめないであげてください;; いや、結局何が言いたいのかといえば、SelectとSelectionは 削除しまくってもOKですよね?いいよね?って答えがほしいだけなんです(汗 最近ファイルが重くなってきてスリム化したくて(^^; 仰々しく聞いてしまってごめんなさい。んでもご指導よろしくお願いします。 ---- >上記のVBAを試してから質問しろといじめないであげてください コードを記入してからセーブして、試せばいいのでは? 失敗しても、セーブしないで閉じれば、セーブ時点のブックが維持できますよね? 1or8 ---- 1or8さん 動かしたらエラーできました。 (エラー文章は難しい言葉でよくわかりませんでした。) やっぱりSelect Selectionの簡略化やマクロ保存の簡略化は 夢のまた夢っぽいですね;; ご指導ありがとうございました。 (大貧民) ---- ヘルプでShowDetail プロパティを読むと 「セル範囲は、単一の集約行または集約列でなければなりません。」と書いてあります。 ShowDetail をまとめてしまったのがエラーなのかな?(確認してないけど) 1or8 ---- 1or8さん お返事ありがとうございます。 最初の一行でエラー出てましたorz 前回の質問で似ている内容だったから きっと多分もしかしておおよそ、一つにまとめられるんだと思ったので ピボットテーブルもまとめてみたんです。 ピボットテーブル、形が一緒で大丈夫かと思ったんですが。。。 この分じゃほかのシートにある同じようなマクロたちはスリム化できそうにないですね^^; きっとDim〜とかAs〜とかIF〜とかLOOP〜とか使わなきゃいけないですね;; VBA難しすです。 なお、会社のPCでヘルプは入っていません。 入れたいと上司に入れたのですがいろいろ書類を何枚をも書かないとだめだからだめと 変なこといわれて入れられない仕様になってます。 変な会社ですね(苦笑) (大貧民) ---- with ActiveSheet.PivotTables for i = 1 to .count .item(i).RefreshTable next end with ピボットテーブル使ったことないので未検証です。 動きます? 1or8 ---- 1or8さん すごいっす!うごいたっす!いったいどういうからくりなんでしょうか? ご教授お願いします! とりえあえず予想ですが、 > ActiveSheet.PivotTables("ピボットテーブル3").RefreshTable こういうのが何百個あっても使えそうなVBAですね! と素人判断ではありますが思うのですがいかがですか? 私は下記のように感じたんですが…。 with ActiveSheet.PivotTables for i = 1 to .count .item(i).RefreshTable next end with この中に含まれている数字に、 私が書いたVBAの中のピボットテーブルに関係する記述の個数 Private Sub CommandButton1_Click() ActiveSheet.PivotTables("ピボットテーブル3").RefreshTable ActiveSheet.PivotTables("ピボットテーブル4").RefreshTable ActiveSheet.PivotTables("ピボットテーブル5").RefreshTable ActiveSheet.PivotTables("ピボットテーブル6").RefreshTable ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 4つだけなのに1or8さんの作ったVBA文章には「1」しかないから、 何個でも何百個でも、使えるVBA文章なのかなと。 いかがでしょうか?間違っていますでしょうか? (大貧民) ---- あっています。 新規ブックを開き、下記を実行してみてください。 Sub test() Dim i As Long For i = 1 To ThisWorkbook.Sheets.Count Sheets(i).Name = "a" & i Next End Sub Sheet1 → a1 Sheet2 → a2    ・ ・ このようにシート名が変わったはずです。 ということは、Sheet("Sheet1") = Sheet(1) ということです。 PivotTables("ピボットテーブル3") = PivotTables(1) なのでしょう。 countによってピボットがいくつあるか分かり、forによって個数分繰り返されます。 1or8 ---- 1or8さん もうね、目からうろこでまくりです。 こんな短いVBAにこんな素晴らしい機能ができるなんて! びっくりしすぎちゃいましたよ。いや、ほんとに。 しかも解りやすい解説まで…。 本当にありがとうございます。 ってか、まさか正解できるとは思ってませんでした(^^; すんごくうれしいです! それと同時に、VBAは奥が深いと心から感じました。。。 これからももっと勉強して精進します。 素敵なご指導、ありがとうございました! (大貧民) ---- こんにちは。 解決しちゃっているかもしれませんが… ブック内のすべての外部データの範囲とピボットテーブルを更新するRefreshAllメソッドを使う方法もあります。 ActiveWorkbook.RefreshAll ピボットテーブルツールバーの右側にある▼をクリックして  ボタンの表示/非表示→ピボットテーブル で表示されるボタンのリストから「すべて更新」を選択して表示させます。 マクロの自動記録をとりながら、「すべて更新」をクリックすれば、上記のコードが取得できます。 (OtenkiAme)