• ベストアンサー

日付のないところは空欄にしたい。

EXCELで日付とデーターが並んでいるのですが、 日付が所々間が抜けている日がある場合があります。 抜けている日のところは空欄にして、日付順に並べることは できますか? 例) 10/1  aaa 10/2 bbb 10/4 ccc 10/5 ddd を 10/1  aaa 10/2 bbb 10/4 ccc 10/5 ddd (10/3のところは間をあけたい)

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

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

関数式を使ってやります。 A、B列にデータがあって、C、D列に望のように並べるとして、 C1に =OFFSET($A$1,MATCH(ROW()+DATE(2003,10,1)-1,$A$1:$A$30,0)-1,0) と入れて、下方向に複写します。 現われない日付は#N/Aになりますが、自分の列に「形式を選択して貼りつけ」の「値」を行い、式を消し、その後#N/Aはスペースで置換してください。 ISERRORで#N/Aを出さない式にも出来ますが 式が長くなるので上記のようにしました。 D1は =OFFSET($A$1,MATCH(ROW()+DATE(2003,10,1)-1,$A$1:$A$30,0)-1,1) です。 DATE(2003,10,1)はデータとして出てくるもっとも過去の 日を指定してください。 これらは、詰まるところ日付は、正整数値であることを 使っています。

その他の回答 (4)

  • Hageoyadi
  • ベストアンサー率40% (3145/7860)
回答No.4

最終的に印刷結果がそうなる方法でよければ・・・ 隣のワークシートを使う方法です。 sheet1に例)のデータ、sheet2に結果を出します。 sheet1のA列に日付、B列にデータがあるとして・・・ sheet2のA列に10/1~の日付データを並べます。 sheet2のB1には =IF(ISERROR(VLOOKUP(A1,Sheet1!$A$1:$B$7,2,FALSE)),"",VLOOKUP(A1,Sheet1!$A$1:$B$7,2,FALSE)) でこれを下方向にコピーします。 sheet2のA1に条件付書式で 「数式が」「=B1=""」のときに文字色を背景色と同じにして下方向にコピーします。

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.3

マクロで一発で並べ替える方法です。 次のマクロを実行すると、瞬時に、ご希望通りの並べ替えが出来ると思います。 一応、VBAコードの設定方法を書いておきますので、ご存知の場合は、 読み飛ばしてください。 1.Alt + F11 で VBE(Visual Basic Editor)を開きます。 2.VBE のメニューから[挿入] -->[標準モジュール] を指定します。 3.モジュールウィンドウに下記コードをコピーして貼り付けます。   必要により、コードの2~3行目を実情に合わせ指定します。 4.Alt + Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。 5.メニューから[ツール]-->[マクロ]-->[セキュリティ]で「セキュリティレベル」を  「中」にして[OK]します。 6.実行するときは、Alt + F8 (メニューから[ツール]-->[マクロ]-->[マクロ])で  「空行付き日付整列」を指定し、[実行]ボタンを押します。 ※ 「日付」は、「表示形式」が「日付」と認識できる形式であることが条件です。 Sub 空行付き日付整列() Const Col = "A" '<----- 並べ替えのキーになる列を指定 Const TopRw = 2 '<----- データの先頭行番号を指定(見出しを省く) Dim Rw As Long Dim EndRw As Long Dim N As Long Dim S As Long EndRw = Range(Col & 65536).End(xlUp).Row Rows(TopRw & ":" & EndRw).Sort Key1:=Range(Col & TopRw), Order1:=xlAscending, _   Header:=xlNo, OrderCustom:=1, MatchCase:=False, _   Orientation:=xlTopToBottom, SortMethod:=xlPinYin For Rw = EndRw To TopRw + 1 Step -1   N = Range(Col & Rw).Value - Range(Col & Rw - 1).Value   For S = 1 To N - 1     Rows(Rw).Insert   Next S Next Rw End Sub

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

こんにちは。maruru01です。 少し手順がかかります。 元の抜けがあるデータがA1~B7にあるとします。 適当な2列を作業列として使用します。 ここではCD列を作業列とします。 ・C1~CXに、元のデータの最小日付~最大日付を連続した日にちで入力します。 (オートフィルコピーですぐに作成出来ますね) (最終的に表示したい日付範囲ということです。) ・D1に、 =IF(ISERROR(MATCH(C1,$A$1:$A$7,0)),C1,"") と入力して、下の行へコピーします。 (元のデータ範囲は適宜変更して下さい。) ・D1~DXまでを選択してコピーします。 ・A列の一番下のデータのすぐ下(今回の例だとA8)を選択します。 ・メニューの[編集]→[形式を選択して貼り付け]で、[値]にチェックをして、[OK]します。 (抜けている日付データが貼り付きます) (ただし、「37898」のような数値になっているかも知れません。) ・AB列あわせて、A列をキーにして並べ替えます。 ・A列のセルの表示形式を日付にします。 ・終わったら、CD列は削除します。 これで、A列に抜けていた日付が入ります。 なお、あくまで、「10/3」など、B列が空白のところの日付は非表示にしたいということなら、さらに下の手順を行って下さい。(すでにCD列はいったん削除済みとします。) ・C1に、 =IF(LEN(B1),A1,"") と入力して、下の行へコピーします。 ・C1~CXを選択してコピー。 ・A1を選択して、[形式を選択して貼り付け]の[値]をチェックして[OK] ・あとは、必要に応じて、A列のセルの表示形式を日付に直す。 ・終わったら、C列は削除してもいい。 です。 抜けの数が少なければ、1つずつ行を挿入した方が速いかも・・・

回答No.1

 Excelではたぶん無理だと思います。もしできたとしても、その設定はとても複雑だと思います。  データベースソフト、「桐」「Access」だと可能です。比較的簡単です。その方法をお知りになりたければ、再度「お礼」欄で請求ください。