エクセルで毎月のシフト表を作っています。
1.「名前」「開始時刻」「終了時刻」などを入力できるようにしたカレンダーのような表を作成。
2.入力データから、時間数を名前別に集計する。
以上の2つのマクロを作りました。
ここで、1.のカレンダーの表の「名前」は職員の名前だけ入れば良いので、名前の入力欄のセルに入ったら、リストボックスのようなものから選択できるようにできたら使い勝手が良いかな?と思います。
入力ミスを防ぐことと、タイプの手間を省く目的ですが、そういうことってできますか?
何かいい方法がありましたらお教えください。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

<A1に{リスト入力}を設定する>



1、[データ(D)]-[入力規則(L)]で「データの入力規則」ダイアログを開く。
2、[入力値の種類(A)]で[リスト]を選択。
3、[元の値(S)]に職員名を入力する。

黒田 恵子1,黒田 恵子2,黒田 恵子3,黒田 恵子4,黒田 恵子5,黒田 恵子6,黒田 恵子7,黒田 恵子8,黒田 恵子9,黒田 恵子A,黒田 恵子B,黒田 恵子C,黒田 恵子D,黒田 恵子E,黒田 恵子F,黒田 恵子G,黒田 恵子H,黒田 恵子I,黒田 恵子J,黒田 恵子K,黒田 恵子L,黒田 恵子M,黒田 恵子N,黒田 恵子O

※予め、メモ帳でリストを作成してコピー&ペーストが楽かも知れません。
    • good
    • 0
この回答へのお礼

ありがとうございます。
うまくいきました。感激です。
シートに職員名をユーザーが入れ替えできるようにして、そこからリストを作成したいと思っています。

お礼日時:2006/02/24 21:08

例:


列Bに「子丑寅卯辰巳」が有ったとします。
セルにしたい個所をA1に選びます。
「データ」「入力規則」「設定」タブにおいて
入力値の種類=「リスト」を選択
「元の値」の左の表みたいなボタンをクリック
該当列を選択します。
後はリストになったセルをコピーすればよいです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
うまくいきました。感激です。
これで便利なソフトになりました。

お礼日時:2006/02/24 21:06

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

このQ&Aと関連する良く見られている質問

Q.NET .ADO でのSQL文でEXCELファイルのUPDATEで時刻の列に文字があると時刻が正しく入力されません。

文字が含まれない列の時刻は正しく更新されるのですが、文字が含まれる列は通常は右寄せのはずが左寄せになってしまい、表示形式は「h:mm」なのですがセルを選択すると上のバー?に出るはずの秒が出ません・・・書式設定は一応、時刻になっているのですが・・・たぶん文字列になってしまっているような感じです。

EXCELファイルの形式は下記のようになっています。書式設定は、A列はすべて日付、BとC列はすべて時刻になっています。問題の「休」のセルも時刻のままです。
........A.........B........C.....
1......日付......出勤.....退勤
2....2010/1/1....7:54....18:24
3....2010/1/2....休........
4....2010/1/3....7:48....18:28
5....2010/1/4....7:56....18:33

日付と退勤の列はうまく更新できるのですが、B列の出勤列に「休」と書かれている行があるとB列の更新がうまくいきません。

ソースは、下記のようになっています。
con.ConnectionString = _
"Provider=Microsoft.ACE.OLEDB.12.0; " & _
"Data Source=" & _
"C:\DATE\タイムカード.xls;" & _
"Extended Properties=""Excel 12.0;HDR=YES;"""
Dim cmd As New OleDbCommand()
cmd.Connection = con
con.Open()
cmd.CommandText = "UPDATE [Sheet1$] SET 日付 = @hiduke, 出勤 = @jikoku, 退勤 = @nijikoku WHERE 日付 = 40203"
cmd.Parameters.Add("@hiduke", OleDbType.Variant).SourceColumn = "日付"
cmd.Parameters("@hiduke").Value = Format(DateValue("2010/1/21"), "yyyy/MM/dd")
cmd.Parameters.Add("@jikoku", OleDbType.Variant).SourceColumn = "出勤"
cmd.Parameters("@jikoku").Value = Format(TimeValue("2:40"), "H:mm")
cmd.Parameters.Add("@nijikoku", OleDbType.VarChar).SourceColumn = "退勤"
cmd.Parameters("@nijikoku").Value = Format(TimeValue("15:2"), "H:mm")
cmd.ExecuteNonQuery()

.NET自体初めてなのでおかしなところもあると思いますが、色々試しても結局どうにもならず現在は上記のような状態です。
上記の出勤と退勤のOleDbTypeが違いますが色々試しましたがすべてダメでした・・・
試したのは下記になります
Variant
VarChar
VarChar, 255
Char
DBTime
どのようにすればうまくいくでしょうか?

文字が含まれない列の時刻は正しく更新されるのですが、文字が含まれる列は通常は右寄せのはずが左寄せになってしまい、表示形式は「h:mm」なのですがセルを選択すると上のバー?に出るはずの秒が出ません・・・書式設定は一応、時刻になっているのですが・・・たぶん文字列になってしまっているような感じです。

EXCELファイルの形式は下記のようになっています。書式設定は、A列はすべて日付、BとC列はすべて時刻になっています。問題の「休」のセルも時刻のままです。
........A.........B........C.....
...続きを読む

Aベストアンサー

#1です。
#10にも書いてありますが

>>説明不足で申し訳ないのですが、エクセルファイルの時刻を入力する列の書式設定は文字列でなく時刻>>にしたいのです。この列の書式設定をすべて文字列にしてしまうなら、特に変更なく私のソースでも問>>題なく更新できてしまいます・・・

SQLサーバーやACCESSのフィールドも当然、文字型 NvarChar(10) とか あります。

それを 時刻型という型はありませんので日付時刻型(DateTime)にしなければなりません。

時刻の場合 1900/01/01 13:52:00.000 というような形になります。

これを無視して 「休」 などの文字を日付時刻型 に書き込むと エラーになります。

だから すべて文字列で扱うしかないのです。


#10 で説明した 出勤(時)と出勤(分)入力規則のリストで入力させて VB.NET での
Excelシート入力時におけるSQLで 合体させてあげれば大丈夫です。

(IIF(ISNUMERIC(TB.出勤_時),TB.出勤_時 & &':' & TB.出勤_分,TB.出勤_時)) as 出勤

というよな構文です テストしてませんのでデバッグしてください

もし、文字型がどうしてもいやだというならExcelで「休」は別のセルに分けて記入
できるようにしてください。
DBの出力項目も「休」(Nvarchar(4))と出勤(DtaeTime型) としてください。

#1です。
#10にも書いてありますが

>>説明不足で申し訳ないのですが、エクセルファイルの時刻を入力する列の書式設定は文字列でなく時刻>>にしたいのです。この列の書式設定をすべて文字列にしてしまうなら、特に変更なく私のソースでも問>>題なく更新できてしまいます・・・

SQLサーバーやACCESSのフィールドも当然、文字型 NvarChar(10) とか あります。

それを 時刻型という型はありませんので日付時刻型(DateTime)にしなければなりません。

時刻の場合 1900/01/01 13:52:00.000...続きを読む

QVB .netにて現在時刻+1時間後の時刻を取得したい

VB .netにて現在時刻は DateTime.Now で取得できるのは確認しましたが、現在時刻+1時間後または現在時刻-1時間後のように取得した時刻からの指定経過時刻を取得したいのですが、方法がわかりません。
どなたかご存知の方、よろしくお願い致します。

Aベストアンサー

[1時間後の取得]
DateTime.Now.AddHour(1)
[1時間前の取得]
DateTime.Now.AddHour(-1)

っという感じで、あとは AddHour を AddMinute などに変更すればいろいろ応用できますよ。

Qエクセルのシート上に、複数のグラフ表を作り、各グラフ表に対応したグラフ

エクセルのシート上に、複数のグラフ表を作り、各グラフ表に対応したグラフを表示するマクロを作成しました。
エクセル2003のPCで作成したのですが、作成したPCでは良かったのですが、同じファイルをエクセル2010の端末に持ってきて表示したら問題が発生しました。対応方法を教えて下さい。

グラフの項目フィールドをP5:S5に置きます。
この下にグラフデータだけが追加されています。(1番目グラフデータP6:S12、2番目P13:S19、、、)
1番目のグラフはセルI6、2番目はI13に「グラフ表示」と記載し、それぞれのセルをクリックするとその都度マクロが起動してグラフが表示されます。クリックしたセルの右隣のセルがグラフの左上になる設定です。
ところが、エクセル2010では、最初に表示するグラフは意図した位置に表示されるのですが、次のグラフを表示すると、最初のグラフが次のグラフを表示すべき位置に移動し、次からのグラフはM16辺りを左上にして次々に重なってしまします。
対処策をご教示下さい。

Aベストアンサー

2010では、Charts.Add からLocationメソッドでシート上にグラフを移動した場合、
Shape名称が全て『グラフ 1』になってしまうようです。
なので最低限の修正なら
>With ActiveSheet.Shapes(GName)
ここの、名前で指定しているところをインデックス指定に変えれば良いです。
With ActiveSheet.Shapes(ActiveSheet.Shapes.Count)



以下は、参考までに回答#1と同じ書き方で書いた場合。
'SheetModule
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If ActiveCell.Value = "グラフ表示" Then
    Call グラフ(ActiveCell)
  End If
End Sub

Private Sub グラフ(ByVal Target As Range)
  Dim c   As ChartObject
  Dim r   As Range
  Dim source As Range

  Set r = Target.Offset(, 1).Resize(7, 6)
  Set source = Union(Me.Range("P5:S5"), _
            Target.Offset(, 7).Resize(7, 4))
  For Each c In Me.ChartObjects
    If Not Intersect(r, c.TopLeftCell) Is Nothing Then
      Exit For
    End If
  Next
  If c Is Nothing Then
    Set c = Me.ChartObjects.Add(r.Left, r.Top, _
                  r.Width, r.Height)
  End If
  With c.Chart
    .ChartType = xlColumnClustered
    .SetSourceData source, xlRows
    With .SeriesCollection(7)
      .ChartType = xlLineMarkers
      .AxisGroup = 2
    End With
    With .SeriesCollection(6)
      .ChartType = xlLineMarkers
      .AxisGroup = 2
    End With
    .Axes(xlValue, xlSecondary).DisplayUnit = xlMillions
    .PlotArea.Interior.ColorIndex = xlNone
  End With

  Set c = Nothing
  Set r = Nothing
  Set source = Nothing
End Sub
こんな感じになります。

#ちなみに回答#1は該当セルをダブルクリックすると実行されるイベントです。

2010では、Charts.Add からLocationメソッドでシート上にグラフを移動した場合、
Shape名称が全て『グラフ 1』になってしまうようです。
なので最低限の修正なら
>With ActiveSheet.Shapes(GName)
ここの、名前で指定しているところをインデックス指定に変えれば良いです。
With ActiveSheet.Shapes(ActiveSheet.Shapes.Count)



以下は、参考までに回答#1と同じ書き方で書いた場合。
'SheetModule
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If ActiveCell.Value = "グ...続きを読む

QVB6で時刻の範囲に入っているか調べたいのですが。

nenonenoです。こんばんわ。
VBで時間Aから時間Bの範囲に時間Cが入っているかを調べる関数を作ろうとしていますが、初心者なので混乱しています。
Now,DateDiff、DateSerialを使えばよさそうな事は分かったのですが、、、具体的なアルゴリズムが思い浮かびません。
時間A(7:00)、時間B(18:00)、時間C(今)の場合は問題ないのですが、時間Aが(21:00)、時間Bが(7:00)、時間C(今)になった時(つまり、日がまたがった場合)にお手上げです。

varNow = Now ' Now 関数は現在の日付と時刻を返します。

' 開始時刻と終了時刻
varFrom = DateSerial(Year(varNow), Month(varNow), Day(varNow)) + TimeSerial(intFromHour, intFromMin, 0) ' 開始時刻
varTo = DateSerial(Year(varNow), Month(varNow), Day(varNow)) + TimeSerial(intToHour, intToMin, 0) ' 終了時刻

ここまでは書いたのですが、どう判定させて計算したらよいのでしょうか?
なにか、ヒントだけでも教えていただけるとありがたいです。

よろしくお願いします。

nenonenoです。こんばんわ。
VBで時間Aから時間Bの範囲に時間Cが入っているかを調べる関数を作ろうとしていますが、初心者なので混乱しています。
Now,DateDiff、DateSerialを使えばよさそうな事は分かったのですが、、、具体的なアルゴリズムが思い浮かびません。
時間A(7:00)、時間B(18:00)、時間C(今)の場合は問題ないのですが、時間Aが(21:00)、時間Bが(7:00)、時間C(今)になった時(つまり、日がまたがった場合)にお手上げです。

varNow = Now ' Now 関数は現在の日付と時刻を返します。
...続きを読む

Aベストアンサー

再びNo.1です

判定を2つ通さないといけないでしょうね
当日分でダメなときは、前日分もチェックしてみる

varNow = Now ' Now 関数は現在の日付と時刻を返します。

' 開始時刻と終了時刻
varFrom = DateSerial(Year(varNow), Month(varNow), Day(varNow)) + TimeSerial(intFromHour, intFromMin, 0) ' 開始時刻
varTo = DateSerial(Year(varNow), Month(varNow), Day(varNow)) + TimeSerial(intToHour, intToMin, 0) ' 終了時刻

' 開始時刻と終了時刻の整合性
If varFrom >= varTo Then varTo = varTo + 1

' 判定(1)
If varNow >= varFrom And varNow <= varTo Then
MsgBox "OK!"
Else
' 判定(2)
varFrom = varFrom - 1
varTo = varTo - 1
If varNow >= varFrom And varNow <= varTo Then
MsgBox "OK!"
Else
MsgBox "NG!"
End If
End If

再びNo.1です

判定を2つ通さないといけないでしょうね
当日分でダメなときは、前日分もチェックしてみる

varNow = Now ' Now 関数は現在の日付と時刻を返します。

' 開始時刻と終了時刻
varFrom = DateSerial(Year(varNow), Month(varNow), Day(varNow)) + TimeSerial(intFromHour, intFromMin, 0) ' 開始時刻
varTo = DateSerial(Year(varNow), Month(varNow), Day(varNow)) + TimeSerial(intToHour, intToMin, 0) ' 終了時刻

' 開始時刻と終了時刻の整合性
If...続きを読む

Qカレンダーコントロールからセルとシート名に日付を入力

エクセルVBAコードについてですが、マクロを実行すると、カレンダーコントロールが表示され、選択したカレンダーの日付をクリックすると、任意に指定したセルとシート名にその日付を表示させたいのですが、どのようなコードを書けばよいのか教えてください(><)
ちなみに、今はインプットボックスから日付を入力する方法をとっていますが、都度「2008年○月○日」と入力しなくてはいけませんので、効率が悪く困っています。
どうぞ宜しくお願い致します。

Aベストアンサー

カレンダーコントロールの種類によるのかな?

カレンダーコントロール色々
http://www.h3.dion.ne.jp/~sakatsu/Excel_Tips06.htm

カレンダーコントロール色々(MSCAL 利用例)
http://www.h3.dion.ne.jp/~sakatsu/Excel_Tips06_2.htm

ご参考になれば。


人気Q&Aランキング

おすすめ情報