下記のコードで、データ出力時に条件に合うデータを上から順に詰めて出力していきたいのですが、条件に合わない場合の空白セルを含んで出力されてしまいます。
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelの不要な行の削除ができな...
-
エクセルファイルのシート毎の容量
-
複数シートからデータを拾って...
-
Excelでシートの違うデータでグ...
-
シート削除して同名シート追加...
-
他のシートの一番下の行データ...
-
Excelで日付変更ごとに、自動的...
-
エクセル VBA VLOOKUP
-
EXCEL グラフ作成 データの範...
-
複数シートのデータを行列を入...
-
VBAで CTRL+HOMEの位置へ移動...
-
Excelですが、同一データが複数...
-
エクセル マクロ "特定の日付...
-
エクセル ファイルサイズ
-
CMOS-IC CD4007UBEのnmosfetの...
-
エクセルで名簿を50音で切り分ける
-
【エクセルマクロ】複数シート...
-
エクセルで複数シートからデー...
-
(VBAにて)日付でデータを抽出す...
-
EXCELで2つのファイルから重複...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excelの不要な行の削除ができな...
-
複数シートからデータを拾って...
-
Excelでシートの違うデータでグ...
-
エクセルファイルのシート毎の容量
-
シート削除して同名シート追加...
-
VBAで CTRL+HOMEの位置へ移動...
-
Excelで日付変更ごとに、自動的...
-
トランジスタの選び方
-
EXCELで2つのファイルから重複...
-
【エクセルマクロ】複数シート...
-
他のシートの一番下の行データ...
-
エクセル VBA VLOOKUP
-
エクセルで名簿を50音で切り分ける
-
エクセル マクロ "特定の日付...
-
エクセル 縦に長い表の印刷時...
-
EXCEL 複数行のデータを1行にま...
-
【Excel】マクロでグラフ系列に...
-
EXCEL の表を一行ずつシートに...
-
エクセルのカメラ機能について
-
時間帯の重複を除いた集計について
おすすめ情報