プロが教える店舗&オフィスのセキュリティ対策術

マクロの勉強を始めたばかりです。

全部で8シートあるBooKです。
一つ一つのシートに大量に計算式が入っていてとてもとても重いです。

少しでも軽くするために、計算式の結果を値貼り付けし、全て式をなくし、xlsm形式ではなくxlsx形式で名前をつけて保存したいです。

思ったようなコードが探せず、どのように記載をすれば良いのかわからず
ご教授いただけると幸いです。

よろしくお願いいたします。

質問者からの補足コメント

  • うーん・・・

    この式だと何故か値貼り付けになってくれません・・・・どこが駄目なのでしょうか

    Sub 値貼付け()
    '
    ' 値貼付け Macro
    '

    Worksheets.Select
    ActiveSheet.Calculate
    Range("A1").Select
    Selection.Value = Selection.Value
    Range("A1").Select
    Sheets("1").Select
    End Sub

      補足日時:2020/06/06 22:17

A 回答 (6件)

左上をクリックして


全選択→コピー→特殊貼り付け(値のみ)
をマクロで記録すれば雛形は出来上がります。
    • good
    • 0
この回答へのお礼

ありがとうございます!
確かに記録を使って型を作るのが早いですね。
実際にやってみたのですが、何故か値貼り付けにならたず・・・
何が駄目だったのでしょうか。(少し書き換えたのですが、書き換え前も数式のままで・・・)
Sub 値貼付け()
'
' 値貼付け Macro
'

Worksheets.Select
ActiveSheet.Calculate
Range("A1").Select
Selection.Value = Selection.Value
Range("A1").Select
Sheets("1").Select
End Sub

お礼日時:2020/06/06 22:15

横から失礼します


>どこが駄目なのでしょうか
ダメと言うより、ご質問の内容になっていないと思いますよ
Range("A1").Selectになっているのだから、A1セルでしか、Selection.Value = Selection.Valueは、実行されていません。
しかし、自動記録では、記録されないと思いますし、Selection.Value = Selection.Valueをシート全体で実行するのは、
いかがなものでしょう?この辺りは、検証してみてください。

自動記録をする場合、手順をあらかじめ検証する事が肝心だと思います。

期待される結果を出す為の処理手順は、いくつかの方法があります。大きく違うのは、
新しいブックを作るか否かです。

①開いてるブックで処理して最後に名前を付け、ファイル拡張子を変え保存する方法
②新しいブックを作成して、そのブックに既存ブックのシートを挿入なたはコピペする方法です。
繰り返しこの処理を行うのであれば、①はあまり適していないと思います。この辺も検証すると判りますので興味があれば行ってください。

あと>全部で8シート
これも、大きく分けて2通り
始めにCtrl+でシートを選択してグループとして処理するか、
ブックの1つずつシートを繰り返し処理で処理するかです
前者は、自動記録で記録できると思います。(グループ解除は記録されないかも)
後者は、For Each などで作る必要があります。

①で記録を行う場合、最後のファイル保存する前に記録しているVBEで上書き保存をしておきましょう。
せっかくの記録が消えてしまうかも、、
健闘を祈ります。
    • good
    • 0

こんにちは



すでに解決済みなのかよくわかりませんが、一応、・・・

Sub Sample_11688018()
 For Each s In Worksheets
  s.UsedRange.Value = s.UsedRange.Value
 Next s
End Sub

とかかな。
    • good
    • 1

Sub  Main ()


  Cells.value = Cells.value
End Sub

です。


但し、

搭載リソース量次第で、
エラーが 出ますが、
構文構造は 此で、
合ってます。


もし、

リソースが 不足し、
実用に 耐えない場合は、

両Cells構文に セル範囲指摘を、
付加して、
アドレッシング領域を 限定してください。


此の際、

両セル指定領域サイズを たがえては、
いけません、

同じで なければ、
なりません。


さて、

VBで あるましい、
不必要に ループを、
回すのは 止めましょう。


そんな事をすれば、

オブジェクトタッチ数が 無駄なままに、
飛躍的に 増え、
無駄処理時間を 浪費しますよ。


此はですね、

VBAです、
VBでは ありません。

ループが 使えない、
シート関数プログラミングでも、
通用するように、


組み込みルーチンが、

しかも チューニングすら、
施されて 組み込まれています。


使わず、

処理時間を 浪費する、
手は なしでしょ?
    • good
    • 0

失礼、



誤記を 認めました、
謝罪の上 訂正します。


現行、

両Cells構文に セル範囲指摘を、
付加して、
アドレッシング領域を 限定してください。


改訂後、

両Cells構文に セル範囲指定を、
付加して、
アドレッシング領域を 限定してください。


改訂点、

指摘→指定
            以上。


済みませんでした。
    • good
    • 0

又もや 失礼しました、


「Cells構文で セル範囲指定を、
してね、」
とは、
高難易度に 過ぎましたかね?


元より、

Range(セル範囲指定記述文字列).Value = Range(セル範囲指定記述文字列).Value
等でも 構いませんよ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています