下記のコードで、データ出力時に条件に合うデータを上から順に詰めて出力していきたいのですが、条件に合わない場合の空白セルを含んで出力されてしまいます。
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を見た人はこんなQ&Aも見ています
-
風水の観点で選ぶ観葉植物とは?置き場所や上げたい運気ごとの注意点を紹介!
観葉植物で運気をアップするコツを、風水デザイン1級建築士の福島昌彦さんに伺った。
-
指定した範囲から、文字A、文字Bの数をそれぞれカウントする数式が知りたいです。よろしくお願いします。
Excel(エクセル)
-
こんにちは。Excelのデータ入力規則のことで教えてください。複数条件を指定したい場合の構文ですが、
Excel(エクセル)
-
エクセルで同じ値が連続しているセルに色をつける方法を教えてください。
Excel(エクセル)
-
-
4
下記のような条件付き書式はどうやって設定したら良いのか教えていただきたいです。 180時間を満たない
Excel(エクセル)
-
5
エクセル2016でfilter関数がないので、、抜き出す関数をおしえてください。
Excel(エクセル)
-
6
複雑なシフト表から1日ごとの出勤者、シフトを抜き出したいです
Excel(エクセル)
-
7
2013Excel保存済みファイルグレーアウト Excelを開こうとするとメニュー以外全てグレーにな
Excel(エクセル)
-
8
[大至急!]ExcelSheetFreeの使い方がわかりません
Excel(エクセル)
-
9
数字をコンマで区切った文字列の集計のマクロの修正
Excel(エクセル)
-
10
Excelの転記マクロについて、教えて下さい excelのマクロでまた悩んでいます! AAAAという
Excel(エクセル)
-
11
Excelでオートフィルをした時に,値のバグについて
Excel(エクセル)
-
12
Excelに詳しい方、教えていただきたいです。 1つの決まったExcel形式(データは入っていない)
Excel(エクセル)
-
13
エクセルでID番号を保持したまま横並びのデータを縦の一本のデータにしたい
Excel(エクセル)
-
14
B1にある文言がA1に含まれている場合の判定方法について
Excel(エクセル)
-
15
こんにちは。Excelのことで教えてください。特定のセルへの入力時に、ある特定の文字の入力ができない
Excel(エクセル)
-
16
Excelについて質問です。
Excel(エクセル)
-
17
int関数について。
Excel(エクセル)
-
18
エクセルで添付画像のように値を入力する方法はありますか?
Excel(エクセル)
-
19
次のような関数が作りたく、どなたかご教示いただけますでしょうか。 *****************
Excel(エクセル)
-
20
vba 今日の日付が変われば自動的にファイル名に
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数シートからデータを拾って...
-
エクセルファイルのシート毎の容量
-
Excelでシートの違うデータでグ...
-
シート削除して同名シート追加...
-
excelの不要な行の削除ができな...
-
EXCELで2つのファイルから重複...
-
【エクセル」 特定のセルで条件...
-
Excelのセルに斜線を引くマクロ
-
オートフィルタで抽出したデー...
-
別々のシートの表をピボットテ...
-
エクセルのカメラ機能について
-
Excel 売上管理シートに入力し...
-
excelマクロで複数シート間のデ...
-
Excelで日付変更ごとに、自動的...
-
エクセル マクロ "特定の日付...
-
【マクロ】同じフォルダ内にあ...
-
Excelのセル横にリスト表示をす...
-
(VBAにて)日付でデータを抽出す...
-
エクセルVBAで、特定文字から始...
-
ExcelマクロのSendkeysで処理途...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルファイルのシート毎の容量
-
複数シートからデータを拾って...
-
Excelでシートの違うデータでグ...
-
シート削除して同名シート追加...
-
excelの不要な行の削除ができな...
-
Excelで日付変更ごとに、自動的...
-
VBAで CTRL+HOMEの位置へ移動...
-
トランジスタの選び方
-
EXCELで2つのファイルから重複...
-
EXCEL 複数行のデータを1行にま...
-
他のシートの一番下の行データ...
-
オートフィルタで抽出したデー...
-
エクセルのカメラ機能について
-
(VBAにて)日付でデータを抽出す...
-
エクセルで名簿を50音で切り分ける
-
別々のシートの表をピボットテ...
-
Excel 売上管理シートに入力し...
-
Excelマクロ 差分抽出の方法が...
-
EXCEL の表を一行ずつシートに...
-
エクセルVBAで、特定文字から始...
おすすめ情報