こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

EXCEL VBA 指定した数字ごとに表示

・1から3までの数字をいれた場合に、9:00から11:00と表示する場合として以下のソースを書きます。(以前にこちらで教えていただきました)

・a = array()の部分について、直接書くのではなく、セルを参照することはできますでしょうか?

a = array("cell(1,1)", "cell(1,2)", "cell(1,3)")みたいなイメージです。

よろしくお願い致します。

option base 1
private sub Worksheet_Change(byval Target as excel.range)
 dim h as range
 dim a as variant
 a = array("9:0", "10:0", "11:0") ’1から3
 on error resume next

 for each h in application.intersect(target, range("D:D"))
  if cells(h.row, "F") <> "○" then
  if 1=< h.value and h.value <= 3 then  ’1から3
  if time >= timevalue(a(h.value)) then
   cells(h.row, "F") = a(h.value)
  end if
  end if
  end if
 next
end sub

投稿日時 - 2014-11-08 22:50:28

QNo.8818467

すぐに回答ほしいです

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

No.1です。
たびたびごめんなさい。
投稿後気づきました。

>a = array("cell(1,1)", "cell(1,2)", "cell(1,3)")みたいなイメージです。
の部分で勘違いしていました。
D列のChangeイベントですので、結局A1~C1セルの範囲の3個だけですね。

↓のコードに変更してください。

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("D:D")) Is Nothing Or Target.Count > 1 Then Exit Sub
With Target
If IsNumeric(.Value) And .Value > 0 And .Value <= 3 Then '←変更★
If Cells(.Row, "F") <> "○" Then
Cells(.Row, "F") = Cells(1, .Value) '←変更★
Cells(.Row, "F").NumberFormatLocal = "h:mm"
End If
End If
End With
End Sub

どうも失礼しました。m(_ _)m

投稿日時 - 2014-11-08 23:37:25

お礼

ありがとうございます。

よろしければ、こちらもごらんいただけませんでしょうか?
http://oshiete.goo.ne.jp/qa/8819779.html

お手数かけます・・

投稿日時 - 2014-11-10 00:49:12

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

>・a = array()の部分について、直接書くのではなく、セルを参照する

たとえばA1からA3の3つのセルを参照するには
a = application.transpose(range("A1:A3"))
とします。



「具体的に」どこのセルを参照したいのかによって、違う書き方が必要になります。まず回答した通りに作成し動作を確認してから、改めてあなたのエクセルの実際に合わせてマクロを自力で修正してください。
また教わった回答をそのままコピー貼り付けて質問するんじゃなく、あなたが「今実際に使ってるマクロ」をあなたのエクセルからコピーして、正確な情報提供をしてください。今後のご参考に。

投稿日時 - 2014-11-09 11:49:56

お礼

ありがとうございます。

投稿日時 - 2014-11-10 00:47:31

ANo.1

こんばんは!

>a = array("cell(1,1)", "cell(1,2)", "cell(1,3)")みたいなイメージです。
というコトですので・・・

基本的に他の回答者様がお書きになったコードに手を付けるのは好きではありませんので
別のコードにしてみました。
A列の1行目から何行あっても良いので「時刻」データが入っているとします。
シートモジュールです。

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("D:D")) Is Nothing Or Target.Count > 1 Then Exit Sub
With Target
If IsNumeric(.Value) And .Value > 0 And .Value <= Cells(Rows.Count, "A").End(xlUp).Row Then
If Cells(.Row, "F") <> "○" Then
Cells(.Row, "F") = Cells(.Value, "A")
Cells(.Row, "F").NumberFormatLocal = "h:mm"
End If
End If
End With
End Sub

こんなんではどうでしょうか?m(_ _)m

投稿日時 - 2014-11-08 23:31:31

あなたにオススメの質問