後で使いまわしやすい プロシージャ の書き方
過去の質問で教えて頂いた情報を基にクリップボードを使わないで
コピペのコードを書いてみたのですが...
また 脳内選択肢が多すぎで困ってます。
とりあえず書いたコードを載せます。
VBA
1Option Explicit 2Option Private Module 3 4 'Paste情報と縦横サイズ 5 Private XML As String 6 Private RowSize As Long 7 Private ColumnSize As Long 8 9 10Sub MyCopy(ByVal CopyRng As Range, Optional ByVal PasteRng As Range) 11'セルの 大体の書式と 値を Copy 12 13 Dim VType As XlRangeValueDataType 14 15 VType = xlRangeValueXMLSpreadsheet 16 17 'Copy 18 RowSize = CopyRng.Rows.Count 19 ColumnSize = CopyRng.Columns.Count 20 XML = CopyRng.Value(VType) 21 22 'Paste 23 If Not PasteRng Is Nothing Then 24 PasteRng.Resize(RowSize, ColumnSize).Value(VType) = XML 25 End If 26End Sub 27 28 29Sub MyPaste(ByRef PasteRng As Range, Optional ByVal CopyRng As Range) 30'セルの 大体の書式と 値を Paste 31 32 Dim VType As XlRangeValueDataType 33 34 VType = xlRangeValueXMLSpreadsheet 35 36 'Copy 37 If Not CopyRng Is Nothing Then 38 RowSize = CopyRng.Rows.Count 39 ColumnSize = CopyRng.Columns.Count 40 XML = CopyRng.Value(VType) 41 End If 42 43 'Paste 44 PasteRng.Resize(RowSize, ColumnSize).Value(VType) = XML 45End Sub
悩んでいる内容
VBA
1 Dim VType As XlRangeValueDataType 2 VType = xlRangeValueXMLSpreadsheet
まず、これはValueの引数がそのままだと候補が出てこなかったので
候補が出てくるように入れたのですが
なんとコメントを入れたらいいのか...
そもそもこういうことをしてもいいのかが分かりません。
次にコマンドの機能自体ですがコピーコマンドといえば
コピー元とコピー先を指定したらコピーできるのが基本だと
思ったので、ペーストの機能も含んだ内容で作りました。
そのあとに連続貼付けの為にペーストコマンドを作ったのですが
対になった方がいいかなと思いコピーの機能を含みにしました。
当然ですがその結果はほぼおんなじコードになるわけなのですが
こういう場合はコピーとペーストは完全に分けたほうがいいのでしょうか
いっそのことCopyPasteとしてくっつけてしまった方がいいのでしょうか
他にも何かあれば指摘して頂きたいです。
よろしくお願い致します。
蛇足 見やすいコードが書きたい
最近 作る内容が複雑になってきて過去に作ったコードを再利用出来る様に
したいと思い始めました。
現状 コードがぐちゃぐちゃで探すよりも書き直した方が早いという感じで
再利用が出来ません。
書籍を買って読んだりしていますが
知識が増える度に選択肢の多さに迷い
手が止まります。
最終目標は判断基準の確立と
コードの使いまわしが出来るようにすることです。
宜しくお願い致します。
###ベストアンサー選択後の追記
いろいろ意見を頂き
ホントにコピーとペーストそれぞれ必要なのか
再度考えてみました、
ペーストは同じ内容を連続で貼付けするために
足したのですが、今回は今のところ必要なさそうなので
やめることにしました。
それに伴い値の保持の必要もなくなったので
変数はプロシージャ内へ移動、
また、PasteRngは必ず指定しなければいけなくなるので
Optional をやめ Pasteの実行判断のIfもやめました。
クラスにする必要性も低くなったと思うので標準モジュールのままで
VBA
1Option Explicit 2Option Private Module 3 4 5Sub MyCopy(ByVal CopyRng As Range, ByVal PasteRng As Range) 6'セルの 大体の書式と 値を Copy 7 8 Dim XML As String 9 Dim RowSize As Long 10 Dim ColumnSize As Long 11 Const ValueDataType = Excel.XlRangeValueDataType.xlRangeValueXMLSpreadsheet 12 13 'Copy 14 RowSize = CopyRng.Rows.Count 15 ColumnSize = CopyRng.Columns.Count 16 XML = CopyRng.Value(ValueDataType) 17 18 'Paste 19 PasteRng.Resize(RowSize, ColumnSize).Value(ValueDataType) = XML 20End Sub
回答してくださった方ありがとうございました。
また、次も宜しくお願い致します。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/22 03:10
2018/07/23 00:14
2018/07/23 00:36
2018/07/23 00:41
2018/07/23 00:51
2018/07/23 01:46