プロが教える店舗&オフィスのセキュリティ対策術

エクセルで数字と数字の間隔(空白の数)計算する方法を教えてください。

データ数は10000程です。
A列に日付 B列に販売日(販売数関係なく販売した日は”1”とします)
C列に前回販売した日から何日経過(空白計算)したか数字を入れたいのです。
また、連日販売できた場合は"0"と入力したいです。

よろしくお願い致します。

「エクセルで数字と数字の間隔(空白の数)を」の質問画像

質問者からの補足コメント

  • 当方VBAを扱えないため関数で教えていただくと助かります。
    C列に関数を入力し下方にペーストなど。
    よろしくお願い致します。

      補足日時:2019/06/06 09:27

A 回答 (5件)

小学生のような回答で恥ずかしいのですが、こんなのでどうでしょう。


C2セルに次の式を入力すて、下にオートフィルしてください。

=IF(B2=1,COUNTBLANK(B$1:B1)-SUM(C$1:C1),"")

C2セルの式が分かりにくかったら、C11セルの式を確認してみて下さい。
    • good
    • 0
この回答へのお礼

思っていた通りの関数です。この関数が小学生レベルですか・・・ 関数奥深すぎですね。エクセルの勉強やり直します、ありがとうございました。

お礼日時:2019/06/09 00:34

データ配置は質問文のとおりとします。


D列を作業列として使用します。

C2セルに『=IF(AND((ISNUMBER(D1)),B2<>""),D1,"")』
D2セルに『=IF(B2<>"",0,IF(ISNUMBER(D1),D1,0)+1)』
C2~D2セルを下方向にコピペです。
    • good
    • 0
この回答へのお礼

教えていただいた関数だとデータ入力に関数を利用しても反映されます。
みなさまの回答に比べてより感動したのでベストアンサーとさせていただきます。
ありがとうございました。

お礼日時:2019/06/09 00:25

こんにちは



C3セルに
 =IF(B3,ROW()-IFERROR(AGGREGATE(14,2,INDEX(ROW(B$1:B2)/(B$1:B2=1),,),1)+1,ROW()),"")
を入力して、下方にフィルコピーでいかがでしょうか。
    • good
    • 0
この回答へのお礼

せっかく教えていただいのですが、関数を入力しフィルコピーしましたがうまく反映されませんでした。勉強不足です。回答ありがとうございました。

お礼日時:2019/06/09 00:17

No.1です。



関数での方法をご希望だというコトなので、無理やりやってみました。
↓の画像のように作業用の列を使います。

作業列D2セルに
=ROW()-MAX(IF(B$2:B2<>"",ROW(B$2:B2)))

配列数式なので、Ctrl+Shift+Enterで確定!(←必須★)しフィルハンドルでこれ以上データはない!という位まで下へコピーしておきます。
※ 10000行までフィル&コピーするのは大変なので、
E2セルに 1 を入力 → メニューの右側のΣのアイコンの下にある「フィル」のアイコンをクリック → 連続データの作成
→ 「列」を選択 → 停止値に「10000」を入力 → OK!
これで10000までの連続データが作成されますので、D2セルのフィルハンドルでダブルクリック!
これで連番最後まで数式がフィル&コピーされます。
その後E列は削除

C2セルに
=IFERROR(IF(B2="","",LOOKUP(10^10,D$1:D1)),"")
(配列数式ではありません)
という数式を入れフィルハンドルで下へコピーしています。

※ 作業列が目障りであれば、遠く離れた列にするか
非表示にしてください。

※ 配列数式を使っていますので、データ数が10000程度もあると
計算速度が極端に遅くなります。m(_ _)m
「エクセルで数字と数字の間隔(空白の数)を」の回答画像2
    • good
    • 0
この回答へのお礼

丁寧な回答をありがとうございます。
とても勉強になりました。

お礼日時:2019/06/09 00:15

こんばんは!



>データ数は10000程です。

というコトなので、手っ取り早くVBAでの一例です。

Sub Sample1()
 Dim i As Long, lastRow As Long, cnt As Long
 Dim myR

  lastRow = Cells(Rows.Count, "A").End(xlUp).Row
   Range(Cells(2, "C"), Cells(lastRow, "C")).ClearContents
   myR = Range(Cells(2, "B"), Cells(lastRow, "C"))
    For i = 1 To UBound(myR, 1)
     If myR(i, 1) = "" Then
      cnt = cnt + 1
     Else
      myR(i, 2) = cnt
      cnt = 0
     End If
    Next i
   Range(Cells(2, "B"), Cells(lastRow, "C")) = myR
    MsgBox "完了"
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
申し訳ありませんがVBAを使えないので関数で教えていただきますとたすかります。よろしくお願い致します。

お礼日時:2019/06/06 09:39

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

このQ&Aを見た人はこんなQ&Aも見ています