アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。
午前中に似た様な質問をさせて頂いたのですが、苦闘しており
お知恵を拝借したく再度質問を致します。

以下の様なコード(一部)でset myRng の値だけ(もしできればA列~F列まで)
workingsheet に貼り付けたいのですが、どのように修正を
行えばよいでしょうか? よろしくお願い致します。

lastRow = .Cells(Rows.Count, "A").End(xlUp).Row '
lastCol = .Cells(1, Columns.Count).End(xlToLeft).Column '
Set myRng = Range(.Cells(2, "A"), .Cells(lastRow, lastCol)).SpecialCells(xlCellTypeVisible)
myRng.Copy wS.Cells(Rows.Count, "A").End(xlUp).Offset(1)


本日中には補足やお礼をできないかもしれませんが、
何卒よろしくお願いします。

A 回答 (1件)

前回のご質問の読んでいたけれども、間に合わなかったようです。



前回のご質問で解決をしたのなら良かったけれども、配列での値コピーは、両方のサイズを同じにしないて行けませんし、今回のようなVisible セルだけの値をコピーするのは前回の方法では、逆に複雑になってしまったように思います。

私の記憶では、オートフィルタだけなら、
 SpecialCells(xlCellTypeVisible)
は不要だったと思います。しかし、テーブルのフィルタでは利きませんので注意が必要になります。

以下は、貼り付け先とデータ元と間違えると大変なことになりますから、十分に調べてから、本番でお使いになるようにしてください。

'//
Sub TestMacro()
  Dim myRng As Range
  Dim lastRow As Long, lastCol As Long
  Dim fn As String
  Dim fn2 As String
  Dim ws As Worksheet
  Dim ws2 As Worksheet
  
  fn = "BookA.xlsx" 'データ
  fn2 = "BookB.xlsm" '貼り付け先
  Set ws2 = Workbooks(fn).Worksheets("Sheet1")  'データ
  Set ws = Workbooks(fn2).Worksheets("Sheet1") '貼り付け先
  With ws2
    lastRow = .Cells(Rows.Count, "A").End(xlUp).Row '
    lastCol = .Cells(1, Columns.Count).End(xlToLeft).Column '
    Set myRng = .Range(.Cells(2, "A"), .Cells(lastRow, lastCol)).SpecialCells(xlCellTypeVisible)
  End With
  If myRng Is Nothing Then Exit Sub 'これはありえないかもしれません 
  myRng.Copy
  ws.Cells(Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial (xlPasteValues)
  Application.CutCopyMode = False
End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
うまく行きました。
大変助かりました。コードの内容的に理解できていない部分も
あるのですが、勉強していきます。ありがとうございました。

お礼日時:2016/06/23 08:20

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