dポイントプレゼントキャンペーン実施中!

お世話になります。

年末に以下の質問で、特定のセルをprnで
出力するマクロを教えて頂きました。
※GooUserラックさんありがとうございました。

【VBA】特定のセルをprnで保存したい
https://oshiete.goo.ne.jp/qa/10170122.html


Sub Sheet2_copy_verA()
Dim i As String
i = Range("B5").Value

Worksheets("Sheet2").Range("A1:A10").Copy
'Worksheets("Sheet2").Range("A6:A10").Copy

Workbooks.Add
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.SaveAs Filename:="C:\B\Test-" & i & ".html", _
FileFormat:=xlTextPrinter
ActiveWindow.Close False
End Sub


特に問題なく使っておりました&関数の結果の出力はあきらめていました。

ところがダメ元で関数の結果を出力してみると以下のような内容になりました。


Ⅰ)コピーの範囲:A1からA10

A1からA10の関数の結果をprnで出力(保存)

Ⅱ)コピー範囲:A6からA10
※シングルコーテーションのマクロの場合

A1からA5までの関数の結果をprnで出力(保存)


となりました。要するに、出力範囲をA6からA10に設定しているのに、
無視して頭から5行だけ(A1からA5)出力します。

A6からA10セルの関数の結果をprnで保存したいです。
このマクロのおかしいところを教えて下さい。
※A1からA10が関数でない場合はⅠ)、Ⅱ)ともに正常に動作します

詳細
1)A1からA10は全て関数で、内容は以下のとおりです。
※A1:「=SheetA!A1」からA10:「=SheetA!A10」
※画像を参照して下さい

2)シートの役割は以下の通りです
Sheet1:アクティブシート
※入力
※関数の処理

SheetA:関数の結果の取得
※アクティブシートの関数の結果を所定の順番に並べる
※不要の空白を取り除く

Sheet2:
※prnを出力するシート
※出力エリア確認用:正常に動作すれば「SheetA」から直接出力する予定

「【VBA】特定のセルをprnで保存したい」の質問画像

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

  • うれしい

    ご解答ありがとうございます。
    すいませんが多忙のため、少しお時間を下さい。

    近日中に動作確認をして、
    改めてお礼、質問、etc.をさせて頂きます。

    この度はご解答ありがとうございます。

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/01/06 01:10

A 回答 (1件)

コピー範囲をA6~A10にした場合、貼り付け先がA1からであれば、設定されている式も相対的に


セル番地が変更されます。

同じシート内で試してみていただくとわかると思いますが、Sheet2のA6~A10をコピーして、
同じシートのC1に貼り付けてみてください。参照している式が変わると思います。

なので、貼り付ける際は、値貼り付けを行うことで、SheetAのA6~A10の値をコピーできます。

Sub Sheet2_copy_verA()
Dim i As String
'Range("B5")がどのシートにあるかを明示的に指定しました。
i = Worksheets("Sheet1").Range("B5").Value

'Worksheets("Sheet2").Range("A1:A10").Copy
Worksheets("Sheet2").Range("A6:A10").Copy

Workbooks.Add
'ActiveSheet.Paste
'ペーストする際、値貼り付けに変更しました。
ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False

ActiveWorkbook.SaveAs Filename:="C:\B\Test-" & i & ".html", _
FileFormat:=xlTextPrinter
ActiveWindow.Close False
End Sub
この回答への補足あり
    • good
    • 1
この回答へのお礼

ご解答ありがとうございます

お礼が遅くなりすいません。
動作確認させて頂きました。

>同じシート内で試してみていただくとわかると思いますが、Sheet2のA6~A10をコピーして、
同じシートのC1に貼り付けてみてください。参照している式が変わると思います。

確かにマクロでなくても参照範囲は変ってしましいますね。
マクロの時も同様に参照範囲が変わるのに気が付きませんでした。


なので、貼り付ける際は、値貼り付けを行うことで、SheetAのA6~A10の値をコピーできます。

シングルコーテーションで説明して頂きありがとうございます。
自分用の忘備録として説明をつけました。


Sub Sheet2_copy_verB()
Dim i As String
'Range("B5")がどのシートにあるかを明示的に指定しました。
i = Worksheets("外リンク-07").Range("B5").Value

Worksheets("AAA-010").Range("A6:A10").Copy

'先に新規ブックを作成する
Workbooks.Add

'値貼り付けでなければ、'ActiveSheet.Paste'でOK
'https://oshiete.goo.ne.jp/qa/10170122.html
'値貼り付けの場合
'PasteSpecial Paste:=xlPasteValues
'「PasteSpecial」の左に場所(A1)も指定する
ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteValues

Application.CutCopyMode = False

ActiveWorkbook.SaveAs Filename:="C:\B\Test-" & i & ".html", _
FileFormat:=xlTextPrinter
ActiveWindow.Close False
End Sub


ということですね、よくわかりました。
基本的なことから説明して頂き助かりました。

今回は解答して頂き、ありがとうございます。
機会がありましたら、またお願いします。

お礼日時:2018/01/07 15:42

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