[[20091216105412]] 『Select Selectionの簡略化について』(大貧民) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.