質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

4回答

3856閲覧

エクセル VBA シフト表作成中

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2016/05/25 02:32

当日の出勤者のみ表示したいと考えています。

以下の図のようなシフト表を作成しています。
イメージ説明

2枚目の図は、私が理想とするイメージ図です。
●出勤者のみ、詰めて表示される。
●出勤者の出勤、退勤、休憩も同時に表示される
イメージ説明

今までは、関数で出勤者を抽出していました。
そのため、作業シートを2枚使用しています。

作業シートを使用せずにVBAで出来るようになれば理想通りです。
皆様の知恵をお借りしたいと考えています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ちょっと求められている動きが見えなくてアドバイスが難しいです。

やりたいこととしては、1枚目のイメージで入力されているデータをもとに2枚目のイメージの状態を作り出したい、ということでよかったですか?

そしてその際、2枚目の状態が1枚目のデータシートとは別シート(2枚目のシート)に出力されるのはいやだ、ということでしょうか?

投稿2016/05/25 05:08

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/05/25 05:16

やりたいこととしては、1枚目のイメージで入力されているデータをもとに2枚目のイメージの状態を作り出したい、ということでよかったですか? ・・・その通りです そしてその際、2枚目の状態が1枚目のデータシートとは別シート(2枚目のシート)に出力されるのはいやだ、ということでしょうか? ・・・別シートに出力されるのが理想です 説明不足ですみません。よろしくお願いします。
guest

0

ベストアンサー

基本的な部分のみVBAで書いてみました。

Dim src_ws As Worksheet Dim dst_ws As Worksheet Dim src_row As Long Dim dst_row As Long Dim dd As Long Set src_ws = Worksheets("Sheet1") Set dst_ws = Worksheets("Sheet2") src_row = 2 dst_row = 3 dd = 1 Do ' 名前がなければ終了 If src_ws.Cells(src_row, 1) = "" Then Exit Do ' 出勤が登録されているか If src_ws.Cells(src_row + 1, dd + 2) <> "" Then dst_ws.Cells(dst_row, 1) = src_ws.Cells(src_row, 1) ' 名前 src_ws.Cells(src_row + 1, dd + 2).Copy dst_ws.Cells(dst_row, 2) ' 出勤 src_ws.Cells(src_row + 2, dd + 2).Copy dst_ws.Cells(dst_row, 3) ' 退勤 src_ws.Cells(src_row + 3, dd + 2).Copy dst_ws.Cells(dst_row, 4) ' 休憩 dst_row = dst_row + 1 End If src_row = src_row + 4 Loop

このコードでは変数ddの値を対象の日付に見立てています。
dd = 2 にすれば、2日が対象になります。
これをベースに関数化したり、装飾を加えたりすれば、それなりになるかなと思います。

投稿2016/05/25 04:22

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/05/25 05:33

試してみました! sheet2が、セルの結合によりエラーになってしまいます。 何か解決策はありますでしょうか?
ttyp03

2016/05/25 05:45

Sheet2はまっさらな状態でやってますか?
jawa

2016/05/25 06:36

ttyp03さんの回答で既にいいところまで行ってそうですので、横から失礼します。 ``` src_ws.Cells(src_row + 1, dd + 2).Copy dst_ws.Cells(dst_row, 2) ``` でコピペしている部分を ``` dst_ws.Cells(dst_row, 2) = src_ws.Cells(src_row + 1, dd + 2) ``` のように値渡しにしてはどうでしょう?
ttyp03

2016/05/25 06:41

jawaさん 元々そうしてたんですが、時刻なので書式設定をするのが面倒で、コピーしています。 ここらへんは質問者さんが独自にカスタマイズいただければと思ってます。 Dai-2016さんがエラーになっているのは、おそらく期待するフォーマットで縦3列を結合した状態の枠を作って、その上で実行しているからではないかと推測してます。 提示したコードはあくまでもサンプルなので、そこまでは考えていなくて、1行1名で出力しています。
jawa

2016/05/25 07:01

ttyp03さん なるほど、そういうことでしたか。失礼しました。 コピー先がセル結合されているということは、既にコピー先にある程度の書式設定がされているのかもしれませんね。 それなら(コピー先の時刻セルには時刻形式の書式設定をしておいて)値渡しでいいのかも。 コピーしたうえでセル結合や書式設定をするなら相応の肉付けが必要になりますが、どちらにしても質問者さんが都合のいいようにカスタマイズ、ということですね。 Dai-2016さん、必要な情報はだいたい揃っていると思いますので頑張ってください^^
退会済みユーザー

退会済みユーザー

2016/05/25 07:37

分かりました! ありがとうございます!
guest

0

シート一枚でというのはデータのみを記述した表無しでという意味ですか?
例えば、上のシフト表も、下の理想の表も同じシートに書いてしまえばシートは1枚で済みますが、そういうことでは無いのですね?

データ無しだとVBAを使ってもどうしようも無いと思います。
VBAコード中に直接データを記入するなら可能ですが
そんなことをする位なら、データシートを別途用意したほうがましです。

投稿2016/05/25 02:55

編集2016/05/25 02:58
hirohiro

総合スコア2068

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/05/25 02:59

データシートを別途用意する場合、hirohiro様のベストだと考えられる関数またはVBAを教えていただけませんでしょうか?
hirohiro

2016/05/25 03:51

上のシフト表を元にピボットテーブルでできそうな気がしますが、手元にExcelが無いので実際どうかわかりません。参考サイトのリンクを書いておきます。 http://hamachan.info/excel/piboto.html VBAでやるなら、この辺りをうまく使って http://officetanaka.net/excel/vba/tips/tips124.htm ['A','8:00','17:00','1:00'], ['B','8:00','17:00','1:00'], ['C','8:00','17:00','1:00'], ['D','','',''], ['L','8:00','17:00','1:00'] このような配列を作って、末端配列の添え字1以降にデータのある配列だけを書き出すようにすれば良いと思います。 これでイメージが湧かなければ、動くコードを提示するしかなくなりますが、それは本サイトの主旨でも無いと思いますので控えます。
guest

0

VBA使わなくてもsumif関数使えば集計できます。
またはピポットテーブルも有効です。

あと、日付は項目として追加しとくとベターです。

投稿2016/05/25 02:39

編集2016/05/25 02:41
iwamoto_takaaki

総合スコア2883

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/05/25 02:45

申し訳ありません・・・ SUMIF関数の数式をご教示いただけませんでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問