エクセルでバイク整備記録から次の整備時期を自動表示する方法

このQ&Aのポイント
  • エクセルでバイクの整備記録から次の整備時期を自動表示する方法について教えてください。
  • G列以降に整備した日付と距離と内容を記入し、D1に現在の走行距離を入力します。黄色のセルには自動で次の整備時期を表示する方法が知りたいです。
  • G列以降の整備内容欄の一番日付が新しい列の距離を読み取り、黄色のセルに渡します。また、期間も自動で表示することが可能であれば教えてください。
回答を見る
  • ベストアンサー

エクセル IF?セルを二段階に参照する関数

現在、バイクの整備記録から今後の整備時期を自動で表示する表計算を作っています。 添付画像の黄色のセルに入れる関数がわからず困っています。 仕様・希望は以下となります。 ・G列以降に整備した日付と距離と内容を記入 ・D1に現在の走行距離を手動で入力 ・黄色セル(D4~F4)は自動で表示【←ここがわかりません】 ・G列以降の整備内容欄(G4、H4...)に「交換」と入力してある一番日付が新しい列(一番右側)の距離を読み取り(G4ならばG3の3,000km)、黄色セルに渡す ・「交換」以外の列は無視する ・「エンジンオイル交換」以外にも項目(行)を追加し、同時に行った整備を同列に記入する予定 ・G4に直接距離を入力することは避けたい ・今回は距離の計算を知りたいが、もし可能なら期間も自動で表示するようにしたい 以上、面倒な内容ですが、エクセルにお詳しい方の知恵をお借りできれば幸いです。 ご教示よろしくお願いいたします。

  • j_ksr
  • お礼率100% (1/1)

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.1

エクセルが予め用意している関数たちの組み合わせで 期待の計算を行うのは困難と思います。 やるとすれば、VBAを使った関数を使うことになりましょう。 もし、VBAに挑戦するのであれば、以下を参考にしてみてください。 添付画像のようなレイアウトで、 次のようなVBAなら期待の結果を得ることができましょう。 なお、 >「交換」と入力してある一番日付が新しい列(一番右側)の距離 一番日付が新しい列とするのか、 一番右側の列とするのか悩ましいところですが 後者としました。 また、G3、G4、G5に埋まっているのは数値で、 表示形式を使い"Km"を付加しているんですね? E4,E5は走行距離や周期とD4を使った計算になるものと思いますが 提示がないので考えていません。 >もし可能なら期間も自動で表示するようにしたい これもやりたいことが読み取れないので考えていません。 Function GetKyori(MyRange As Range) As Long    Dim ColCount As Long    GetKyori = 0  For ColCount = 1 To MyRange.Columns.Count   If MyRange.Cells(2, ColCount).Value = "交換" Then    GetKyori = MyRange.Cells(1, ColCount).Value   End If  Next ColCount End Function

j_ksr
質問者

お礼

早速のご回答および詳しいご説明をいただきありがとうございます。 やはり一般的な方法では難しいのですね。 VBAは全くやったことがないのですが、ネットで調べながら挑戦してみます! のちほど補足欄にて結果をお伝えします。 またその時に質問させていただくかもしれませんが、どうぞよろしくお願いします。 ご回答についていくつか補足いたします。 >一番日付が新しい列とするのか、一番右側の列とするのか 同行の中で「交換」と記入している内で最も右側(整備日が新しい)という意味です。 伝わりにくい文章で申し訳ございません。 >また、G3、G4、G5に埋まっているのは数値で、表示形式を使い"Km"を付加しているんですね? はい、その通りです。 添付画像では、わかりやすくするために文字列として「km」を記入していますが、実際は数値がなければ空白です。

j_ksr
質問者

補足

丁度休日だったので半日かけてVBAの勉強をしました。 初歩から学びながら都度コードを付け足していったので、ご回答いただいたコードとは全く異なりますが、何とか思い通りに動作させることができました。 つたないコードですが、一応投稿します(^^;) Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Dim seibiChangeKm As Long Dim seibiLastCol As Integer seibiLastCol = Range("I3").End(xlToRight).Column Do While Cells(4, seibiLastCol) <> "交換" seibiLastCol = seibiLastCol - 1 If seibiLastCol = 6 Then Exit Do End If Loop If seibiLastCol = 6 Then seibiChangeKm = 0 Else seibiChangeKm = Cells(3, seibiLastCol) End If Range("D4") = Range("D1") - seibiChangeKm Range("E4") = Range("C4") + seibiChangeKm Range("F4") = Range("E4") - Range("D1") Application.EnableEvents = True End Sub 最初に整備記録の中から最も新しい列を探し、内容が「交換」でなければ一つ古い列...とループし、その時の距離を計算式に渡しています。 なお、「交換」が一つもない場合はループを終了し0kmからの計算になるようにしています。 初めてVBAを触りましたが、実行して上手くいったときの喜びにハマりました!^^ このコードももっと綺麗なコードにできるかと思いますし、ご回答いただいたコードも現状では全ては理解できていません。 今後も引き続き勉強していこうと思いますので、行き詰まった時にはまた、お力添えいただければ幸いです。 HohoPapaさん、ご回答ありがとうございました!

関連するQ&A

  • エクセル複数のセル内容変更したら更新日を自動表示

    エクセル初心者です。 B2列からG2列にBからG社名(計6社)が記入されてます。 B3列からG3列以降に上記各社の金額を随時入力します。 H2列からM2列のセルは上記B社からG社の更新日と記入しています。 A3列以降には品名が記入されています。 B3列からG3列のセルの内容を更新すると、それぞれ該当する社名の H3列からM3列のセルに更新日付が自動的に表示させたいと思っております。 例えば、 B社の「B5」へ新規に金額入力したり、金額更新した時に、該当するセル「H5」に その日の日付が自動で表示される。 D社の「D6」へ新規に金額入力したり、金額更新した時に該当する「J6」に その日の日付が自動表示される。 そして、違う日にもう一度、同じ欄に入力すれば、その入力した日付に随時更新されるようにするための方法を教えていただければ幸いでございます。 特定のセルの場合の方法は検索等で確認できましたが、複数の場合の方法が分かりません。 何卒、宜しくお願いいたします。

  • エクセルにて

    A列には日付が入力してあります。(2001/7/17) その日付から3日間経過してもC列のその行に何も入力されなければ、 B列のそのセルを黄色に表示する。 更に7日間経過しても入力なければ赤に表示するようにしたいのですが!? C列に入力されればB列のそのセルは青色表示にしたいのですが!     A      B     C 1 2000/7/10   赤 2 2000/7/11   青   2001/7/16 2 2001/7/13   黄   

  • EXCEL IF関数

    M列に日付が入力されています。 K列には内or外と入力されています。 L列には K列が"内"であればM列の3日前 K列が"外"であればM列の7日前 の日付を返す。という式を入力したいのですが、 例 セルM1 "9/10"  セルK1 "内"  セルL1 "9/7" 宜しくお願いします。

  • エクセルで、あるセルを参照に空白のセルを塗りつぶす方法

    仕事で毎時間の各商品の売れ具合を、エクセルで日々表にしています。表は多い(多)普通(普)少ない(少)無し(無)と数段階に区切って表示して、それぞれに(多)なら赤、(普)なら黄~とそのセルを塗りつぶしています。表内のセルには、条件付き書式をかけているのでA商品の売り上げ9時台が「普通」なら、対象のセルに普と入力すると、そのセルは自動的に黄色で塗りつぶされるようにしています。 そして、9時台が「普通」で、同じ商品の10~14時台まで同じ「普通」の売り上げが続き、15時に「多い」になったら、10~14時台のセルを9時台と同じ状態が続いたということで、セルの中には何も入力せず、色だけ黄色で塗りつぶしています。 (一つの商品は時間毎に右のセルに移動して、始めから終わりまで同じ行で表示しています。) 前置きが長くなってしまいましたが、質問させていただきたいのは、 あるセル(例:セルA2)に「普」と入力し、塗りつぶしも(条件付き書式で自動的に)黄色になった場合に、そのセルの右隣のセル(例:セルB2)に何も入力されていなければ、同じ色(黄色)に塗りつぶし、さらにその右隣のセル(例:セルC2)にも何も入力されていなければ、これも同じ色(黄色)に塗りつぶす~という作業を、同じ行の右隣のセルに何か入力されるまで繰り返す。という指示をエクセルに与えることは可能でしょうか?(ソフトはエクセル2000を使用しています) 自分で関数で色々試してみましたが、出来ずに困っています。 これは、マクロ(VBA?)というもので、出来るのでしょうか? 私はマクロを全然使ったことが無いのですが、もしマクロで出来る場合、マクロ初心者の私では難しいでしょうか? 長々とした、わかりづらい質問で申し訳ありません。 宜しくお願いいたします。

  • エクセルの使い方を教えてください

    下記のような表をエクセル2007で作成したいのですが、可能でしょうか。 (画像を参照ください) (1)エクセルのA1セルから、縦に0001、0002・・と昇順に数字を入力します(A1000セルまで)。 (2)エクセルのB1セルから、縦に2012/8/12(任意の日付)、2012/8/13・・と昇順に日付を入力します(B1000セルまで)。ただし、日付が欠けている場合もありますし、同じ日が続けて入力される場合もあります。 (3)毎週月曜日に、B列の日付がその1週間前の月曜から前日の日曜に該当する同じ行のA列のセルに自動的に色を付けます。例えば、今日が2012/8/20(月)としたら、B列の日付が2012/8/13(月)から2012/8/19(日)に該当する同じ行のA列のセルを自動的に黄色に塗りつぶします。そして、次の週の2012/8/27(月)が来たら、同様にB列の日付が2012/8/20(月)から2012/8/26(日)に該当する同じ行のA列のセルを自動的に黄色に塗りつぶします。そして次の週の月曜も同様です(以下、繰り返し)。 (4)作成したエクセルは毎日開きますが、次の月曜日が来るまでは、同じ場所に黄色が塗られた状態を維持します。例えば2012/8/21(火)~2012/8/26(日)に毎日エクセルを開いた時もB列の日付が2012/8/13(月)から2012/8/19(日)に該当する同じ行のA列のセルが自動的に黄色に塗りつぶされた状態を維持します。 いろいろ考えてはみたのですが、わかりませんでした。どうかお知恵をよろしくお願いいたします。 ●画像の文章が見づらいので、こちらに書いておきます (例) 2012/8/20(月)にB列が2012/8/13(月)~2012/8/19(日)に該当するA列の0002~0008が自動的に黄色に塗りつぶされる。2012/8/21(火)~2012/8/26(日)の毎日このエクセルを開いても0002~0008が黄色に塗りつぶされた状態が維持される。           ↓ 2012/8/27(月)にB列が2012/8/20(月)~2012/8/26(日)に該当するA列の0009~0015が自動的に黄色に塗りつぶされる。 2012/8/28(火)~2012/9/2(日)の毎日このエクセルを開いても0009~0015が黄色に塗りつぶされた状態が維持される。 (以下、月曜日毎に繰り返し)

  • エクセルで自動にセルの色を変えたい

    エクセルを使った表示について質問です。 セルの中にある締切の日付が記入されており、今日の日付からその締切までの日数が、たとえば10日以上であれば青、5日から10日の間であれば黄色、5日を切ったら赤というように、そのセルの色が自動で変わるようにしたいのですが、マクロを使う以外には方法はありませんでしょうか。

  • 【再】エクセルでセルを参照して列を追加したい

    前回説明不足だっ為、再質問させていただきます。 セルは変わりましたが、現在、以下のようなガントチャートを作成中です。     E   F   G   H   I 1  5/2   5 2 9/14   2   3    4   5 3       水  木   金  土 E1には開始日を入力 E2には終了日を入力 F1には=F2 F2には=E1 F3には=E1 G1には=IF(DAY(G2)=1,G2,"") G2には=F2+1 G3には=F3+1 H1には=IF(DAY(H2)=1,H2,"")でI列以降も続きます。 H2には=G2+1でI列以降も続きます。 H3には=G3+1でI列以降も続きます。 土日は条件付き書式でカラー表示されるようになっています。 現在は終了日を入力しても、列を選択して右に延ばせば、 終了日以降も表示されてしまい、 終了日が前倒しになっても9/14のままなので、 (現在の9/14が9/1になっても9/14まで表示されてしまう) E1E2に開始日、終了日を入力したら F列に開始日が表示され、最終日まで自動的に終了日までを表示したいと思っています。 また、月の表示は月初日だけで2日以降は見づらくなるため、 表示は避けたいと思っています。 以上のような状況なのですが、何かいい方法をご教示いただきたく、 よろしくお願いいたします。

  • EXCELの関数でこんな事できますか?

    表示形式が日付で入力されていて、たとえばあるセルに2012年6月29日の形式で入力されている場合隣のセルに2012/6と自動的に月までの表示に文字列形式で入力する関数、あるいは関数の組み合わせがあれば教えていただきたいのですが。      2012年6月29日→2012/6          日付形式    文字列   

  • エクセルでセルの色を参照したい。

    エクセル2010で、例えばA列(複数行の結合セル)に日付が入っていて、B列にその日の作業人数、C列にトータル仕事量が入るような表で、 仕事量が作業者数を超える場合、日付けセルに色が付くように書式設定してあるのですが実際の表は1日分の行数がこれ以上に多いので3-4日間程度の予定しか確認できない表になっています。 これだと月の予定が見えにくいので、別の表の日付のセルにその日の色を参照させたいのですが。 イメージとしては添付の表のような表示がさせたいのですが、セルの色参照は簡単には行かないのでしょうか?

  • エクセル関数?

    エクセル2000を使用しています。関数を使用するかわかりませんが2つ教えてください。 1.月を入力すると自動的に月末の日付が表示される。 (例:A1のセルに1と入力するとB1のセルに1月の月末日である31と表示) 2.A列に入力してある種類ごとにB列の数値の合計をB列の最後に出す。 よろしくお願いします。

専門家に質問してみよう