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

マクロ初心者です。
指定された項目の列をコピー抽出し、別のシートに貼り付けるマクロを作成したく、
ネットで調べながら以下のもの作成しました。
しかしこれだとコピー元が計算式によって算出された数字だとうまく反映されません。
数字の値のみを貼り付けるにはどこを修正したら良いでしょうか?
説明が下手で申し訳ありません。ご教授のほどよろしくお願い致します。


Sub ColCopy()
Dim xlBook As Workbook
Dim xlSheetOrg As Worksheet
Dim xlSheetSel As Worksheet
Dim xlSheetDst As Worksheet
Dim strDstSheetName As String
Dim rngLastRow As Range
Dim vntIndex As Variant
Dim rngIndexs As Range
Dim rngHeader As Range
Dim lngColSrc As Long
Dim lngColDst As Long
Dim rngTargetCol As Range


Set xlBook = ThisWorkbook

With xlBook
Set xlSheetSel = .Worksheets("sheet3")
Set xlSheetOrg = .Worksheets("Sheet1")
End With

' コピー先シート名取得
strDstSheetName = xlSheetSel.Range("A2").Value


' コピー先シートを初期化(なければ生成)
On Error GoTo ERR_DST_SHEET
Set xlSheetDst = xlBook.Worksheets(strDstSheetName)
With xlSheetDst
.Cells.Clear
End With
On Error GoTo 0


' 項目名を読み取り
With xlSheetSel
Set rngLastRow = .Cells(.Rows.Count, 1).End(xlUp)
Set rngIndexs = .Range(.Cells(4, 100), rngLastRow)
Set rngLastRow = Nothing
End With

' 見出し行の取り込み
Set rngHeader = xlSheetOrg.Rows(2)

' 該当列のコピー
Application.ScreenUpdating = False
With xlSheetDst
lngColDst = 0
For Each vntIndex In rngIndexs
lngColDst = lngColDst + 1
Set rngTargetCol = rngHeader.Find(CStr(vntIndex))
lngColSrc = rngTargetCol.Column
rngTargetCol.EntireColumn.Copy .Cells(1, lngColDst)
Set rngTargetCol = Nothing
Next vntIndex
Set rngIndexs = Nothing
End With
Application.ScreenUpdating = True

GoTo PROC_END

ERR_DST_SHEET:
Set xlSheetDst = Sheets.Add(, Sheets("オリジナル"))
xlSheetDst.Name = strDstSheetName
Resume Next

PROC_END:
Set rngHeader = Nothing
Set xlSheetDst = Nothing
Set xlSheetOrg = Nothing
Set xlSheetSel = Nothing
Set xlBook = Nothing
MsgBox "処理が完了しました。"
End Sub

A 回答 (2件)

[変更前]


rngTargetCol.EntireColumn.Copy .Cells(1, lngColDst)

[変更後]
rngTargetCol.EntireColumn.Copy
.Cells(1, lngColDst).PasteSpecial Paste:=xlPasteValues
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
変更後の内容でうまくいきました。
ありがとうございます。

お礼日時:2020/11/30 14:00

初心者とは、ご謙遜を!!


Set、Withステートメントを使いこなしている初心者さんなんて、見たことないです(笑)

一番簡単な方法は、Valueプロパティを代入する方法でしょうかね。
こんな感じです。

.Cells(1, lngColDst).EntireColumn.Value = rngTargetCol.EntireColumn.Value

ただし、対象範囲がEntireColumnなので、時間がかかります。

PasteSpecialメソッドで値張り付という手もありますが、こちらはマクロの記録で、どんなコードを書けば良いか確認してみて下さい。
    • good
    • 1
この回答へのお礼

ご回答いただきありがとうございます。
確かに時間がかかりますね。
なるほど勉強になります。

お礼日時:2020/11/30 13:59

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