
以下のマクロのコードや内容・条件をご覧ください。動きます。
次に図をご覧ください
book1の【A1からI1】までを、book2の【B6からJ6】に転記をしたいです
しかし、book2の【B13からJ13】に転記されてしまいます
理由は、マクロが最終行をA列の13行目と判断している為です
番号のデータがある為です
これを、赤矢印の場所へ転記できるようにしたいです
ご存じの方、よろしくお願いします
【利用条件】
・転記先ファイルは共有
・複数人にて利用
【マクロ内容】
・データを転記する
・book1のA1からI1までを、book2の【最終行】に転記
・最終行は、データが歯抜けであっても、1番最後の行に
あるデータを最終行と判断する
【コード】
Sub 転記()
Dim ws1 As Worksheet
Dim wb2 As Workbook
Dim ws2 As Worksheet
Dim maxrow2 As Long
Dim row2 As Long
Dim i As Integer
Set ws1 = Worksheets("転記元")
For i = 1 To Workbooks.Count
If Workbooks(i).Name = "book2.xlsx" Then '転記先のブック。
Set wb2 = Workbooks(i)
End If
Next
Set ws2 = wb2.Worksheets("転記先") '転記先シート
maxrow2 = ws2.AutoFilter.Range(ws2.AutoFilter.Range.Count).Row '転記先のブックB列
row2 = maxrow2 + 1
ws2.Cells(row2, 2).Resize(1, 8).Value = ws1.Range("A1").Resize(1, 8).Value '転記元から転記先へ7セル分を転記.a1から7セル分。天気先。1列目から。
ws1.Range("I1").Copy ws2.Cells(row2, 10).Resize(1, 1)
wb2.Save '転記先のブックを上書き
End Sub

A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
No1です。
似た様な回答をした記憶があったので・・
これでしょうかね?
https://oshiete.goo.ne.jp/qa/13639237.html
もしそうなら、どうやら文章では意味が通じないようなので、以下にサンプルを。
※ 関数等で計算結果がブランクになっているセルは、空白セルとは見做しません。
(こちらも空白セルと見做したい場合は、チェック条件を変えれば良いです)
Sub Sample()
Dim rw As Long
Const col = "B" ' 最終行判定対象列
With Workbooks("book2.xlsx").Worksheets("転記先")
rw = .Cells(2, 1).CurrentRegion.Rows.Count + 1
While rw > 1 And IsEmpty(.Cells(rw, col))
rw = rw - 1
Wend
MsgBox col & "列の最終行は " & rw & "行です"
End With
End Sub
No.1
- 回答日時:
こんばんは
>理由は、マクロが最終行をA列の13行目と判断している為です
理由がわかっているのなら、そこを修正すれば良いです。
ご提示のコードでは「オートフィルタの範囲」の最終列を求めて、それを最終行と判断しています。
実行時の状況がわかりませんけれど、
1)必ず、オートフィルタが設定されている。(いない場合は無いのか?)
2)フィルターがかかっている状態(=非表示の行が存在する)である可能性がある。
などの状況によって変わってくるかもしれません。
・フィルタが設定されていても、非表示のセルがない状態であれば、通常のEnd(xlUp)で最終行を求める方法で、A列以外(=必ず値のある列)で参照することが可能でしょう。
・フィルタの状態を「全て表示」の状態にしてもかまわなければ、同様に上記の方法が使えます。
一旦、AutoFilter.ShowAllData を実行すれば全ての行が表示されますので・・
https://learn.microsoft.com/ja-jp/office/vba/api …
・フィルタが設定されているのか/いないのか不明で、かつ、非表示の行があるかもしれないというような場合は、下から順にセルの値を調べてゆけば良いでしょう。
(意味合いとしては、End(xlUp)と同様ですが、個々にセルを調べることで非表示のセルも対象にできます)
こちらの場合は、スタートをRow.Countにすると無駄が多いので、UsedRange+1 行目から上に調べてゆくのが効率的と思います。
(表の内容によっては、CurrentRegion の方がさらに有効かもしれません)
※ ちなみに、ご提示のコードの場合、シートにフィルタが設定されていないとエラーになると思われます。
いつもご返答ありがとうございます
フィルターは、しぼりが、入っている場合とない場合があります。非表示の行はないです、usedrange+1ですね
出きるか、わかりませんが、やってみます
アドバイスありがとうございます
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定の文字がある行以外を削除...
-
結合されたセルをプルダウンの...
-
Excel VBA アクティブセルから...
-
エクセルVBAのEntireRow.Hidden...
-
excel セルの結合を条件付で自...
-
エクセルVBA 最終行を選んで並...
-
Excelのフィルター後の一番上の...
-
完全一致したら代入するマクロ...
-
【Excel関数】UNIQUE関数で"0"...
-
(VBAにて)列のセルの結合について
-
Excelで、セルの幅をすべ...
-
エクセルのセルに指定画像(.jpg...
-
エクセル2016で時間を入力して...
-
セルではなく行や列、シート全...
-
Excel グラフのプロットからデ...
-
Excel ウインドウ枠の固定をす...
-
エクセル 時間の表示形式AM/PM...
-
Excel2007で、指定範囲の行高さ...
-
”アクティブセル行」の一行下を...
-
エクセル 上下で列幅を変えるには
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字がある行以外を削除...
-
【Excel関数】UNIQUE関数で"0"...
-
エクセルで特定の文字列が入っ...
-
Excelのフィルター後の一番上の...
-
エクセル 上下で列幅を変えるには
-
エクセル マクロ オートフィ...
-
エクセル マクロで数値が変っ...
-
[EXCEL]ボタン押す→時刻が表に...
-
結合されたセルをプルダウンの...
-
Excel グラフのプロットからデ...
-
excelのデータで色つき行の抽出...
-
excel 小さすぎて見えないセル...
-
A1に入力された文字列と同じ文...
-
EXCELで最後の行を固定
-
Excel ウインドウ枠の固定をす...
-
エクセルVBA 最終行を選んで並...
-
VBAで色の付いているセルの行削除
-
連続データが入った行の一番右...
-
エクセル2016で時間を入力して...
-
チェックボックスをクリックし...
おすすめ情報