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

複数のエクセルから表の情報を転記する作業をマクロ化したいと思っています。
コピー先となるエクセルは一つですが、コピー元となるのエクセルは複数あります。
参考に画像を添付しましたが別ブック1,2の情報をコピー先のエクセルに転記したいです。

そこで躓いているのが最終行の取得についてです。
下記のようなコード(一部省略していますが)を使って最終行の取得をして転記するところまではできているのですが、これだと当たり前ですが、別ブック1の情報はE,F列の空欄まで転記され、別ブック2だとC列以降の6行目にデータが入っていても転記されません。
ブック毎に最終行の列が毎回異なる場合はどのようなコードを使えばよいか、どなたか教えていただけないでしょうか。。。

Dim wb As Workbook(コピー元別ブック)
Dim sh As Worksheet(コピー先)
Dim c As Long, r As Long
Dim no As Variant
Dim rr As Long



With wb.Worksheets("シート1")

For c = 1 To .Cells(3, Columns.Count).End(xlToLeft).Column Step 2
 no = .Cells(3, c).Value
For r = 4 To .Cells(Rows.Count, 2).End(xlUp).Row
rr = rr + 1
sh.Cells(rr, 1).Value = .Cells(r, c).Value
sh.Cells(rr, 2).Value = .Cells(r, c + 1).Value
sh.Cells(rr, 3).Value = no
Next r
Next c
End With

よろしくお願いいたします。

「マクロで最終行を取得したい」の質問画像

A 回答 (4件)

連投すみません


気が付きました#3訂正します
.Cells(r, c).Valueについての条件ですね
For r = 4 To .Cells(Rows.Count, c).End(xlUp).Row
If .Cells(r, c).Value <> "" Then
rr = rr + 1


End If
Next r
確かめられないので間違っていたらごめんなさい
    • good
    • 0

忘れていました


>別ブック1の情報はE,F列の空欄まで転記され
If .Cells(3, c).Value<>"" Then
no = .Cells(3, c).Value


Next r
End If
Next c
など
無駄な繰り返しをしない方法は考えてください
    • good
    • 0

こんにちは



掲示のコードにおいて最も簡単な方法は
カラム方向が前段で取得されているようなので 変数cを使って
For r = 4 To .Cells(Rows.Count, c).End(xlUp).Row
とすれば良いです

最終行の取得方法は色々やり方がありますが参考程度で
対象の表組み(データ)で変わります

例の図での取得方法は ざっくり見て3通りですが
ヒントをマクロの記録を使って取得できる方法2通りを
1、Excelシート上でA1を選択してCtrl + Shift + Endキーを押す
Range("A1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selectionは Range("A1")を指しますね
Rangeを見ると
Range("A1",ActiveCell.SpecialCells(xlLastCell)) が範囲ですね、つまり
ActiveCell.SpecialCells(xlLastCell)が最終セルを示しますので
ActiveCell.SpecialCells(xlLastCell).Row で最後の行数が得られます

しかし、値がなくなってしまうA列では希望の繰り返しにならないかも知れません
これについての対策も複数考えられますが、If セル<>"" Then などの条件設定で空白でないセルのみ処理するとか、繰り返し処理を抜けるとかできると思います

2、はA3を選択してCtrl + Shift + *キーを押す で記録したコードです
Range("A3").Select
Selection.CurrentRegion.Select
これはセル範囲を示していますので .Countなどを使う必要がありそうです
が自身で調べてみてください
その他にUsedRangeプロパティを使う方法などもあります2同様行番号を取得するには少し複雑になります
    • good
    • 0

With wb.Worksheets("シート1")


・・・・
End With
の箇所をサブルーチン化する等してブック毎に繰り返すようにすれば良いかと思います。
    • good
    • 0

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