プロが教えるわが家の防犯対策術!

直前のシートに戻すマクロいろんな人の見ながらこれで行けたらいいのにと思ってみたんですが、出来てるでしょうか?また、まだ短くなるなら教えてください。
Sub マスタからコピーして戻って貼り付け()
Dim wshStart As Worksheet
Set wshStart = ActiveSheet
Sheets("マスタ").Select
Range("B1").Select
コピーして
wshStart.Select
Range("B1").Select
貼り付ける
End Sub

現場が携帯やUSB持ち込み出来ない為、紙に書いてダイレクトに入力しなければいけません、できるだけ短くしたいのです。
よろしくお願いします

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

  • どう思う?

    すみません、意味もわからず手探りでやってるので、今さらな質問しますm(_ _)m
    アクティブな状態て言うのは先頭に
    Dim wshStart As Worksheet
    Set wshStart = ActiveSheet
    この2行は要るって事ですよね?

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/12/02 21:04
  • うーん・・・

    実際にやりたい事ですが

    12個のシートとマスタシートが有ります。

    罫線だけを初期化してKBを減らす為、20から1000行目までをコピーして、1001行目に罫線以外を貼り付け20~1000行を削除します、ここで問題が(;^_^A
    1~20行目に入れた数式が変わってしまいました、そこでマスタに数式仮置きして、後で貼り付けようと考えてます。
    マクロでダイレクトに入れようとしたいのですが途中で列挿入されたらアウトだと思いあきらめました(;^_^A

    すみませんこれでわかるでしょうか?

    No.3の回答に寄せられた補足コメントです。 補足日時:2017/12/02 21:38
  • うれしい

    テクニックの 2.なんですが、申し訳ありません自分でマクロ記録して再生するのとさほど変わらないです(;^_^A
    文中の=抜けてるし、全てに薄い罫線貼り付けて 5倍以上 の重さに膨れ上がりました ちなみにエクセルは97 と 7 と2013 などでした、でも大変勉強になったし楽しかったです(^-^)ありがとうございました。

    No.5の回答に寄せられた補足コメントです。 補足日時:2017/12/03 21:57

A 回答 (5件)

#2の回答者です。



>1~20行目に入れた数式が変わってしまいました、そこでマスタに数式仮置きして、後で貼り付けようと考えてます。

具体的にどういう位置関係になるのか、まだ見当がつかない部分はあるものの、コードも手順も違っているように思っています。

あまり文章で書いても通じないでしょうから、希望に見合うものかどうかは分かりませんが、いくつかのテクニックを公開します。

1.数式を格納するテクニック
(ただし、途中でエラーを発生させると、メモリが飛んでしまいます)
つまり、壊れないようにするには、外部出力という方法もあります。
'--------------
Dim Ar()
Sub Test1()
Dim i As Long
ReDim Ar(1 To 20)
For i = 1 To 20
Ar(i) = Cells(i, 1).FormulaR1C1Local
Next
Range("A1:A20").ClearContents
MsgBox "A1:A20まで消されました。", vbInformation
End Sub
'-----次のマクロ----------
Sub Test2()
Dim i As Long
For i = 1 To 20
 Cells(i, 1).FormulaR1C1Local = Ar(i)
 '同じ場所に戻さないいけません。
Next
End Sub

2.罫線を一気に消すテクニック。

Sub Test3()
With Range("A10:B300")
 .Borders.LineStyle = xlLineStyleNone
End With
End Sub

最後に気になるのは、「罫線だけを初期化してKBを減らす」ことができるのでしょうか。
Excel2007以降は、それ自体では、ほとんどファイルの大きさは変わらないはずです。

添付図は、1.の数式を一旦メモリに格納する方法。
「Excel マスタに移動して直前のシート」の回答画像5
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとう

ありがとうございます 

KB1/4以下になったので多分2007以前なんだと思います、とまぁこんなレベルなんです(;^_^A

2.は短くて覚えれそうで、これで何もさわらなくてすむならほんとうに理想です、試してみます(。・ω・)ゞ

あと
すみませんすみませんm(_ _)mまた説明不足で
1は添付図を見てたら自分が思っているのと何か違う気がしましたm(_ _)m

例えばなんですが、B1にSAMでB18~1000行目までを合計してます
20~1000を削除するとSAMは18~19の式になっちゃうそんなイメージですm(_ _)m

でもせっかく頂いたのとどんな動きするのか興味あります、ゆっくり試してみますね。

お礼日時:2017/12/03 02:52

No.1・3です。



投稿後気づきました。
>Dim wshStart As Worksheet
>Set wshStart = ActiveSheet
の2行が必要かどうか?ってコトですね。

No.1のコードそのままで大丈夫なので
必要ありません。m(_ _)m
    • good
    • 0

No.1です。



補足の件について・・・
仮に「マスタ」Sheetがアクティブになっていると
wshStart とは「マスタ」シートになりますよね。

B1セルをそのまま同じSheetのB1にコピー&ペーストするコトになりますので、
マクロを実行しても見た目には何も変化しません。

すなわち、貼り付けたいシートをアクティブに(選択)しておいてマクロを実行しないと
コードそのものが意味のないものになると思います。

※ 質問文に忠実な動きにするためのコードなので、実際やりたいコトが具体的に判れば
お役に立てるかもしれません。m(_ _)m
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとう

No1 で出来ました 暗記できるほどのシンプルさ 素晴らしいです ありがとうございました

お礼日時:2017/12/03 21:59

すみません、他の方はわかるのかもしれませんが、どの程度、戻すのか程度が分からないのです。

バックアップを取ってまるごと戻してしまうのか、ご質問のような単に一箇所のセルを戻すのか、ということです。
そもそも、戻すことにマクロ化するという意味は、マクロで処理したという意味になります。だから、マクロはマクロでということになりましょうけれども、全体が見えていないので、こんな解答しかできません。

Sub FromMasterSh()
  Dim sh As Worksheet: Set sh = ActiveSheet
  Dim mSh As Worksheet: Set mSh = Worksheets("マスタ")
  mSh.Range("B1").Copy sh.Range("B1")
End Sub

おそらく、こういうことではないような気がします。
B1 to B1 ですが、それが任意の場所で、バックデータを戻すことではないでしょうか。
つまり、A1 to A1, C1 to C1 ということでは? ちょっと考えすぎかな?
    • good
    • 0
この回答へのお礼

ありがとう

こんばんは、ありがとうございます

説明不足でした
シートは12あるので、同じマクロで同じ動きしてほしいと思ってます
またB1もコピペも何でも良かったのです、ややこしくしてごめんなさいです_(^^;)ゞ

Tomさんとあわせて明日使わさせて頂きます。

お礼日時:2017/12/02 20:09

こんばんは!



貼り付け先のシートがアクティブになっている状態であれば・・・

Sub Sample1()
Worksheets("マスタ").Range("B1").Copy ActiveSheet.Range("B1")
End Sub

くらいで大丈夫だと思います。m(_ _)m
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとう

こんばんは ありがとうございます。

明日やってみたいです( ゚∀゚)

お礼日時:2017/12/02 20:03

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