VBAのメモ:値のコピーについて

Excelソフトは8割がたPCに入っているソフトである
そのソフトなら開発ができるVBAは最も触りやすく、そして嫌われているプログラミング言語だと教わりました

実際触ってみて、昔からある言語のためいろいろな人が関数を残してくださっている
それはありがたいことであるが、なんとも分かりにくいし、人によって書き方が違いすぎて理解するのが難しい

簡単なパーツ事にメモを残していけたらいいなって思い記載していきます

値のコピー

'セルの値をとってくる際にCopyするって思う人が大半であるが
Dim strobj As String
strobj = ThisWorkBook.Sheets(1).Range("A1").Value

'一度変数に入れてそれを以後使うようにする
'理由→長い処理でCopy記述を使っていた場合に、手動でコピーペーストを使ってしまった場合に影響を与えるためである

表の有効区間のコピー

値のある表の上でショートカットキー[Ctrl]+[Shift]+[*]でデータ範囲を選択できるこれをコードで再現する

D5を選択しているがこれは表の外なので、選択されません

操作中のブックシートの場合

ダメなやり方、
これもCopyと同じでコードの実行中に別シートを編集していた場合にエラーになってしまう可能性がある

    Dim vdata As Variant
    'Activateでこのシートを操作することを宣言する
  ThisWorkBook.Sheets(1).Activate
    'Activate出ない場合にCurrentRegion.Selectをするとエラーになります
  ThisWorkBook.Sheets(1).Range("A1").CurrentRegion.Select  'データ有効範囲を選択
  vdata = Selection.Value  

推奨するやり方

   
    Dim vdata As Variant
    Selection.CurrentRegion.Select
    '変数に配列として格納される
    vdata = Selection.Value

別ファイルの場合

    
    'ファイルをオープン
    Dim wb As Workbook: Set wb = Workbooks.Open("FilePath")
    Dim vdata As Variant
    '追加Sheetにピボットデータ貼り付け用
     vdata = wb.Sheets(1).Range("A1").CurrentRegion.Value  'データ有効範囲を選択
     
    '必要に応じてファイル閉じる
    wb.Close
    
    '貼り付けをする今回は別のシートを追加してそこに張り付ける
    Set ws = ThisWorkbook.Worksheets.Add(after:=Worksheets(1))

    'UBound(vdata, 1) = 行 UBound(vdata, 2) = 列
    ws.Range("A1", Cells(UBound(vdata, 1) + 1, UBound(vdata, 2) + 1)) = vdata

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です