重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

・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

A 回答 (3件)

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
    • good
    • 0
この回答へのお礼

ありがとうございます。

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

お手数かけます・・

お礼日時:2014/11/10 00:49

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



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



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

ありがとうございます。

お礼日時:2014/11/10 00:47

こんばんは!



>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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!