• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA指定した日付に条件が合えば文字を入れたい)

VBA指定した日付に条件が合えば文字を入れたい

このQ&Aのポイント
  • sheet1のB2:CB2セルまでの間で3/から始まる文字列が有り、B3:CB3セルまでの間で空白が有り、B4:CB4セルまでの間で平日という文字が有れば、sheet2のE5:AI5の位置に勤務という文字を入れるVBAのコードの修正をご教授願いたい。
  • 現在のコードでは、sheet1のB2セルに3/1があったときのみにはsheet2のE5セルに勤務という文字が入るが、実現したいのは、例えばsheet1のD2セルに3/1から始まっても、E5セルに勤務と反映させたい。変数kの値を変更しなくても、sheet1のB2:CB2のどれかに日付が入っても、sheet2のE5:AI5の位置に条件が合えば勤務という文字を入れたい。
  • 何度やってもうまくいかず、変数kの値をいちいち変更すると動作するが、変更させずに期待通りに動作させる方法がわからないため、VBAのコードを記載していただきたい。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.2

現状2行目はエクセルの日付データではなく普通の文字列だと思いますが、エクセルの日付データにすれば、以下のようになります。 For k = 2 To 80 If Month(ws1.Cells(2, k).Value) Like 3 Then 'もし、(sheet1)シートのB2:CB2セルまでの間で3月ならば If ws1.Cells(3, k).Value = "" Then 'もし、B3:CB3セルまでの間で""空白が有れば If ws1.Cells(4, k).Value = "平日" Then 'もし、B4:CB4セルまでの間で"平日"という文字が有れば ws2.Cells(5, "E").Offset(0, Day(ws1.Cells(2, k).Value) - 1).Value = "勤務" ' End If End If End If Next k

TaikooniQ1
質問者

お礼

ありがとうございます! 確かに2行目を日付データになっていれば 理想の動きができました。 ちなみに時間が有れば教えていただきたいのですが 2行目の日付は3/1(水)みたいに曜日も交じっている場合 は3/1に日付データに変換できるのでしょうか?

その他の回答 (2)

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.3

> 2行目の日付は3/1(水)みたいに曜日も交じっている場合 > は3/1に日付データに変換できるのでしょうか? 3/1と入力してから 書式設定の表示形式→ユーザー設定で m/d(aaa) として右にコピーしてください。 締め切られたのでサポート経由で回答しています。

TaikooniQ1
質問者

お礼

回答ありがとうございます。 一度試してみます! ありがとうございます!

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.1

以下で試してみてください。3/1の文字列を探してB列からの差を最後にオフセットします。 If ws1.Cells(2, k).Value Like "3/*" Then 'もし、(sheet1)シートのB2:CB2セルまでの間で3/から始まる文字列が有れば If ws1.Cells(2, k).Value Like "3/1*" Then mCol = ws1.Cells(2, "B").Column - ws1.Cells(2, k).Column End If If ws1.Cells(3, k).Value = "" Then 'もし、B3:CB3セルまでの間で""空白が有れば If ws1.Cells(4, k).Value = "平日" Then 'もし、B4:CB4セルまでの間で"平日"という文字が有れば ws2.Cells(5, k + 3).Offset(0, mCol).Value = "勤務" ' End If End If End If

関連するQ&A