以前似た内容を質問させていただいたのですが、
それに少し似た内容の不明点が出てきましたので、再度質問させていただきました。
やりたいこと①
"値一致シート"のC列の値と"値の元"シートのA列の値が一致したら、
"値一致シート"のC列の値をA列に転記する。
この際転記する値は年(2019など)に変換して表示させたい。
"値一致シート"
"値の元"シート
"値一致シート"のC列には、"19.01.05"などの値があります。これは"2019/01/05"という
年月日のことを指しています。
"値の元"シートのA列の"年間カレンダー"の列も"2019/01/05"という
年月日の値が入っています。
この値をキーに、"値一致シート"のC列の値が"値の元"シートのA列と一致していたら、
"値一致シート"のA列に"19.01.05"の頭の"19"に"20"をつけて"2019"という4桁の
年を表示させたいです。
やりたいこと②
"値一致シート"のC列の値が"値の元"シートのA列と一致していたら、
"値の元"シートのC列の"WK表示"の値を、"値一致シート"のB列に転記させたいです。
例えば、"19.01.05"なら"WK 01"、"2019/1/22"なら"WK 04"。
下記の画像のように仕上げるのを目標として
色々試行錯誤しているところです。
Dim S2 As Worksheet Dim ws As Worksheet Dim R As Long Set S2 = Worksheets("値一致シート") '転記先 Set ws = Worksheets("値の元") 'Calendar For R = 1 To ws.Cells(Rows.Count, "A").End(xlUp).Row If S2.Cells(R, "C").Value = ws.Cells(Rows.Count, "A")Then S2.Cells(R, "A").Value = ws.Cells(Rows.Count, "A") End If Next R End Sub
Find関数などを使用し、何度も検索⇒一致したら転記を試したのですが、
やはりうまく値の検索も抽出も転記もできなかったので、
まずセルとセルの内容が一致しているか⇒一致しているなら、その値を
セルに転記させる・・・
という方法をとってみました。
しかし、上記のソースコードだとエラーは出ないのですが、
何一つ値をとってこれません。
値を抽出できないので、やりたいこと②のロジックも
わかりません。。。
2019/03/13 修正したソースを追記(まだ未完成ですが、途中経過です)
Sub 編集中() Dim S2 As Worksheet Dim ws As Worksheet Dim R As Long 'Selection.Value = Selection.Value '(この式は値に変換するという意味らしい) Set S2 = Worksheets("値一致") Set ws = Worksheets("値の元") Dim iRowI As Integer '"値の元"(読み取り)行 Dim iLastRow As Integer 'A列の最終データ行を取得する(年間カレンダーの最終行) iLastRow = ws.Range("A2").SpecialCells(xlLastCell).Row '表示形式を年だけで表示させる 'Calendar加工"の2行目~最終データ行までループ処理させる For iRowI = 2 To iLastRow '"Weeklyシート加工"の"F列"の最後の行になるまで実行させる For R = 2 To S2.Cells(Rows.Count, "F").End(xlUp).Row 'If S2.Cells(R, "C").Value = ws.Cells(Rows.Count, "A") Then '「値一致」シートのC列の値を、「値の元」シートのA列と比較して、一致しているか調べてみる If S2.Cells(R, "F").Text = ws.Cells(iRowI, "A").Text Then 'S2.Cells(R, "A").Value = ws.Cells(Rows.Count, "A") '「値一致」シートと「値の元」シートで一致していたら、その行の値を転記する S2.Cells(R, "A").Value = ws.Cells(iRowI, "A").Value End If If S2.Cells(R, "A").Value = ws.Cells(iRowI, "A").Value Then ' S2.Cells(R, "A").Value = CStr(S2.Cells(R, "A").Value) CStr 関数は、指定した値を文字列型 (String) に変換する ' S2.Cells(R, "A").Value = ws.Cells(iRowI, "A").Value ' S2.Cells(R, "A").Value = Format("2019/01/05", "yyyy") ' S2.Cells(R, "A").Value = Format(ws.Cells(S2.Cells(R, "A").Value, "yyyy")) End If '"WK"列の値を表示させる If S2.Cells(R, "F").Text = ws.Cells(iRowI, "A").Text Then S2.Cells(R, "B").Value = ws.Cells(iRowI, "C").Value End If Next R Next End Sub
2019/03/14 上手くいかないので引き続き検証中(備忘録も兼ねてソースを残します)
検証①
'「値一致」シートの値を、「値の元」シートのA列と比較して一致していたら If S2.Cells(R, "F").Text = ws.Cells(iRowI, "A").Text Then 'S2.Cells(R, "A").Value = ws.Cells(Rows.Count, "A") 'その行の値を転記する S2.Cells(R, "A").Value = ws.Cells(iRowI, "A").Value 'CStr 関数は、指定した値を文字列型 (String) に変換する S2.Cells(R, "A").Value = CStr(S2.Cells(R, "A").Value) ' S2.Cells(R, "A").Value = Format("2019/01/01", "yyyy") S2.Cells(2, 1).Value = Format("2019/01/01", "yyyy") '検証① ' Range("A2:A30").Value = Format("2019/01/01", "yyyy") '検証② End If
(コメント多く読みにくくてすみません)
この状態で実行すると、以下の画像のように抽出される。
参照先の設定を誤っているのか、A1のセルだけ表示がおかしいです。
元に戻しても、このA2の表示が修正されない。
引き続きこちらも修正・検証中。
検証②
'「値一致」シートの値を、「値の元」シートのA列と比較して一致していたら If S2.Cells(R, "F").Text = ws.Cells(iRowI, "A").Text Then 'S2.Cells(R, "A").Value = ws.Cells(Rows.Count, "A") 'その行の値を転記する S2.Cells(R, "A").Value = ws.Cells(iRowI, "A").Value 'CStr 関数は、指定した値を文字列型 (String) に変換する S2.Cells(R, "A").Value = CStr(S2.Cells(R, "A").Value) ' S2.Cells(R, "A").Value = Format("2019/01/01", "yyyy") ' S2.Cells(2, 1).Value = Format("2019/01/01", "yyyy") '検証① Range("A2:A30").Value = Format("2019/01/01", "yyyy") '検証② End If
この状態で実行すると、以下の画像のように抽出される。
検証③ 書式を文字列で設定しても「日付」で抽出されてしまう
'CStr 関数は、指定した値を文字列型 (String) に変換する S2.Cells(R, "A").Value = CStr(S2.Cells(R, "A").Value) '「値一致」シートの値を、「値の元」シートのA列と比較して一致していたら If S2.Cells(R, "F").Text = ws.Cells(iRowI, "A").Text Then 'S2.Cells(R, "A").Value = ws.Cells(Rows.Count, "A") 'その行の値を転記する S2.Cells(R, "A").Value = ws.Cells(iRowI, "A").Value ' S2.Cells(R, "A").Value = Format("2019/01/01", "yyyy") ' S2.Cells(2, 1).Value = Format("2019/01/01", "yyyy") '検証① ' Range("A2:A100").Value = Format("2019/01/01", "yyyy") '検証② End If
回答6件
あなたの回答
tips
プレビュー