[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『行ごとデータの移動をマクロでしたい』(りんご飴)
データシートのI列×が入力されている行をバックアップシートに移動したい。
過去の質問を見ながらコードを作成してみたのですがどうしてもうまく動きません。
エラーにならず移動しないまま処理が終了します。
分かるところから調べてみると何故か「Z」の返り値が0になってしまいます。
実際のデータは200行くらいあり、そのうち10件位に×が入力されています。
B/C/D列のみ必ずデータが入力されていて、それ以外は空白セルが存在しています。
Sub 行の移動() Dim i As Long, z As Long, y As Long Dim sh2 As Worksheet Application.ScreenUpdating = False Set sh2 = Sheets("バックアップ") y = sh2.Range("B" & sh2.Rows.Count).End(xlUp).Row With Sheets("データ") z = .Range("I" & .Rows.Count).End(xlUp).Row For i = z To 2 Step -1 If .Cells(i, "I").Value = "×" Then y = y + 1 .Rows(i).Copy Destination:=sh2.Cells(y, 1) .Rows(i).Delete End If Next End With Set sh2 = Nothing Application.ScreenUpdating = True End Sub
どこがおかしいのか教えて頂けますか?
よろしくお願いいたします。
< 使用 Excel:Excel2007、使用 OS:Windows7 >
全く検証してないけど、 >.Rows(i).Copy Destination:=sh2.Cells(y, 1) なんでコピー元は行で、貼り付け先は1セルの指定なの? なんか理不尽だと言わるかも?
何にせよ 仕上がり前に Application.ScreenUpdating = True とするのは良くないと思うし、 F8ステップ実行でもしてみたら・・・・。 F8ステップ実行する前に、無意味といわれるシートやセルの選択も入れてやると動きが解りやすいと思ういます。(私はよく入れて目で確認する)
例えば、こんな感じに。
.Cells(i, "I").select If .Cells(i, "I").Value = "×" Then (BJ) 2019/06/06(木) 14:01
行とセルの指定については、過去ログから見つけたコードで理解がなく書いています。
申し訳ないのですが、もう少し噛み砕いて教えていただけないでしょうか?
よろしくお願いします。
(りんご飴) 2019/06/06(木) 15:07
>z = .Range("I" & .Rows.Count).End(xlUp).Row >分かるところから調べてみると何故か「Z」の返り値が0になってしまいます。
どのようにして、調べたのでしょうか。
(マナ) 2019/06/06(木) 21:24
これも過去ログからからなのですが
コードの部分をクリックしたらグレーに反転して実行し
zにカーソルをあわせると0と浮かび上がってきました。
6行目のyは2と表示されたので(1行目にタイトルが入っている)
zは201で返ってくるのかと思っています。
やり方、間違っているにでしょうか?
(りんご飴) 2019/06/06(木) 21:45
この意味がわからないのです。
BJさんのコメントにある、ステップ実行は試していないのですか?
で、zがどうなるか確認してみてください。
(マナ) 2019/06/06(木) 22:03
ステップ実行で黄色の帯(りんご飴さんの設定はグレーなのかも。。。^^;) 帯がZの真上に有る時(処理前?)は確かにゼロですけど次の行に来たときは I列の×がある最下行のセルの行番号が格納されているはずだとおもうのですが どうですか? 1 になっていませんか? それと気が付いた点だけですがコード内の×と実際のI列の×が別の物と云う事 は無いでしょうか?一度念のため双方の文字コードを確認してみてはどうでしょ うか。気が付いた点だけでした。でわ。。。m(_ _)m (隠居じーさん) 2019/06/06(木) 22:32
MsgBox z で 確認すれば解りますよ。 (隠居じーさん) 2019/06/06(木) 22:40
z = .Range("I" & .Rows.Count).End(xlUp).Row
が、ハイライトされている状態(=その行は未実行)のときに、Long型の変数を見たから、初期値の0が見えたってことじゃないでしょうか?
変数の中身を確認する場合、教科書的にはローカルウィンドウで…となるのでしょうけど、私の場合、めんどくさいときは、イミディエイトウィンドウでDebug.Printしたり、変数に【代入した後】マウスカーソルを合わせて確認したりします。
ちなみに、提示されたコードで行っている処理について、ループ処理にこだわらないのであれは、
オートフィルタを使って、対象を抽出 抽出されたものをコピペ 抽出されたものを削除
という処理で代用できそうです。
(もこな2) 2019/06/07(金) 09:00
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.