
こんにちは
作成中のファイルが大体完成!と喜んでいたら以下の部分で躓いてしまいました。。。
フォーマットのシート(シート名:フォーマット)が出来たので
このシート名を取引先名に変えて増やしていこうと思ったのですが
フォーマットを参照したコード?がたくさん入っており
増えるたびにこれを一々書き換えるのが大変なことに気がつきました
With Worksheets("フォーマット")←問題のコードです
この部分をどのように変更すればコピーしたときも
コードを書き換えなくて済むようになるでしょうか?
分かり難い文章で申し訳ございませんが
ご教授のほどよろしくお願いいたしますm(_ _;)m
No.4ベストアンサー
- 回答日時:
#3です。
ではこれではいかがでしょう?
食材情報管理シートをアクティブにするのをやめました。
Sub test02()
Dim sn As String
With ActiveSheet
.Range("A5:I304").ClearContents '入力画面の抽出一覧をクリア
sn = .Name 'シート名をsnに代入
Sheets("食材情報管理シート").Range("C2").FormulaR1C1 = "=" & sn & "!R[-1]C[8]"
Sheets("食材情報管理シート").Range("A4:I303").Copy
.Range("A6").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End With
Application.CutCopyMode = False
End Sub
これ+別シートのコード変更したら出来ました!本当にありがとうございます
分かり難い説明で御迷惑をおかけしました
勉強して精進していきたいと思います。
No.5
- 回答日時:
#01です。
ちょっとちょっとです(^^)>補足でもう一つ書いていただいた分では対応できなかったので
このコード実行時に開いているシートは何ですか? またRange("A6")はどのシートのことを指していますか?
それを明示せず、ご自身のコードから「読み取らせよう」とするから回答する側は混乱するのです。以下は確認です。
もしかしてClearContentsするのはActiveSheetで、Sheets("食材情報管理シート").Range("A4:I303")を貼り付けるのもActiveSheetではないですか?
>ActiveCell.FormulaR1C1 = "=フォーマット!R[-1]C[8]"
は現在のシートのアクティブセルに「フォーマット」シートの内容が表示されるようにするのですか。それともActiveSheetのR[-1]C[8]ですか?
(処理的に何の意味かは分かりませんが…)
With ActiveSheet
.Range("A5:I304").ClearContents
ActiveCell.FormulaR1C1 = "=フォーマット!R[-1]C[8]"
' ActiveCell.FormulaR1C1 = "=R[-1]C[8]" ActiveSheetならこっちの行を生かす
Sheets("食材情報管理シート").Range("A4:I303").Copy
.Range("A6").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End With
Application.CutCopyMode = False
>もしかしてClearContentsするのはActiveSheetで、Sheets("食材情報管理シート").Range("A4:I303")を貼り付けるのもActiveSheetではないですか?
質問がわかり難くなってしまい申し訳ございませんでしたm(_ _;)m
その通りです
皆様のおかげで無事解決しました
本当にありがとうございます!!
今回教えていただいたことを応用して色々出来そうなので
また勉強します
No.3
- 回答日時:
> アクティブなシートのある部分をクリアした後
> 他のシートに一旦移ってコピーしてまた戻ってきて
> 貼り付けるという内容なのですが。。。
> 戻ってこれません(><)
他のシートを選択した段階でActiveSheetが変わってしまうからです。
ActiveSheet名をいったん取得しておいてあとからそのシートをアクティブにすればいいんです。
お書きになった部分ではこんな感じでしょうか。
Dim sn As String
With ActiveSheet
.Range("A5:I304").ClearContents '入力画面の抽出一覧をクリア
sn = .Name 'シート名をsnに代入
End With
Sheets("食材情報管理シート").Range("C2").Select
ActiveCell.FormulaR1C1 = "=入力画面!R[-1]C[8]"
Range("A4:I303").Copy
Sheets(sn).Activate 'snに戻る
With ActiveSheet
.Range("A6").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End With
Application.CutCopyMode = False
本当にご親切にありがとうございます!
後の問題はこのコードだけなのですが
(すいません最初に自分が間違えたので分かり難くなってしまいました。。。
補足でもう一つ書いていただいた分では対応できなかったので)
ActiveCell.FormulaR1C1 = "=フォーマット!R[-1]C[8]"
このフォーマットって部分をコピーしたときも対応できるように
するにはどうしたらよいでしょうか?
試しに
ActiveCell.FormulaR1C1 = "=Sheets(sn)!R[-1]C[8]"
とかでやってもエラーになってしまいました
No.2
- 回答日時:
#01です。
補足のコードはWith文で定義したオブジェクトを使っていないので、別の問題と考えてよいですか?机上デバッグしかしていませんが、これならどうです?
最初にアクティブなシートを保存しておいて、最後にそのシートを開き直すようにしました
マクロ記録ではSelectメソッドが多く作成されますが、Selectはマクロの実行速度を落とす最大の原因ですから、極力なくす方がよいと思います。
Dim act as Worksheet
Set act = ActiveSheet
Sheets("フォーマット").Select
Sheets("フォーマット").Range("A5:I304").ClearContents
Sheets("食材情報管理シート").Range("C2").FormulaR1C1 = "=フォーマット!R[-1]C[8]"
Sheets("食材情報管理シート").Range("A4:I303").Copy
Range("A6").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
act.Activate
No.1
- 回答日時:
コード全体を見ないと何とも言えませんが
With ActiveSheet
ではどうでしょう。開いているシートを参照することになります。
この回答への補足
間違いがありましたm(_ _;)m
ActiveCell.FormulaR1C1 = "=入力画面!R[-1]C[8]"
↓
ActiveCell.FormulaR1C1 = "=フォーマット!R[-1]C[8]"
ありがとうございます!!
コピーしてもほとんどの部分で解決しました!
ただ一つ以下の部分だけはWith ActiveSheetに変更すると
エラーが出てしまいます。。。
アクティブなシートのある部分をクリアした後
他のシートに一旦移ってコピーしてまた戻ってきて
貼り付けるという内容なのですが。。。
戻ってこれません(><)
Sheets("フォーマット").Select '入力画面の抽出一覧をクリア
Range("A5:I304").Select
Application.CutCopyMode = False
Selection.ClearContents
Sheets("食材情報管理シート").Select
Range("C2").Select
ActiveCell.FormulaR1C1 = "=入力画面!R[-1]C[8]"
Sheets("食材情報管理シート").Select
Range("A4:I303").Select
Selection.Copy
Sheets("フォーマット").Select '抽出データをコピー
Range("A6").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- Visual Basic(VBA) VBA 複数のブックに同じ列を表示させる方法 2 2022/07/20 23:49
- Visual Basic(VBA) 集計シートA列のコードと一致する右に並んだシート名(コード)の3行目から10行目をコピーして貼り付け 4 2022/08/18 15:24
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Excel(エクセル) シートが違う2枚のエクセルシートにある数値を別シートにコピーしたい(VBA?) 8 2022/03/31 12:24
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/06/01 14:45
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/06/02 08:44
- Visual Basic(VBA) セルの値からファイルを複数作りたい2 3 2022/10/07 15:54
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
別シート参照のセルをシート毎...
-
エクセルでファイルを開いたと...
-
特定のシートの削除を禁止した...
-
Excel、同じフォルダ内のExcel...
-
前の(左隣の)シートを連続参...
-
【Excel関数】値が合致するセル...
-
VBAで条件によりフォントサイズ...
-
エクセルVBAでパスの¥マークに...
-
エクセルで前シートを参照して...
-
Excelで金銭出納帳。繰越残高を...
-
エクセル 計算式も入っていない...
-
エクセルVBA 串刺し計算の際、...
-
複数シートの特定の位置に連番...
-
エクセルでシート数が増加する...
-
シートの保護のあとセルの列、...
-
EXCELで1ヶ月分の連続した日付...
-
excelでシート毎の最終更新日を...
-
VBAでシートコピー後、シート名...
-
Excel シートに画像が貼ってあ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
別シート参照のセルをシート毎...
-
前の(左隣の)シートを連続参...
-
Excelで金銭出納帳。繰越残高を...
-
エクセル 計算式も入っていない...
-
特定のシートの削除を禁止した...
-
EXCEL:同じセルへどんどん足し...
-
エクセルでファイルを開いたと...
-
シート番号からシート名を取得する
-
シートの保護のあとセルの列、...
-
エクセルVBAでパスの¥マークに...
-
Excel、同じフォルダ内のExcel...
-
エクセルで前シートを参照して...
-
Excelのシートを、まとめて表示...
-
エクセルで前のシートを連続参...
-
エクセルのシート名をリスト化...
-
Accessのスプレッドシートエク...
-
複数シートの特定の位置に連番...
-
EXCELで1ヶ月分の連続した日付...
-
VBAで条件によりフォントサイズ...
おすすめ情報