|
K さん、Jakaさん
こんばんは。
>コードを書き進めていくうちに別の疑問が生じました。
>
>Option Explicit
>Const Fund1 As String = "A"
>Const Fund1L As String = "A MV(L)"
>Const Fund1S As String = "A MV(S)"
>Const FileName As String = "Nov04.xls"
>
>
>Sub Format()
>Worksheets(PGSFund1).Range("g3:m6,g8:m10,g12:m12, _
>g14:m14,g16:m16,g19:m21,g23:m34,g36:m43,g45:m52, _
>g54:m55,g57:m59,g61:m63,g65:m67, _
>g69:m71,g73:m74,g76:m76,g78:m79,g82:m83, _
>g85:m91,g93:m94").ClearContents
>Worksheets(Fund1).Range("G3").FormulaR1C1 = _
> "='" & Fund1L & "'!RC-'" & Fund1S & "'!RC"
>Worksheets(Fund1).Range("G3").Copy
>Worksheets(Fund1).Select
>Range("H3:M3,g4:m6,g8:m10,g12:m12,g14:m14, _
>g16:m16,g19:m21,g23:m34,g36:m43, _
>g45:m52,g54:m55,g57:m59,g61:m63, _
>g65:m67,g69:m71,g73:m74,g76:m76,g78:m79, _
>g82:m83,g85:m91,g93:m94").Select
>Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
> SkipBlanks:=False, Transpose:=False
>
>'ここでWorksheets(PGSFund1).Range("g3:m6,g8:m10,g12:m12,g14:m14,g16:m16,g19:m21,g23:m34,g36:m43, _
>g45:m52,g54:m55,g57:m59,g61:m63,g65:m67,g69:m71,g73:m74,g76:m76, _
>g78:m79,g82:m83,g85:m91,g93:m94")
>に入っている式の結果を、同じ範囲に値として貼り付けたいのですがどうしたらよいでしょうか。
>「新しいマクロの記録」を使って自分で勉強しようと思いましたが、「そのコマンドは複数の選択範囲に対して実行できません。」のメッセージが出てきてしまいました。
>
>End Sub
まず、「同じ範囲に値として貼り付けたい」ですが、
セルをひとつに限定した場合(例えばセルA1)、
with Worksheets(PGSFund1).Range("a1")
.value=.value
end with
で可能です。
これをK さんの例では、指定されたセル範囲をエリア単位で
変換します。
'===========================================================
Sub test()
Dim rng As Range
With Worksheets(PGSFund1).Range _
("g3:m6,g8:m10,g12:m12,g14:m14,g16:m16,g19:m21,g23:m34,g36:m43," & _
"g45:m52,g54:m55,g57:m59,g61:m63,g65:m67,g69:m71,g73:m74,g76:m76," & _
"g78:m79,g82:m83,g85:m91,g93:m94")
For Each rng In .Areas
With rng
.Value = .Value
End With
Next
End With
End Sub
尚、センテンスが複数行になるときに付ける 「_」を
文字列内で"・・・・・ _"という使い方をされていますが、
これだと複数行とは認識しません。
この場合は、一度文字列を終わらせて&で連結しましょう。
|
|