エクセルマクロで条件に合致する値を抜き出して別シートに記載していきたいのです。
条件としては、入力シートのF列に日勤が入力されていて、かつE列が空白で、かつI列の時刻データが17時15分以降の場合、出力シートに値を入力するというものです。
「If TimeValue(ws1.Cells(i, 9).Value) >= TimeValue("17:15:00") Then」の行がエラーを出しており、「型が一致しません」とのことです。
以前こちらでご回答いただいたコード(正確に動作する)に上記1文を足したらエラーが出たので該当文章の記述がおかしいと思うのですが原因がわかりません。
ご指導のほどよろしくお願いします。
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
If ws1.Cells(i, 6).Value = "日勤" And IsEmpty(ws1.Cells(i, 5).Value) Then
If TimeValue(ws1.Cells(i, 9).Value) >= TimeValue("17:15:00") Then
ws2.Cells(targetRow, 3).Value = "17:00~18:00"
ws2.Cells(targetRow, 4).Value = "17:00~"
targetRow = targetRow + 1
End If
ElseIf ws1.Cells(i, 6).Value = "6:45早出" And IsEmpty(ws1.Cells(i, 5).Value) Then
If TimeValue(ws1.Cells(i, 9).Value) >= TimeValue("15:30:00") Then
ws2.Cells(targetRow, 3).Value = "15:15~16:15"
ws2.Cells(targetRow, 4).Value = "15:15~"
targetRow = targetRow + 1
End If
ElseIf ws1.Cells(i, 6).Value = "11時遅出" And IsEmpty(ws1.Cells(i, 5).Value) Then
If TimeValue(ws1.Cells(i, 9).Value) >= TimeValue("19:45:00") Then
ws2.Cells(targetRow, 3).Value = "19:30~20:30"
ws2.Cells(targetRow, 4).Value = "19:30~"
targetRow = targetRow + 1
End If
End If
Next i
' リリースオブジェクト
Set ws1 = Nothing
Set ws2 = Nothing
End Sub
No.4ベストアンサー
- 回答日時:
これでどうでしょうか。
もし、同じエラーが発生するようでしたら、実際に使用している
入力シートのI列のセルの画像を提示していただけると、解決に結びつきやすくなります。
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
If ws1.Cells(i, 6).Value = "日勤" And IsEmpty(ws1.Cells(i, 5).Value) Then
If ws1.Cells(i, 9).Value >= TimeValue("17:15:00") Then
ws2.Cells(targetRow, 3).Value = "17:00~18:00"
ws2.Cells(targetRow, 4).Value = "17:00~"
targetRow = targetRow + 1
End If
ElseIf ws1.Cells(i, 6).Value = "6:45早出" And IsEmpty(ws1.Cells(i, 5).Value) Then
If ws1.Cells(i, 9).Value >= TimeValue("15:30:00") Then
ws2.Cells(targetRow, 3).Value = "15:15~16:15"
ws2.Cells(targetRow, 4).Value = "15:15~"
targetRow = targetRow + 1
End If
ElseIf ws1.Cells(i, 6).Value = "11時遅出" And IsEmpty(ws1.Cells(i, 5).Value) Then
If ws1.Cells(i, 9).Value >= TimeValue("19:45:00") Then
ws2.Cells(targetRow, 3).Value = "19:30~20:30"
ws2.Cells(targetRow, 4).Value = "19:30~"
targetRow = targetRow + 1
End If
End If
Next i
' リリースオブジェクト
Set ws1 = Nothing
Set ws2 = Nothing
End Sub
ご回答ありがとうございます。
対象セルをTimeValueとして拾ってくるのがおかしかったのですね。銀鱗様にご回答いただいていたのはここのご指摘だったということでしょうかね。
自分の勉強不足を痛感しました。
ご丁寧にありがとうございました。
No.5
- 回答日時:
>対象セルをTimeValueとして拾ってくるのがおかしかったのですね。
銀鱗様にご回答いただいていたのはここのご指摘だったということでしょうかね。はい、その通りです。
No2のfujillin様も、同様の指摘をされています。
No.3
- 回答日時:
TimeValue が何をしているものなのかを考えてみましょう。
時間を示す【文字列】を【シリアル値】に変換してるんです。
ユーザー定義で「時間」にしているという事はすでにシリアル値であると考えられます。
ユーザー定義は
正の値;負の値;ゼロ価;文字列
のように設定されます。
セミコロンで区切らないと基本は正の値のケースになります。
(G/標準 …が特殊ってだけ)
ですので【シリアル値】ですね。
ご回答ありがとうございます。
つまりどういうことなのでしょうか?
素人質問で申し訳ですが、TimeValue(ws1.cell(i,9).Value)の記述がおかしいのですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルマクロでデータ出力の際の条件がうまく機能しません。 2 2023/09/30 13:01
- 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) Excel VABについて 1.xlsm、VBA.xlsm2つのファイルがあり、1.xlsmにてVB 6 2021/12/13 17:46
- Visual Basic(VBA) VBA ある文字が含まれるセルの行をうまく削除出来ません 3 2021/10/30 22:07
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
2013Excel保存済みファイルグレーアウト Excelを開こうとするとメニュー以外全てグレーにな
Excel(エクセル)
-
Excelでオートフィルをした時に,値のバグについて
Excel(エクセル)
-
エクセルで添付画像のように値を入力する方法はありますか?
Excel(エクセル)
-
-
4
エクセル 関数について
Excel(エクセル)
-
5
エクセル 条件付き書式設定
Excel(エクセル)
-
6
[大至急!]ExcelSheetFreeの使い方がわかりません
Excel(エクセル)
-
7
数字をコンマで区切った文字列の集計のマクロの修正
Excel(エクセル)
-
8
Excel初心者です、教えてください。
Excel(エクセル)
-
9
エクセルでID番号を保持したまま横並びのデータを縦の一本のデータにしたい
Excel(エクセル)
-
10
こんにちは。Excelのデータ入力規則のことで教えてください。複数条件を指定したい場合の構文ですが、
Excel(エクセル)
-
11
Excelに詳しい方、教えていただきたいです。 1つの決まったExcel形式(データは入っていない)
Excel(エクセル)
-
12
Excelで、改行がある場合の条件式(関数)の書き方を教えてください
Excel(エクセル)
-
13
ダウンロードファイルの名称変更
Excel(エクセル)
-
14
IF関数を使用した数字に、カンマとテキストをつけたい
Excel(エクセル)
-
15
エクセル 関数
Excel(エクセル)
-
16
Excel VBAにて、2GB超の点群データ(CSVファイル,改行コードLF)を高速で解析したい。
Visual Basic(VBA)
-
17
算数、数学解りません。 足し、引き、掛け、割り算程度しか出来なくても、Excel覚えられますか?
Excel(エクセル)
-
18
下記のような条件付き書式はどうやって設定したら良いのか教えていただきたいです。 180時間を満たない
Excel(エクセル)
-
19
エクセル CSVファイルについて
Excel(エクセル)
-
20
xlookup関数の引数を利用して検索元に移動するVBAコードについて
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字の色も参照 VLOOKUP
-
ExcelのVlookup関数の制限について
-
VBAで繰り返しコピーしながら下...
-
エクセルで横並びの複数データ...
-
【条件付き書式】countifsで複...
-
VLOOKアップ関数の結果の...
-
Excel VBA ピボットテーブルに...
-
エクセルの列の限界は255列以上...
-
Excel の複数シートの列幅を同...
-
SUMPRODUCTにて別シートのデー...
-
エクセルVBAで、ある文字を含ん...
-
エクセルのブック分割マクロを...
-
エクセルの保護で、列の表示や...
-
エクセルの横に並んでいるもの...
-
Excelでの並べ替えを全シートま...
-
EXCEL VBAのコンボボックスに取...
-
マクロか関数で処理したいので...
-
【VBA】複数のシートの指定した...
-
エクセル機能 オートフィルター
-
納品日から得意先ごとの請求日...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのVlookup関数の制限について
-
文字の色も参照 VLOOKUP
-
オートフィルタ使用時にCOUNTIF...
-
エクセルの保護で、列の表示や...
-
VBAで繰り返しコピーしながら下...
-
エクセル関数に詳しい方、教え...
-
【条件付き書式】countifsで複...
-
Excel の複数シートの列幅を同...
-
エクセル マクロ 標準モジュー...
-
エクセルで横並びの複数データ...
-
エクセルの列の限界は255列以上...
-
Excelでの並べ替えを全シートま...
-
VLOOKアップ関数の結果の...
-
SUMPRODUCTにて別シートのデー...
-
エクセルで、チェックボックス...
-
Excel VBA ピボットテーブルに...
-
【エクセル】1列のデータを交...
-
エクセルVBAで、ある文字を含ん...
-
エクセルのブック分割マクロを...
-
【VBA】複数のシートの指定した...
おすすめ情報