• ベストアンサー

前日の差を求める。

セル B2~B17に前半の日付を、セル F2~F16 に後半の日付を入れています。セル C2~C17 、G2~G16 にはそれに対応する曜日がはいっています。セル D2~D17 、H2~H16 には数字のデーターが入ります。 E列とI列 に前日との差をマクロで表示する方法を教えて下さい。ただし、D列(H列)の土日祭日セルにデーターは入れず、無表示です。また、D列 (H列) にデーターが入っている所のみ前日との差をE列(I列)に表示する。初日のみ前日のデーターがない為、E列(I列)は無表示とする。また、月曜日の前日は、金曜日。火曜日が祭日の時は、水曜日の前日は月曜日。また、つき始めが日曜日から始まる時は2日目初日のデーター、つき始めが土日から始まる時は、3日目が初日のデーターです。今年の5月でしたら6日目が初日データーとなります。よろしくお願いします。

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

  • ベストアンサー
回答No.4

#2です。 >test2()の方、プログラムを掲載する時に編集してしまい  1行間違えてました。訂正してください。 If (syoniti = False) Then  '月の初営業日は前営業日のデータのみセット ↓           If (syoniti = True) Then '月の初営業日は前営業日のデータのみセット です。 >Sub test() のI列 の16行目で計算をとめるのにはどうすればいいか。   For i = 4 To 8 Step 4 '4=D列,8=H列     For j = 2 To 17  '2行目~17行目       if ( i = 8 and j = 17 ) then         exit for       end if       以下同じ のような感じにすればいいのでは? (あまりスマートではないですが・・・)

kkazumi
質問者

お礼

どうもありがとうございました。うまくいきました。また、よろしくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

#1です。少し改良しました。 Sub test01() d1 = 2: d2 = 2 For i = 2 To 16 If i = d1 Then GoTo p01 If Cells(i, "D") = "" Then Else Cells(i, "E") = Cells(i, "D") - Cells(d1, "D") d1 = i End If '---- p01: If i = 2 Then Cells(i, "I") = Cells(i, "H") - Cells(16, "E") d2 = i Else If Cells(i, "H") = "" Then Else Cells(i, "I") = Cells(i, "H") - Cells(d2, "H") d2 = i End If End If Next i End Sub

kkazumi
質問者

お礼

どうもありがとうございました。また、よろしくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

データを2列にするとちょっと難しくなった気になりますね。 imogasiさんも仰っていますが、休日判定は少々面倒なので、 「休日は入力がない」事を前提にしています。 ・testは行がD列、H列ともに17行目まで判断しても問題ない場合  test2はH列はどうしても16行目までにしたい場合 ・月初めの営業日の判定に[syoniti]という変数を利用していますが、  数字のデータが0でないとか、マイナスにならない場合は  [zenjitu]変数を利用する事もできると思います。 ・前営業日データを[zenjitu]という変数に入れています。  数字が整数なのか小数もあるのか分かりませんでしたので  Long型を使用しています。データに合わせて変更してください。 Sub test()   Dim zenjitu As Long   Dim syoniti As Boolean      syoniti = True      For i = 4 To 8 Step 4 '4=D列,8=H列     For j = 2 To 17  '2行目~17行目       If (Cells(j, i) <> "") Then 'データが入っている         If (syoniti = True) Then  '月の初営業日は前営業日のデータのみセット           zenjitu = Cells(j, i)           syoniti = False         Else           '1列右に前営業日との差を表示           Cells(j, i + 1) = Cells(j, i) - zenjitu           '前営業日として今日のデータをセット           zenjitu = Cells(j, i)         End If       End If     Next j   Next i End Sub Sub test2()   Dim retu  As Variant   Dim gyou  As Variant   Dim zenjitu As Long   Dim syoniti As Boolean   retu = Array("D", "H")   gyou = Array(17, 16)   syoniti = True      For i = 0 To 1            '0=D列,1=H列     For j = 2 To gyou(i)       '2行目~16or17行目       If (Cells(j, retu(i)) <> "") Then  'データが入っている         If (syoniti = False) Then  '月の初営業日は前営業日のデータのみセット           zenjitu = Cells(j, retu(i))           syoniti = False         Else           '1列右に前営業日との差を表示           Cells(j, retu(i)).Offset(, 1) = Cells(j, retu(i)) - zenjitu           '前営業日として今日のデータをセット           zenjitu = Cells(j, retu(i))         End If       End If     Next j   Next i End Sub 参考になりますでしょうか?

kkazumi
質問者

補足

どうもありがとうございます。Sub test2() ですが、Sub test() 見たいに、初日のデーターは、入っていても前日のデーターがない為 E列 を無表示にするにはどうすればいいか。また、Sub test() のI列 の16行目で計算をとめるのにはどうすればいいか。無理いってすみませんがよろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

・質問文雑感 F列より右は、繰り返しなので、書なくても良い。 問題を読む人に時間をかけ、回答者を逃がすだけ。 D列計数の「前日比」を出したい。休業日はデータがなく 遡って直近営業日と比較する、で意味が判る。 ●計数数字データの「有り無しに信を置けるなら」 Sub test01() d1 = 2: d2 = 2 For i = 2 To 16 If Cells(i, "D") = "" Then Else Cells(i, "E") = Cells(i, "D") - Cells(d1, "D") d1 = i End If Next i End Sub 変数d1,d2には計数数字データの入った(今までの)最後の行(番号数)を覚えていて、後の行の利用に備えています。 F列より右は、 If Cells(i, "H") = "" Then Else Cells(i, "I") = Cells(i, "H") - Cells(d2, "H") d2= i End If をFor Nextの後半に挟めば良い。 ●D列、H列のデータの有無に頼らないならば、土日の曜日は簡単に判別できるが、祝日や年末年始・お盆の休日を判定するのが面倒です。

kkazumi
質問者

補足

どうもありがとうございます。無理いってすみませんが、初日のデーターは、前日のデーターがない為比較出来ない為 E列 は無表示にするには、どうすればいいのかよろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • excel2010 その日付により特定の文字を入力

    A列セルには、2022/01/01~2022/03/31期間を連番で記載しています。 B列セルには、土曜日、日曜日、月曜日と連番で曜日を記載しています。  E列セルには、祭日や会社の定休日を2022/01/01、2022/3/21などと記載しています。 F列セルには、祭日や会社の定休日を年末年始休、春分の日などと記載しています。 土日については、=IF(WEEKDAY(A2,2)>=6,"休日","")でC列セルに『休日 』の文字を入れる事が出来ました。 祭日や会社の定休日についても、C列セルに『休日』の文字を入れたいのでですが、出し方が分かりませんでした、ご教示頂けると大変助かります。 データは下記の通りです。  A    B      C    D   E      F    日付   曜日   仕事オフ日     休日    休日名  2022/1/1 土曜日  休日        2022/1/1  年末年始休

  • 連続していない日付データからの抽出

    エクセルで、   A   B 1 日付 売上   2 11/21  900 3 11/22 2000 4 11/26 1800 5 11/27 1300   D    E 1 日付  前日比 2 11/21 **% 3 11/22 **% 4 11/26 **% 5 11/27 **% とあります。 そこで、   G   H   I 1 日付 売上 前日比 2 任意 (抽出) (抽出) 3 と、Gに日付を入力したらH、Iにデータが抽出されるように関数を作りたいと思います。 Hには =INDEX(A2:B5,MATCH(G1,A2:A5,0),2) Iには =INDEX(D2:E5,MATCH(G1,D2:D5,0),2) と入力して抽出をしましたが、 例えばG列に元データには無い、「11/23」が入力されたときは、11/23よりも先で1番にくる11/26のデータを抽出するようにしたいのですが、どうしたらいいでしょうか? よろしくお願いします。

  • 休前日って・・・。

    良く表示のある、休前日。 土曜日と、祭日の前日のことでしょうか。 金曜日は、休前日ではないというのは、統一された了解事項なのでしょうか。 宿泊カレンダーのあるところでは、金曜日が、平日や休日、休前日との中間の料金になっているところも見受けられます。

  • 前日差の比較について

    Excel 2007にて添付のような推移表を作成しているのですが「前回差」のところで行き詰まっています。 ※現在は1年生3学期の期末テストを終えてテスト結果が返されたところと仮定しています。 C5セルには単純に「=C4-B4」としているのですが、そのままでいくと、E5セル(2年生1学期)のテストを未実施ながらも前回差がマイナスで表示されてしまいます。 マイナスを表示させたくないので、 E5セルに「=IF(E4-D4=0,"",E4-D4)」のようにしてみましたがどうしてもマイナスを非表示にすることができません。 どなたかお知恵を拝借できませんでしょうか。 何卒よろしくお願いします。

  • セルの日時から時間のみ マクロ

    日時の時間のみを照らし合わせて判定するマクロを教えて下さい。 添付画像のC列、D列に日時が入っています。 表示形式はユーザー定義でyyyy/m/d h:mmです。 今回行いたいのは例えば C12セルとD12セルの時間 15:45(C12セル)と15:55(D12)であればセルI12に朝礼と表示したいです。 日付は見ずに時間がこの並びになっていたら、I列に文字を表示したいということです。 C17とD17も同じです。 C列とD列の関係で日付は考えず時間で照らしあわせるには どのようなコードを書けばよいでしょうか?

  • EXCELで日付の表示

    お世話になります。 年月日のデータが3つのセルに分かれて入っており、   A   B   C   D   2005   5    1 Dのセルにつなげた日付表示をしたいのですが、 どのようにしたらよいのでしょうか。 ちなみに、セルDに「=CONCATENATE(A1,B1,C1)」と入れたら、 「200551」と表示されました。セルの表示形式を 「yyyy/m/d」としたのですが、変化なく、 セルEに「=TEXT(D1,"0!/00!/00")」と入れたら、 「20/05/51」となってしまいました。 もとデータのB列C列の表示形式を「00」にしてみましたが、 表示は「05」「01」となるのですが、セルD、Eに反映されないのです。 何か良い方法がありましたら、 教えてください。

  • エクセルの日付表示について

    エクセルの日付を1桁ずつ別のセルに表示したいのですが、 何か方法があるでしょうか? たとえばH20.7.25の場合、 1つのセルに1桁ずつ シートに↓のように表示したいのですが。  |  A  |  B  |  C  |  D  |  E  |  F  | 1|H20.7.25| 2|  2  |  0  |  0  |  7  |  2  |   5  | A1の日付を2列目に1桁ずつ表示。 (わかりづらいかもしれませんが・・) よろしくお願いします。

  • あるセルにデータが入力された日を表示

    A列(A1)のセルにデータが入った場合、D列(D1)にそのセルに データが入力された日付を表示させたいのですが、どのように やったらいいでしょうか?TODAY関数を使うと毎回更新されて しまいます。 TEXT関数+TODAY関数で出来るかな?と思ったのですが、 =TODAY()を使うとセルに入力された日でなくて、ファイルを開いた 日付に毎回更新されてしまいます。 A列のセルにデータが入った時にD列にその入力日を表示させたい のです。こういう事は簡単に関数を使って出来ませんか?わかる方 がいれば教えてください。

  • Excel 微妙に違う2つのシートのデータをリンクさせる

    ある程度 同じデータのブック1とブック2があり、 ブック1は祭日などデータが無い日も日付があり、行が確保されていますが、 ブック2は祭日などデータが無い日は行が抜いてあります。 A列:日付、B列:曜日 C列:データ1、D列:リンクを入れる 04.11.22 月 56  =[ブック2.xls]シート1!H2 04.11.23 火  04.11.24 水 50  =[ブック2.xls]シート1!H3 04.11.25 木 52  =[ブック2.xls]シート1!H4 04.11.26 金 49  =[ブック2.xls]シート1!H5 04.11.29 月      04.11.30 火 A~C列はブック1、2とも同じデータです。(現在ブック1は1400行、ブック2は1300行くらい) D列にブック2のH列のデータを表記したいのですが、ドラッグなどでは行がずれてしまいます。 関数かマクロなど、何か良い方法を教えて下さい。 下記のことにも対応できれば更に便利なのですが・・。 ブック2のH列は時々J列とか他の列(表範囲内)に移動します。 そしてたまにはブック2のシート1もブック1に移動したりブック2に戻したりもします。

  • エクセルで、A列に日付をB列に曜日、C列からF列までにデータを入れるよ

    エクセルで、A列に日付をB列に曜日、C列からF列までにデータを入れるように作成しています。 条件付書式で土日祭日の場合はC列からF列に色を表示させています。 この色付セル(土日祭日)の場合にはデータ入力が無いので自動で0を表示させ、なおかつデータ入力が出来ないようにしたいのですが、そのようなことは出来るでしょうか。エクセルは2003を使ってます。

このQ&Aのポイント
  • Logitec(ロジテック)のポータブルDVDユニットで表示されるエラーメッセージ「現在、公開されているソフトウェアはありません」という問題が発生しています。
  • 取り扱い説明書に書いてあるURLからソフトウェアをダウンロードする必要がありますが、Logitecのソフトウェア公開ページが正常に表示されず、ソフトウェアがダウンロードできません。
  • この問題の解決方法についてご案内いたします。Logitecの公式ホームページから最新のソフトウェアをダウンロードすることをおすすめします。
回答を見る