No.1
- 回答日時:
要するにSheet2に、作業名・日付・時間を入力した時点で、Sheet1の作業名(行)と日付(列)をクロスで検索して一致したセルに時間が自動入力されるようにしたいと察しました。
VBAを使った方法です。Sheet2のコードモジュールに貼り付けて試行してください。
'---ここから
Dim myRecord As Long
Dim myColmun As Integer
Private Sub Worksheet_Change(ByVal Target As Range)
'C列セルに変更があった場合のイベントマクロ
If Left(Target.Address, 2) = "$C" Then
'変更のあった行数の取得
myRecord = Range(Target.Address).Row
'変更のあった列数の取得
myColmun = Range(Target.Address).Column
'サブルーチン(データ転送)
Call Dat_Input
End If
End Sub
Sub Dat_Input() 'データ転送
Dim I As Integer
Dim J As Integer
'作業名が一致するまで検索
For I = 1 To Range(Sheets("Sheet1").Cells(Rows.Count, 1) _
.End(xlUp).Address).Row
If Cells(myRecord, 2).Value = Sheets("Sheet1") _
.Cells(I, 1).Value Then Exit For
Next I
'日付が一致するまで検索
For J = 1 To Range(Sheets("Sheet1").Cells(1, Columns.Count) _
.End(xlToLeft).Address).Column
If Cells(myRecord, 1).Value = Sheets("Sheet1") _
.Cells(1, J).Value Then Exit For
Next J
'一致するセルに書き込む
Sheets("Sheet1").Cells(I, J).Value = Cells(myRecord, myColmun)
End Sub
'---ここまで
ありがとうございます!
とりあえずできました!!
実はsheet2で、同じ日に同じ作業名が複数入ることもあるんです。
例:2行目に、8/1 あ 1:00
3行目に、8/1 あ 2:00
そういう場合、sheet1の8/1の「あ」のところに「3:00」と
表示されるようにしたいんですが、これはどうしたらいいんでしょう?
今のままだと最後に入れた「2:00」だけの表示になってしまいます。
よろしければまた教えてください・・・。
No.2
- 回答日時:
質問と似た処理を行ったことがありますので書いてみました。
シートの作り方ですが、入力や以下のマクロを簡単にするために次のように設定して下さい。
(1)Sheet1のA2から下に向かって作業名を入力しておきます。
入力した範囲に範囲名『mySagyo』を付けます。
(2)B1から右に向かって日付(1,2,3・・・31)を入れます。
日付でも数値でもかまいません。。
(3)時間を入れる範囲を時刻の表示形式にして、全体に『myData』の範囲名を付けます。
myDataの範囲は、B2:AF?? になると思われます。
(4)Sheet2のA1から表題として日付、作業名、時間を入れます。
(5)B列(作業名)を選んで、メニューからデータ→入力規制の設定タブで
入力値の種類を『リスト』、元の値を『=mySagyo』とします。
これで作業名は事前に登録したものから選択できます。ミスも減ります。
次にマクロ部分ですが、C列に入力したらSheet1に反映するようにとの要望ですが、いつも正確に入力できるとは限りませんし、入力処理では訂正・挿入・削除・消去やコピーを行ったりします。特に、消去やコピーに対応するのが難しかった記憶があります。
その処理に対応するために下記のマクロでは、Sheet1をActiveにしたら(見に行ったら)入力値から計算に行くことにしています。Excelは速い?!
シートの左上から詰めて作成しない場合は、日付を設定した行の数-1をmyRow = rg1.Row - 1 - 0の『0』の部分に入れてください。4行目に日付があると3をセットします。表の左に列を挿入しても影響はありません。
シート1のコードウインドウに貼り付けます。
Private Sub Worksheet_Activate()
Dim rg2 As Range 'Sheet2のセル(日付)
Dim rg1 As Range 'Sheet1のセル(作業名)
Dim myRow As Integer '出力セルの行
Dim myColumn As Integer '出力セルの列
Range("myData").ClearContents '出力範囲をクリア
With Worksheets("Sheet2")
'Sheet2のA列の入力値を順に調べる
For Each rg2 In .Range("A2:A" & .UsedRange.Rows.Count)
myColumn = Day(rg2.Value) '出力列
For Each rg1 In Range("mySagyo")
If rg2.Offset(0, 1) = rg1 Then
myRow = rg1.Row - 1 - 0: Exit For '出力行
End If
Next
Range("myData").Cells(myRow, myColumn) = rg2.Offset(0, 2) '時刻
Next
End With
End Sub
ありがとうございます!
VBAはまったくわからないのでこれを機会に勉強したいと思います。
それと、sheet2の作業名は私も入力規則のリストを使ってました。
でも違うシートからの参照ができないと思ってたので、わざわざ
sheet1からコピーしてsheet2に貼り付けてリストを作ってました。
名前つければよかったんですね。目からウロコでした!
No.3
- 回答日時:
> 実はsheet2で、同じ日に同じ作業名が複数入ることもあるんです。
元あった時間に積算するということですね。
最初の回答の
'一致するセルに書き込む
Sheets("Sheet1").Cells(I, J).Value = Cells(myRecord, myColmun)
の部分を
'一致するセルに積算して書き込む
Sheets("Sheet1").Cells(I, J).Value = _
Sheets("Sheet1").Cells(I, J).Value + Cells(myRecord, myColmun)
とします。
No.4
- 回答日時:
時間を加算するには、最後の計算式を、
Range("myData").Cells(myRow, myColumn) = Range("myData").Cells(myRow, myColumn) + rg2.Offset(0, 2) '時刻
とします。24時間を越える可能性があれば、書式を[h]:mmにしておきます。
ありがとうございました!
時間を足すのは出来ました!
何度も申し訳ないんですが、sheet1に表示される時間が全て
1列ずれてしまいます。
sheet2で2日と入れたとしてもsheet1の1日のところに入ってしまいます。
どこを直していいのかわかりません。
すみませんがまた教えてください。
No.5
- 回答日時:
>sheet2で2日と入れたとしてもsheet1の1日のところに入ってしまいます。
行を操作しているところは、
myColumn = Day(rg2.Value) '出力列
ですが、これがずれるとしたら・・・
(3)時間を入れる範囲を時刻の表示形式にして、全体に『myData』の範囲名を付けます。
とお願いした『myData』の範囲の確認をして下さい。
この範囲の最初(左上セル)は日付の1日のセルの1つ下にします。1つ左にずれているような気がします。
この回答への補足
すみません、出来ました!
sheet2のA列に「1」とか「2」とか入れていたので
ずれるなーと思ってましたが、「8/1」という風に
入れたら正しくsheet1に入りました。
ただ、また別の問題が・・・。
「8/1 う 4:00」とsheet2に入れるとsheet1の正しい箇所に
表示はされるんですが、それと同時に「30」日の「う」の欄に
「0」が入ってしまいます。
何日を指定したとしても、かならず「30」日の該当行に「0」が
入るのです。sheet2で「30」日を指定すると今まで入っていた
「0」は消えるんですが。
また私のやり方が悪いのでしょうか?
何度も何度も済みません。
こういう表だったとして、
1 2 3
あ / / /
い / / /
う / / /
この「/」の部分が「myData」でいいんですよね?
間違ってます??
やはり1列ずれてしまいます。
sheet2で「1」日に入れるとsheet1の「31」日の列に入ってしまうんです。
範囲名が違うんでしょうか?
No.6ベストアンサー
- 回答日時:
Sheet2の日付は日付形式と決めて作っていました。
今回は数値としています。(入力を考えて)30日に0:00が表示されるのは、日付形式と決めていたことと、別のデータを入力して消去した場合、C列が時刻形式のため、UsedRangeがクリアされないためのようです。作った時には行を削除していたので気が付きませんでした。(UsedRangeを使ったのは、連続して入力していない場合の対応です)
下記マクロは、日付を数値入力にして未入力セルは読み飛ばしています。
Private Sub Worksheet_Activate()
Dim rg2 As Range 'Sheet2のセル(日付)
Dim rg1 As Range 'Sheet1のセル(作業名)
Dim myRow As Integer '出力セルの行
Dim myColumn As Integer '出力セルの列
Range("myData").ClearContents '出力範囲をクリア
With Worksheets("Sheet2")
'Sheet2のA列の入力値を順に調べる
For Each rg2 In .Range("A2:A" & .UsedRange.Rows.Count)
If rg2 <> "" Then '入力されている場合(***追加***)
myColumn = rg2.Value '出力列(***訂正*** 日付は数値入力)
For Each rg1 In Range("mySagyo")
If rg2.Offset(0, 1) = rg1 Then
myRow = rg1.Row - 1 - 0: Exit For '出力行
End If
Next
Range("myData").Cells(myRow, myColumn) = Range("myData").Cells(myRow, myColumn) + rg2.Offset(0, 2) '時刻
End If '(***追加***)
Next
End With
End Sub
色々とご迷惑をかけました。試してみて下さい。
こちらこそ、長い間色々とご迷惑をおかけしました。
無事に出来ました。
感謝してもしきれません。
本当にありがとうございました!!!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelで日報を自動で作成したい 売上管理シートに入力した売上データを、日報に自動反映させたいと考 1 2023/04/29 18:07
- Excel(エクセル) セルに特定の色が出た時だけ、式を発動させたい 4 2022/06/17 10:32
- Excel(エクセル) Excel 売上管理シートに入力した売上データを、日報に自動反映させたいと考えています。 売上管理シ 3 2023/04/29 18:08
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Excel(エクセル) Excelについて 1 2023/03/06 10:26
- Excel(エクセル) 添付写真上のExcelシートのように時間と曜日ごとに担当者が振り分けられているシートがあります。 例 1 2023/03/08 13:02
- Excel(エクセル) Excelシフト表 固定シフトの自動変換化 1 2022/04/14 16:10
- Excel(エクセル) Excelマクロの差分抽出のコードを教えていただきたいです。 2 2023/03/14 11:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの入力規則で2列表示したい
-
複数の文字列のいずれかが含ま...
-
別のセルに値が入力されたら、...
-
エクセルでセルの値分の個数の...
-
エクセルのsumifでかけ算してか...
-
エクセルで1列全部10倍したい
-
列の数字に100をかけたい
-
Excel上でのデータ数字が連番で...
-
【EXCEL】指定したセルの値を他...
-
エクセル セル内の文字数を超え...
-
数式が入ったセルを含めて、数...
-
Excelにて、セルをダブルクリッ...
-
Excelでセル同士のうちで、一部...
-
OpenOfficeでウインドウの固定...
-
エクセル:横長の表を改行して...
-
エクセルで2行まとめて並び替...
-
エクセル 関数(カウント?)...
-
エクセルで特定の文字を含むセ...
-
VBA 同一シート内での転記の仕方
-
「Exel」で、指定した列が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数の文字列のいずれかが含ま...
-
Excelの入力規則で2列表示したい
-
SUMに含まれる範囲から特定のセ...
-
数式が入ったセルを含めて、数...
-
Excel上でのデータ数字が連番で...
-
列の数字に100をかけたい
-
スペースとスペースの間の文字...
-
別のセルに値が入力されたら、...
-
エクセルで表示されている数字...
-
エクセルでセルの値分の個数の...
-
エクセル:横長の表を改行して...
-
[関数について]わかる方教えて...
-
エクセル関数に詳しい方教えて...
-
エクセルで、毎日の走行距離(...
-
エクセルのsumifでかけ算してか...
-
HYPERLINKとADDRESSとMATCHの組...
-
エクセルで曜日に応じた文字を...
-
入退社日より各月末の在籍者数...
-
エクセルで1列全部10倍したい
-
エクセルで小数を含む数値の抽出
おすすめ情報