
下記のコードで、データ出力時に条件に合うデータを上から順に詰めて出力していきたいのですが、条件に合わない場合の空白セルを含んで出力されてしまいます。
targetrowの記述周りがおかしいと思うのですが原因がわかりません。デバッグでエラーもありません。
どのように修正すれば上から順に詰めて出力できるでしょうか?
ご教授お願い致します。
Sub 勤務区分入力()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim lastRow As Long
Dim i As Long
Dim targetRow As Long
' シート1とシート2を設定
Set ws1 = ThisWorkbook.Sheets("入力シート")
Set ws2 = ThisWorkbook.Sheets("出力シート")
' シート1の最終行を取得
lastRow = ws1.Cells(ws1.Rows.Count, "F").End(xlUp).Row
' Sheet2のG列から上に向かってデータを埋めるための行を設定
targetRow = 7
' データを検査してコピー
For i = 9 To lastRow ' A2から最終行まで
If ws1.Cells(i, 6).Value = "日勤" And IsEmpty(ws1.Cells(i, 5).Value) Then
ws2.Cells(i - 2, 3).Value = "17:00~18:00"
ws2.Cells(i - 2, 4).Value = "17:00~"
ElseIf ws1.Cells(i, 6).Value = "6:45早出" And IsEmpty(ws1.Cells(i, 5).Value) Then
ws2.Cells(i - 2, 3).Value = "15:15~16:15"
ws2.Cells(i - 2, 4).Value = "15:15~"
ElseIf ws1.Cells(i, 6).Value = "11時遅出" And IsEmpty(ws1.Cells(i, 5).Value) Then
ws2.Cells(i - 2, 3).Value = "19:30~20:30"
ws2.Cells(i - 2, 4).Value = "19:30~"
End If
' 次の行に移動
targetRow = targetRow + 1
Next i
' リリースオブジェクト
Set ws1 = Nothing
Set ws2 = Nothing
End Sub
No.2ベストアンサー
- 回答日時:
以下のようにしてください。
Sub 勤務区分入力()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim lastRow As Long
Dim i As Long
Dim targetRow As Long
' シート1とシート2を設定
Set ws1 = ThisWorkbook.Sheets("入力シート")
Set ws2 = ThisWorkbook.Sheets("出力シート")
' シート1の最終行を取得
lastRow = ws1.Cells(ws1.Rows.Count, "F").End(xlUp).Row
' Sheet2の7行から下に向かってデータを埋めるための行を設定
targetRow = 7
' データを検査してコピー
For i = 9 To lastRow ' A2から最終行まで
If ws1.Cells(i, 6).Value = "日勤" And IsEmpty(ws1.Cells(i, 5).Value) Then
ws2.Cells(targetRow, 3).Value = "17:00~18:00"
ws2.Cells(targetRow, 4).Value = "17:00~"
targetRow = targetRow + 1
ElseIf ws1.Cells(i, 6).Value = "6:45早出" And IsEmpty(ws1.Cells(i, 5).Value) Then
ws2.Cells(targetRow, 3).Value = "15:15~16:15"
ws2.Cells(targetRow, 4).Value = "15:15~"
targetRow = targetRow + 1
ElseIf ws1.Cells(i, 6).Value = "11時遅出" And IsEmpty(ws1.Cells(i, 5).Value) Then
ws2.Cells(targetRow, 3).Value = "19:30~20:30"
ws2.Cells(targetRow, 4).Value = "19:30~"
targetRow = targetRow + 1
End If
Next i
' リリースオブジェクト
Set ws1 = Nothing
Set ws2 = Nothing
End Sub
ご回答ありがとうございます。
targetRow = targetRow + 1がそれぞれの条件で必要だったのですね。
コードの全文記述ありがとうございます。
今後もよろしくお願いします。
No.1
- 回答日時:
こんにちは
うまくいかないコードだけ見せられても、何をしたいのかよくわかりませんね。
なんとなくの雰囲気だけですが、おかしそうな点を挙げてみると・・
>For i = 9 To lastRow ' A2から最終行まで
・コメントには「A2から」とあるけれど、多分、9行目からになっている。
・そのループ内でws2に転記している行は、「i - 2」行目となっていて、
ws1の行番号依存なので、質問タイトルにある「抽出して(してないのかも?)
詰めて転記」をしているとは思えない。
抽出処理はなく、ws1の全行をなんらかの形で転記するのなら、
ws1の行番号依存でもよさそうですけれど・・
>targetRow = 7
・通常なら、転記先の行番号とかなのでしょうけれど、処理内で使用していない
ので意味をもたない変数になっている。
想像するところ、出力先の行番号はこの変数の示す行なのではないでしょうか。
(↑勝手な妄想ですけれど・・)
>条件に合わない場合の空白セルを含んで出力されてしまいます
・条件に合わない行(?)として扱われるのは、ご提示のループでは、IF及び
ElseIfの条件で偽となる行は処理を行わずに、次の行に進むことになります。
その条件の内容が、実際に処理をしないものと一致しているのか再確認
してみましょう。
※ 何をしたいのか理解できない状態で回答していますので、あくまでもご参考までに。
※ もしも、ご自身でデバッグする気があるのなら、例えばブレークポイントを設定して、1行ずつ処理をさせてみて、思っていることと違う結果になった時の処理を調べてみるとかが考えられます。
さらには、ステップ実行を併用するなどで、原因となっている箇所を特定できるものと思います。
ご回答ありがとうございます。
>For i = 9 To lastRow ' A2から最終行まで
これはコメントのミスでした。
>targetRow = 7
出力先の行番号と思って記載しておりました。。。。
>条件に合わない場合の空白セルを含んで出力されてしまいます
>条件に合わない行(?)として扱われるのは、ご提示のループでは、IF及びElseIfの条件で偽となる行は処理を行わずに、次の行に進むことになります。
IFとElseIFの条件が理解できていなかったみたいです。。。勉強します。
ご丁寧にありがとうございます。ステップ実行して調べたりはしたのですが、今度質問するときはもう少し詳細に分からないことを記述しようと思いました。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルマクロでデータ出力の際の条件がうまく機能しません。 5 2023/10/01 12:50
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Visual Basic(VBA) エクセルマクロで出力行の増やし方がわかりません。 4 2023/09/28 23:40
- Visual Basic(VBA) 条件をつけてカウントする 4 2021/12/19 20:27
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) Excel VABについて 1.xlsm、VBA.xlsm2つのファイルがあり、1.xlsmにてVB 6 2021/12/13 17:46
- Visual Basic(VBA) 【VBA】ユーザーフォーム リストボックスのヘッダー設定方法 2 2021/12/02 11:15
- Visual Basic(VBA) 空のシートに関数を入れたい 2 2021/12/03 15:08
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelの不要な行の削除ができな...
-
エクセルファイルのシート毎の容量
-
複数シートからデータを拾って...
-
Excelでシートの違うデータでグ...
-
シート削除して同名シート追加...
-
Excelで日付変更ごとに、自動的...
-
エクセル 縦に長い表の印刷時...
-
【マクロ】同じフォルダ内にあ...
-
オートフィルタで抽出したデー...
-
VBAで CTRL+HOMEの位置へ移動...
-
他のシートの一番下の行データ...
-
時間帯の重複を除いた集計について
-
Excelのセル横にリスト表示をす...
-
EXCELで2つのファイルから重複...
-
Googleスプレッドシートフィル...
-
エクセルVBAで、特定文字から始...
-
複数シートのデータを行列を入...
-
トランジスタの選び方
-
Excelでセル内の不特定位置の(...
-
エクセルのカメラ機能について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excelの不要な行の削除ができな...
-
Excelでシートの違うデータでグ...
-
エクセルファイルのシート毎の容量
-
複数シートからデータを拾って...
-
シート削除して同名シート追加...
-
Excelで日付変更ごとに、自動的...
-
VBAで CTRL+HOMEの位置へ移動...
-
エクセル 縦に長い表の印刷時...
-
EXCELで2つのファイルから重複...
-
Googleスプレッドシートフィル...
-
トランジスタの選び方
-
他のシートの一番下の行データ...
-
時間帯の重複を除いた集計について
-
EXCEL の表を一行ずつシートに...
-
エクセルで名簿を50音で切り分ける
-
オートフィルタで抽出したデー...
-
エクセルのカメラ機能について
-
エクセル VBA VLOOKUP
-
【エクセル」 特定のセルで条件...
-
エクセル マクロ "特定の日付...
おすすめ情報