[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Select Selectionの簡略化について』(大貧民)
少し似ている質問ですがなんとなく前回の質問と分けたく新たに質問します。 前回のスレは、こちらです。 [[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.