Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1227 / 13645 ツリー ←次へ | 前へ→

【75575】【VBA】該当欄にコピー みつ 14/5/21(水) 13:26 質問[未読]
【75579】Re:【VBA】該当欄にコピー kanabun 14/5/21(水) 17:29 発言[未読]
【75581】Re:【VBA】該当欄にコピー みつ 14/5/21(水) 17:41 お礼[未読]

【75575】【VBA】該当欄にコピー
質問  みつ  - 14/5/21(水) 13:26 -

引用なし
パスワード
   VBAで質問です。

E5に『開始日』・・・5/2
H5に『品名』
I5以降は5月のカレンダー・・・5/1(I5) 5/2(J5) 5/3(K5)...5/31(AM5)
※日付はI2に入っているので、I5以降は実際は空白です。
という表があります。

E5に5/2といれ
H5の『品名』に文字(例えばリンゴ)を入れると
開始日の5/2に当てはまるセル(J5)にリンゴと入るようにしたいのですが‥


関数で=IF($E5=I$2,$H5,"")のように入力することはわかったのですが
これをVBAでしたいのです。

該当セルに関数をいれてしまうと、セル幅が狭いため、すべての文字が表示されなくなるためです。

H5の品名に文字を入れると開始日の5/2に当てはまるセル(J5)にリンゴとインプットされる感じです。
(I5:AM137まで同じように表示したいです)

どうぞ、ご教示くださいませ。
お願い致します。

【75579】Re:【VBA】該当欄にコピー
発言  kanabun  - 14/5/21(水) 17:29 -

引用なし
パスワード
   ▼みつ さん:

>E5に5/2といれ
>H5の『品名』に文字(例えばリンゴ)を入れると
>開始日の5/2に当てはまるセル(J5)にリンゴと入るようにしたいのですが‥
>
ワークシートのChangeイベントを利用してみては?
以下のコードを該当ワークシートのシートモジュールにコピーし、
E列に「開始日」をいれ、H列に「品名」を入れると、
下のコードが実行されます。

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column <> 8 Then Exit Sub
  Dim ss As String
  Dim dt As Variant
  Dim dt1 As Date, diff As Long
  ss = Target.Value
  If Len(ss) < 1 Then Exit Sub
  dt = Target.Offset(, -3).Value
  If IsEmpty(dt) Then Exit Sub
  
  dt1 = [I2].Value
  diff = dt - dt1 + 1
  Application.EnableEvents = 0
  Target.Offset(, diff).Value = ss
  Application.EnableEvents = 1
End Sub

上のコードで
最初の行に
>  If Target.Column <> 8 Then Exit Sub
と書いてあります。
Target は変化のあったセルのことです。
上の一行は、
セルに入力があったもののうち 列がH列でなければ終了せよ、
と言っています。逆にいえば、H列への入力のときだけ、
それ以降のコードが実行されるということです。
[I2]セルの日付をみて、それとTarget行のE列の日付の差分だけ列を右に移動
したセルに、Targetセルの値をコピーします。

【75581】Re:【VBA】該当欄にコピー
お礼  みつ  - 14/5/21(水) 17:41 -

引用なし
パスワード
   ありがとうございました。
説明もわかりやすく、また一つ勉強になりました。

本当にありがとうございました。


▼kanabun さん:
>▼みつ さん:
>
>>E5に5/2といれ
>>H5の『品名』に文字(例えばリンゴ)を入れると
>>開始日の5/2に当てはまるセル(J5)にリンゴと入るようにしたいのですが‥
>>
>ワークシートのChangeイベントを利用してみては?
>以下のコードを該当ワークシートのシートモジュールにコピーし、
>E列に「開始日」をいれ、H列に「品名」を入れると、
>下のコードが実行されます。
>
>Private Sub Worksheet_Change(ByVal Target As Range)
>  If Target.Column <> 8 Then Exit Sub
>  Dim ss As String
>  Dim dt As Variant
>  Dim dt1 As Date, diff As Long
>  ss = Target.Value
>  If Len(ss) < 1 Then Exit Sub
>  dt = Target.Offset(, -3).Value
>  If IsEmpty(dt) Then Exit Sub
>  
>  dt1 = [I2].Value
>  diff = dt - dt1 + 1
>  Application.EnableEvents = 0
>  Target.Offset(, diff).Value = ss
>  Application.EnableEvents = 1
>End Sub
>
>上のコードで
>最初の行に
>>  If Target.Column <> 8 Then Exit Sub
>と書いてあります。
>Target は変化のあったセルのことです。
>上の一行は、
>セルに入力があったもののうち 列がH列でなければ終了せよ、
>と言っています。逆にいえば、H列への入力のときだけ、
>それ以降のコードが実行されるということです。
>[I2]セルの日付をみて、それとTarget行のE列の日付の差分だけ列を右に移動
>したセルに、Targetセルの値をコピーします。

1227 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free