• ベストアンサー

エクセルでできますか?? -管理表作成。

こんにちは。エクセルについてよろしくお願いします! このたびちょっとした管理表を作成するように言われたのですが、 方法をどうしたらいいかまったくわかりません。 やりたいことは、たとえばお店などのポスティング作業で、 いくつもに分けられた地区を管理するとき、 この地区は何年何月何日から何日までかけてポスティングをした、 という感じで入力していき、古いものが順次表示されるようにしたいんです。 次回まわる地区の候補はここ、見たいな。いくつか上げられるといいです。 あと前回ポスティングしてから2ヶ月っていたらここはまだ、 みたいな表示も出るようになると助かるんですが・・・。 また網羅率もだしたいですが。。。 これらの作業が出来るようにするには簡単にはいかないですよね?? もしあればお勧めのサイトなどあれば勉強したいと思うのですが・・・。 よろしくお願いします! ---使用中のエクセルは2002です。

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

  • ベストアンサー
  • macchan1
  • ベストアンサー率38% (52/136)
回答No.6

>index関数で最新の日付を特定のセルに返し、すべての地区で適用して、その結果を同列に置き、別シートにそれをソートして表示させよう、と考えたんですが・・・、いかがでしょうか?? エクセルをデータベースとして使用する場合には、同じ行内に複数のデータを入力するのはお奨めできないのですが、もし現在のままのデータを使いたいなら以下のような感じのシートにすると良いと思います。 A列を最新の日付を計算させるセルにし(A列を選択して右クリックし「挿入」を選択)、この列を基準にソートするのが良いと思います。 A列に入力する数式は、A2セルなら「=MAX(B2:Z2)」とし、セルの書式を日付にし下方向にオートフィル(コピー)します。 次に、例えば、最終ポスティング日から60日以上経過したセルを赤く表示したいなら、以下のように条件付書式を設定します。 A列全体を選択し(画面上部のAの部分をクリック)、「データ」「条件付書式」で「数式が」にして以下の式を入力し、「書式」ボタンを押しパターンを「赤」などにしてみてください。 =AND(TODAY()-A1>60,A1<>"")

teneighty
質問者

お礼

何度もありがとうございます。 >エクセルをデータベースとして使用する場合には、同じ行内に複数のデータを入力するのはお奨めできない どうやらエクセルの基本から学ぶ必要がありそうです。 今まですべて独学だったもので・・・。 でもわかりやすいアドバイスのおかげで今回の表はどうにかなりそうな感じです。 もう少しスキルアップして、わからない点だけを質問できるぐらいにはなりたいと思いました。 ありがとうございました。

その他の回答 (6)

  • at121
  • ベストアンサー率41% (85/206)
回答No.7

シート"入力"   地区 年回数 巡回始日 巡回終日 前回始 前回終 AA区 BB区 シート"候補" 候補地区 前回最終日 前回所要日数 を用意 使い方 シート"入力" の a列 に地区名入力 シート"入力" の c列 d列 選択で 日付入力補助 シート"候補" に切り替えると 候補 ( 制限日数 = 60 )よりも古いものを コピー 挿入 シート"入力" の 制限日数 = 60 よりも古いものを 順次 右へシフト 前回始 前回終 前前回始 前前回終 ・・・ と横に過去の経緯をシフトしていく シート"入力" では 制限日数 = 60 よりも古いもの は  回始日 回終日 の項目が 空白になるので アクションすべき地区がわかる。 シート"入力" で 新しい日付が入ると シート"候補" から削除。  ※ 色分けはしていません。 デバッグ中 止まったときは Application.EnableEvents = True   マクロの VBエディタを開き 表示のプロジェクトエクスプローラの ↓シート2 (入力) のモジュールに貼り付け↓ Private Sub Worksheet_Deactivate() 制限日数 = 60 期限切れ = 0 For Each セル In Range("a2:a" & Cells.SpecialCells(xlLastCell).Row) 期限切れフラグ = False If Not IsEmpty(セル) Then If IsDate(セル.Offset(0, 3)) Then If (セル.Offset(0, 3)) < Now - 制限日数 Then Call データシフト(セル.Offset(0, 2)) 期限切れフラグ = True 期限切れ = 期限切れ + 1 If IsDate(セル.Offset(0, 4)) Then 前回所要日数 = CStr(セル.Offset(0, 5) - セル.Offset(0, 4)) Else 前回所要日数 = "" End If Call 次回候補に候補地区追加(セル.Value, セル.Offset(0, 4).Value, 前回所要日数) End If ElseIf IsEmpty(セル.Offset(0, 2)) And IsEmpty(セル.Offset(0, 4)) Then 期限切れフラグ = True 期限切れ = 期限切れ + 1 Call 次回候補に候補地区追加(セル.Value, "", "初めて?") ElseIf IsEmpty(セル.Offset(0, 2)) And IsDate(セル.Offset(0, 4)) Then 期限切れフラグ = True 期限切れ = 期限切れ + 1 If IsDate(セル.Offset(0, 5)) Then 前回所要日数 = CStr(セル.Offset(0, 5) - セル.Offset(0, 4)) Else 前回所要日数 = "" End If Call 次回候補に候補地区追加(セル.Value, セル.Offset(0, 4).Value, 前回所要日数) End If If Not 期限切れフラグ Then Call 次回候補から地区削除(セル.Value) End If End If Next If 0 < 期限切れ Then MsgBox "期限切れが" & 期限切れ & " 件あります。" & vbCrLf & " 早く回れよ。" End If End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not IsEmpty(Cells(Target.Row, 1)) Then If 1 < Target.Row And Target.Column = 3 Then If IsEmpty(Target) Then 入力値 = InputBox(Cells(Target.Row, 1) & " 地区の 巡回 開始日?", " 開始 ", Format(Now, "YYYY/MM/DD")) If Not IsEmpty(入力値) Then Target = 入力値 End If ElseIf Not IsEmpty(Target) And Not IsEmpty(Target.Offset(0, 1)) Then 入力値 = MsgBox("重点地区か? 有効? ", vbOKCancel, "注意") If 入力値 = vbOK Then Call データシフト(Target) 入力値 = InputBox(Cells(Target.Row, 1) & " 地区の 巡回 開始日?", " 開始 ", Format(Now, "YYYY/MM/DD")) If Not IsEmpty(入力値) Then Target = 入力値 End If End If End If ElseIf 1 < Target.Row And Target.Column = 4 Then If Not IsEmpty(Target.Offset(0, -1)) Then 入力値 = InputBox(Cells(Target.Row, 1) & " 地区の 巡回 完了日?", " 完了 ", Format(Now, "YYYY/MM/DD")) If Not IsEmpty(入力値) Then Target = 入力値 Call 年回数カウント(Target) End If Else MsgBox "開始日を先に入れてケロ m(__)m", , "注意" End If End If End If End Sub Sub データシフト(ターゲットセル As Range) Application.EnableEvents = False Set オリジナル = Range(ターゲットセル, ターゲットセル.Offset(0, 1)) オリジナル.Insert (xlShiftToRight) Set ターゲットセル = ターゲットセル.Offset(0, -2) Application.EnableEvents = True End Sub Sub 年回数カウント(ターゲットセル As Range) 年内回数 = 0 For Each セル In Range(ターゲットセル.Offset(0, -1), ターゲットセル.Offset(0, -1).End(xlToRight)) If IsDate(セル) Then If Now - 365 < セル Then 年内回数 = 年内回数 + 1 End If End If Next Cells(ターゲットセル.Row, 2) = Round(年内回数 / 2, 1) End Sub Sub 次回候補から地区削除(候補地区) If Not IsEmpty(候補地区) And Not Sheets("候補").Cells.Find(候補地区) Is Nothing Then Sheets("候補").Rows(Sheets("候補").Cells.Find(候補地区).Row).Delete End If End Sub Sub 次回候補に候補地区追加(候補地区, 前回最終日, 前回所要日数) If Sheets("候補").Cells.Find(候補地区) Is Nothing Then 記録行 = Sheets("候補").Cells(65536, 1).End(xlUp).Offset(1, 0).Row Sheets("候補").Range("a" & (記録行)) = 候補地区 Sheets("候補").Range("b" & (記録行)) = 前回最終日 Sheets("候補").Range("c" & (記録行)) = 前回所要日数 End If End Sub

teneighty
質問者

お礼

ありがとうございます。 こちらはマクロを使った方法、ということですね。 今回はマクロを使わずにどうにかいけそうな感じなので、 またもう少しエクセルを使えるようになりましたら、 マクロも勉強したいと思います。 わざわざ長文ご用意いただき、ありがとうございました。

  • subri
  • ベストアンサー率28% (16/56)
回答No.5

補足を読みました。 > 何をする関数なんでしょうか? > MINてことは最小値?? どこに何が入力されていて、ということや、今ひとつ質問がよく理解できていなかったので、 一応、同じ地域名の中で、B列の一番小さい値(日付ですが)を出す数式です。 あ という地域名の中の、B列で一番古い日付を数式で出しています。

teneighty
質問者

お礼

何度もありがとうございます! ほんとに文章能力なくてすいませんです。お恥ずかしいw 理解できました。そういうことだったんですね。 下でも書きましたが、一度、作ってみようと思います。 そのあとまたわからないところを質問しようと思います。 今のままだと文章であらわすのが一苦労なので・・・。 有難うございました!

  • macchan1
  • ベストアンサー率38% (52/136)
回答No.4

>あと問題は、日にちがたってくると、だんだん回る回数に違いが出てきて、日付を入力するセルの列もしくは行がまちまちになってしまう エクセルをデータベースとして使用する場合には、この入力方法は絶対やめるべきです。 すなわち、同じ列に同じ系統のデータ(日付けなら開始日や終了日)を入れる必要があります。例えば、2回目のデータは新しい行に会社名などの項目を含めて入力する必要があります。 >この地区は何年何月何日から何日までかけてポスティングをした、という感じで入力していき、古いものが順次表示されるようにしたいんです。 上記のようなデータ入力形式にしてあれば、基本的には、オートフィルタと並べ替えをしたデータを別シートに貼り付けるなどの操作をマクロ(マクロの記録)を利用して、一覧表にするのが良いと思います。 マクロを使いたくない場合は、少し複雑になりますが関数でも対応することができます。 具体的な表のレイアウトを示していただければ関数で表示させる式を提示できると思います。 あと、各地区ごとの最終ポスティング日の一覧なら(各地区ごとの一番新しい日にちだけを表示)、ピボットテーブル(データフィールドに最大値)を利用して簡単に作成することができます。 >あと前回ポスティングしてから2ヶ月っていたらここはまだ、みたいな表示も出るようになると助かるんですが 最終ポスティング日から一定期間が経過しているデータ行を目立つようにセルを赤色表示する場合には条件付書式を利用します(なお、この場合は同じ地区の過去のデータの行には着色しないように設定する必要があるため少し数式が複雑になります)。 具体的に表示したい条件とセル位置を提示していただければ、数式を提示できます。 今回のご質問では多くのことをまとめて質問する結果となっていますので、ご自分である程度対応してみて、分からないことを個別の質問に分けて再質問されると良いと思います。

teneighty
質問者

補足

丁寧に有難うございます。 >今回のご質問では多くのことをまとめて質問する結果となっていますので、ご自分である程度対応してみて、分からないことを個別の質問に分けて再質問されると良いと思います。 そう思いました。それで一度作ってみたんですが・・・、 >あと問題は、日にちがたってくると、だんだん回る回数に違いが出てきて、日付を入力するセルの列もしくは行がまちまちになってしまう に関しては、index関数で最新の日付を特定のセルに返し、 すべての地区で適用して、その結果を同列に置き、 別シートにそれをソートして表示させよう、と考えたんですが・・・、 いかがでしょうか?? マクロも少し勉強してみようと思います。自分しか使いませんし。 後の部分はまだまだ先のことになりそうですねw 未熟です。とりあえず形だけでも作ってみたいと思います。 よろしくお願いします。

  • subri
  • ベストアンサー率28% (16/56)
回答No.3

2ヶ月経っていたとの判断の基準はポスティングを始めた日でしょうか? 上記はあまり関係ないですが。 今ひとつ状況がよくわからないので書いてみました。 さて、 A1から右に 地域 日付 A2から下に地域名 あ い い え 等 B1から下に日付 C1から下に あ い う え D1に =MIN(IF($A$2:$A$10=C1,$B$2:$B$10)) と入力して CTRLを押しながらSHIFTを押しながらENTERを押して確定します。 このセルを下までコピーしてください。 こういう事でしょうか?

teneighty
質問者

補足

有難うございます。 >2ヶ月経っていたとの判断の基準はポスティングを始めた日でしょうか? はい、始めた日であわせたいです。 すいません、同じようにやってみたのですが、よくわかりませんでした。 何をする関数なんでしょうか? MINてことは最小値?? お手数かけますが、よろしくお願いします。

回答No.2

こちらのサイトの過去ログにエクセルの学習サイトおよび書籍などの紹介があります、参考になると思いますがいかがでしょう。

参考URL:
http://virus.okweb.ne.jp/kotaeru.php3?qid=1265105
teneighty
質問者

お礼

ありがとうございます。 少しだけ参考サイトを覗いてみたんですが、 これからだいぶお世話になりそうです。 ありがとうございました。

回答No.1

地区、訪問年月日を一覧にしておけば 訪問年月日でソートすれば、古い順に並びます。 訪問年月日のセルに条件付書式で =month(today())>=month(自行セル) の条件で色付けすれば 前回訪問から2ヶ月経過した行に色がつきます

teneighty
質問者

補足

ありがとうございます。 順番はあまり並び変わってほしくないのですが、 シートで分けてデータをリンクさせて、 片方のシートにランキング表示のようにすれば もとデータは並び変わらずに済みます・・・でしょうか? あと問題は、日にちがたってくると、だんだん回る回数に違いが出てきて、 日付を入力するセルの列もしくは行がまちまちになってしまう事なんですが、 上記のようにシートわけして、もとデータのほうに以前ポスティングしてから 今日までどれだけ経っているか、という情報を一時的な集計として出しておき、 それをランキングシートにリンクさせて候補順にソートさせる、ということは可能でしょうか?? なんか書いててどう説明すればいいかわからなくなってきちゃいましたがすいませんです(>_<) もしお暇がありましたら、よろしくお願いします。

関連するQ&A

専門家に質問してみよう