質問編集履歴

2 ベストアンサー選択後の追記を足しました。

kamikazelight

kamikazelight score 160

2018/07/23 10:30  投稿

後で使いまわしやすい プロシージャ の書き方
### __後で使いまわしやすい プロシージャ の書き方__
[過去の質問](https://teratail.com/questions/136468)で教えて頂いた情報を基にクリップボードを使わないで
コピペのコードを書いてみたのですが...
また 脳内選択肢が多すぎで困ってます。
とりあえず書いたコードを載せます。
```VBA
Option Explicit
Option Private Module
 'Paste情報と縦横サイズ
 Private XML As String
 Private RowSize As Long
 Private ColumnSize As Long
Sub MyCopy(ByVal CopyRng As Range, Optional ByVal PasteRng As Range)
'セルの 大体の書式と 値を Copy
 Dim VType As XlRangeValueDataType
 
   VType = xlRangeValueXMLSpreadsheet
   'Copy
   RowSize = CopyRng.Rows.Count
   ColumnSize = CopyRng.Columns.Count
   XML = CopyRng.Value(VType)
   
   'Paste
   If Not PasteRng Is Nothing Then
       PasteRng.Resize(RowSize, ColumnSize).Value(VType) = XML
   End If
End Sub
Sub MyPaste(ByRef PasteRng As Range, Optional ByVal CopyRng As Range)
'セルの 大体の書式と 値を Paste
 Dim VType As XlRangeValueDataType
 
   VType = xlRangeValueXMLSpreadsheet
   
   'Copy
   If Not CopyRng Is Nothing Then
       RowSize = CopyRng.Rows.Count
       ColumnSize = CopyRng.Columns.Count
       XML = CopyRng.Value(VType)
   End If
   
   'Paste
   PasteRng.Resize(RowSize, ColumnSize).Value(VType) = XML
End Sub
```
### 悩んでいる内容
```VBA
 Dim VType As XlRangeValueDataType
   VType = xlRangeValueXMLSpreadsheet
```
まず、これはValueの引数がそのままだと候補が出てこなかったので
候補が出てくるように入れたのですが
なんとコメントを入れたらいいのか...
そもそもこういうことをしてもいいのかが分かりません。
次にコマンドの機能自体ですがコピーコマンドといえば
コピー元とコピー先を指定したらコピーできるのが基本だと
思ったので、ペーストの機能も含んだ内容で作りました。
そのあとに連続貼付けの為にペーストコマンドを作ったのですが
対になった方がいいかなと思いコピーの機能を含みにしました。
当然ですがその結果はほぼおんなじコードになるわけなのですが
こういう場合はコピーとペーストは完全に分けたほうがいいのでしょうか
いっそのことCopyPasteとしてくっつけてしまった方がいいのでしょうか
他にも何かあれば指摘して頂きたいです。
よろしくお願い致します。
### 蛇足 ~見やすいコードが書きたい~
最近 作る内容が複雑になってきて過去に作ったコードを再利用出来る様に
したいと思い始めました。
現状 コードがぐちゃぐちゃで探すよりも書き直した方が早いという感じで
再利用が出来ません。
書籍を買って読んだりしていますが
知識が増える度に選択肢の多さに迷い
手が止まります。
最終目標は判断基準の確立と
コードの使いまわしが出来るようにすることです。
宜しくお願い致します。
宜しくお願い致します。
###ベストアンサー選択後の追記
いろいろ意見を頂き
ホントにコピーとペーストそれぞれ必要なのか
再度考えてみました、
ペーストは同じ内容を連続で貼付けするために
足したのですが、今回は今のところ必要なさそうなので
やめることにしました。
それに伴い値の保持の必要もなくなったので
変数はプロシージャ内へ移動、
また、PasteRngは必ず指定しなければいけなくなるので
Optional をやめ Pasteの実行判断のIfもやめました。
クラスにする必要性も低くなったと思うので標準モジュールのままで
```VBA
Option Explicit
Option Private Module
Sub MyCopy(ByVal CopyRng As Range, ByVal PasteRng As Range)
'セルの 大体の書式と 値を Copy
 Dim XML As String
 Dim RowSize As Long
 Dim ColumnSize As Long
 Const ValueDataType = Excel.XlRangeValueDataType.xlRangeValueXMLSpreadsheet
 
   'Copy
   RowSize = CopyRng.Rows.Count
   ColumnSize = CopyRng.Columns.Count
   XML = CopyRng.Value(ValueDataType)
   
   'Paste
   PasteRng.Resize(RowSize, ColumnSize).Value(ValueDataType) = XML
End Sub
```
回答してくださった方ありがとうございました。
また、次も宜しくお願い致します。
  • VBA

    2311 questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

1 「過去の質問」のリンクを張りました

kamikazelight

kamikazelight score 160

2018/07/23 09:16  投稿

後で使いまわしやすい プロシージャ の書き方
### __後で使いまわしやすい プロシージャ の書き方__
過去の質問で教えて頂いた情報を基にクリップボードを使わないで
[過去の質問](https://teratail.com/questions/136468)で教えて頂いた情報を基にクリップボードを使わないで
コピペのコードを書いてみたのですが...
また 脳内選択肢が多すぎで困ってます。
とりあえず書いたコードを載せます。
```VBA
Option Explicit
Option Private Module
 'Paste情報と縦横サイズ
 Private XML As String
 Private RowSize As Long
 Private ColumnSize As Long
Sub MyCopy(ByVal CopyRng As Range, Optional ByVal PasteRng As Range)
'セルの 大体の書式と 値を Copy
 Dim VType As XlRangeValueDataType
 
   VType = xlRangeValueXMLSpreadsheet
   'Copy
   RowSize = CopyRng.Rows.Count
   ColumnSize = CopyRng.Columns.Count
   XML = CopyRng.Value(VType)
   
   'Paste
   If Not PasteRng Is Nothing Then
       PasteRng.Resize(RowSize, ColumnSize).Value(VType) = XML
   End If
End Sub
Sub MyPaste(ByRef PasteRng As Range, Optional ByVal CopyRng As Range)
'セルの 大体の書式と 値を Paste
 Dim VType As XlRangeValueDataType
 
   VType = xlRangeValueXMLSpreadsheet
   
   'Copy
   If Not CopyRng Is Nothing Then
       RowSize = CopyRng.Rows.Count
       ColumnSize = CopyRng.Columns.Count
       XML = CopyRng.Value(VType)
   End If
   
   'Paste
   PasteRng.Resize(RowSize, ColumnSize).Value(VType) = XML
End Sub
```
### 悩んでいる内容
```VBA
 Dim VType As XlRangeValueDataType
   VType = xlRangeValueXMLSpreadsheet
```
まず、これはValueの引数がそのままだと候補が出てこなかったので
候補が出てくるように入れたのですが
なんとコメントを入れたらいいのか...
そもそもこういうことをしてもいいのかが分かりません。
次にコマンドの機能自体ですがコピーコマンドといえば
コピー元とコピー先を指定したらコピーできるのが基本だと
思ったので、ペーストの機能も含んだ内容で作りました。
そのあとに連続貼付けの為にペーストコマンドを作ったのですが
対になった方がいいかなと思いコピーの機能を含みにしました。
当然ですがその結果はほぼおんなじコードになるわけなのですが
こういう場合はコピーとペーストは完全に分けたほうがいいのでしょうか
いっそのことCopyPasteとしてくっつけてしまった方がいいのでしょうか
他にも何かあれば指摘して頂きたいです。
よろしくお願い致します。
### 蛇足 ~見やすいコードが書きたい~
最近 作る内容が複雑になってきて過去に作ったコードを再利用出来る様に
したいと思い始めました。
現状 コードがぐちゃぐちゃで探すよりも書き直した方が早いという感じで
再利用が出来ません。
書籍を買って読んだりしていますが
知識が増える度に選択肢の多さに迷い
手が止まります。
最終目標は判断基準の確立と
コードの使いまわしが出来るようにすることです。
宜しくお願い致します。
  • VBA

    2311 questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る