Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(その他 : その他)
Resizeの範囲の拡大について
投稿日時: 22/06/05 16:54:11
投稿者: チョコチロル

宜しくお願い致します。
 
下記のマクロでコピーする範囲を
Resizeで2列から5列に拡大しているのですが
範囲の1列から5列にしたいのですがやり方が
わからないのでご教授お願いできませんでしょうか。
 
Sub Sampl()
    Dim c As Range
    Dim mRow As Integer
    Dim firstAddress As String
     
     ' シートを追加
       Worksheets.Add After:=Worksheets(Worksheets.Count)
       mWName = Worksheets(Worksheets.Count).Name
 
    With Worksheets("現金").UsedRange.Columns(2)
            Set c = .Find(What:="売上", _
                       LookIn:=xlValues, LookAt:=xlPart)
      ' 条件に当てはまるセルがあるかどうかを判定
        If Not c Is Nothing Then
           '最初のセルのアドレスを覚える
           firstAddress = c.Address
           '繰返し検索し、条件を満たすすべてのセルを検索する
           Do
               c.Resize(1, 5).Copy Destination:= _
                  Cells(Rows.Count, 3).End(xlUp).Offset(1, 0) ' ⇒ 1列目からコピーしたい
                  mi = ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row
              Range("C" & mi).Value = "現金"
 
               Set c = .FindNext(c)
               If c Is Nothing Then Exit Do
           Loop Until c.Address = firstAddress
 
         End If
          
    End With

回答
投稿日時: 22/06/05 18:27:35
投稿者: taitani

変数 C (Range) の起点がどの位置で、その後の Offset でどういう動きを行っているか理解していますでしょうか。
 
https://excel-ubara.com/excelvba4/EXCEL210.html
 
上記ページが参考になると思います。

回答
投稿日時: 22/06/06 05:52:06
投稿者: simple

横から失礼します。
ご指摘のあったとおりです。
コピー元でしたか。

 c.Offset(, -1).Resize(1, 5).Copy
ですね。
 
私はシートが指定していない所が気になりました。
間違いではないのですが、読んでいて落ち着かないです。
    Dim ws As Worksheet
    Worksheets.Add After:=Worksheets(Worksheets.Count)
    Set ws = ActiveSheet
としておいて、
    c.Offset(, -1).Resize(1, 5).Copy Destination:= _
                        ws.Cells(Rows.Count, 3).End(xlUp).Offset(1, 0)
などとすると良いと思います。

投稿日時: 22/06/11 19:02:03
投稿者: チョコチロル

taitaniさん
simpleさん
ご回答ありがとうございました。
 
最初にオフセットする発想がありませんでした。
助かりました。
 
ご教授ありがとうございました。