• 締切済み

エクセルでの一括データ処理(日付補完など)

エクセルによるデータ整理に手を焼いています。 データファイルを下記の様に変換して整理したいと考えています。 <元データ> [A]       [B]        [C]       [D] … [1] 日付1     値1       日付2      値2 [2] 2007/12/7   1        2007/12/5   20 [3] 2007/12/9   4        2007/12/6   30 [4] 2007/12/11   3        2007/12/7   15 [5]                    2007/12/10  10 [6]                    2007/12/11  10 (A5:B6は空白です) <変換後データ>    [A]     [B]      [C]     [1]日付     値1     値2 [2]2007/12/5  NA     20 [3]2007/12/6  NA     30 [4]2007/12/7   1     15 [5]2007/12/8  NA     NA [6]2007/12/9   4     NA [7]2007/12/10  NA    10 [8]2007/12/11  3     10 ("NA"部分は"0"あるいは空白で構いません) 同種の質問としてttp://okwave.jp/qa/q3911631.htmlを見つけましたが、 データファイルが大きいので、どうにかして一括で処理する方法を探しています。 やりたいことは、 (1)飛び飛びになっているデータの日付を補完し、 (2)日付を示す系列は1つだけに留めた上で日付に対応した値を並べる です。 マクロによる処理でも関数による処理でも何でも構いませんので、 どなたか解決策をご教示していただけると助かります。 なお、実際に処理したいデータファイルは1000列ほどで、500種類くらいの値とそれらに対応した日付が並んでいます。 使用しているエクセルは2007です。

みんなの回答

  • ki-aaa
  • ベストアンサー率49% (105/213)
回答No.14

せっかく書いたので、投稿します。 Sub test() Dim i As Long, j As Long, k As Long, n As Long Dim ws1 As Worksheet, ws2 As Worksheet Dim 日付値表() As Long Dim 最終列 As Long Dim 最終行 As Long Dim 最初の日 As Long Dim 最後の日 As Long Set ws1 = Worksheets("sheet1") Set ws2 = Worksheets("sheet2") 最初の日 = DateSerial(3000, 12, 31) ws2.Cells(1, 1) = "日付" 最終列 = ws1.Cells(1, Columns.Count).End(xlToLeft).Column For j = 1 To 最終列 Step 2 ws2.Cells(1, (j + 3) / 2) = ws1.Cells(1, j + 1) 最終行 = ws1.Cells(Rows.Count, j).End(xlUp).Row If 最初の日 > WorksheetFunction.Min(ws1.Range(ws1.Cells(2, j), ws1.Cells(最終行, j))) Then 最初の日 = WorksheetFunction.Min(ws1.Range(ws1.Cells(2, j), ws1.Cells(最終行, j))) End If If 最後の日 < WorksheetFunction.Max(ws1.Range(ws1.Cells(2, j), ws1.Cells(最終行, j))) Then 最後の日 = WorksheetFunction.Max(ws1.Range(ws1.Cells(2, j), ws1.Cells(最終行, j))) End If Next j ReDim 日付値表(最初の日 To 最後の日, 1 To 最終列 / 2 + 1) ' 日付を直接、テーブルの引数にしている For i = 最初の日 To 最後の日 日付値表(i, 1) = i Next i For j = 1 To 最終列 Step 2 For i = 2 To ws1.Cells(Rows.Count, j).End(xlUp).Row 日付値表(ws1.Cells(i, j).Value, (j + 3) / 2) = ws1.Cells(i, j + 1) Next i Next j ws2.Cells(2, 1).Resize(最後の日 - 最初の日 + 1, 最終列 / 2 + 1).Value = 日付値表 Erase 日付値表 End Sub

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.13

高速化にチャレンジしてみました。 xl2000なので、1000列という訳にはいきませんが、250列、10000行のデータで数秒で済みました(PentiumM 1.33GHz)。元気があったら、xl2010でデータを増やしてトライしてみます。 前提:日付の列は日付型で入っている。対応するデータが無い箇所は空白とする。 2007/1/1~2011/12/31の期間に対応。Sheet1のデータをSheet2にまとめる。 それぞれの日付と値の種類数に応じた、日付のシリアル値でアクセス出来る配列を作成して、そこにデータを入れ込み、一括して別シートに貼り付けるという案です。期間の変更は、Constのところを修正してください。 Sub test() Dim targetRange As Range Dim myArray() As Variant Dim targetColumn As Long, i As Long, j As Long Dim buf As Variant Dim lastColumn As Long Const startDate As Date = #1/1/2007# Const endDate As Date = #12/31/2011# lastColumn = Sheets("Sheet1").Cells(2, Columns.Count).End(xlToLeft).Column ReDim myArray(CLng(startDate) To CLng(endDate), 1 To Int(lastColumn / 2) + 1) For i = LBound(myArray, 1) To UBound(myArray, 1) myArray(i, 1) = CDate(i) Next i For targetColumn = 1 To lastColumn Step 2 With Sheets("Sheet1") Set targetRange = Range(.Cells(2, targetColumn), .Cells(Rows.Count, targetColumn + 1).End(xlUp)) End With buf = targetRange For i = 1 To UBound(buf, 1) myArray(CLng(buf(i, 1)), Int(targetColumn / 2) + 2) = buf(i, 2) Next i Next targetColumn With Sheets("Sheet2") .Cells.Clear Range(.Cells(1, 1), .Cells(UBound(myArray) - LBound(myArray) + 1, Int(lastColumn / 2) + 1)) = myArray End With End Sub

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.12

No11の回答の補足です。 質問で例示されているレイアウトのように、元のシートでデータがない日付も、まとめシートには追加したいなら(そのデータを空白表示したいなら)、先頭行(たとえばJ1セル)に「日付」と入力し、J2セルにデータにしたい開始日を入力し、下方向に終了日までオートフィルコピーした行全体を統合範囲に「追加」してください。 ただし、この条件の場合なら(データのない日付を飛ばして表示する必要がないなら)、あまり難しく考えずに、単純にVLOOKUP関数で対応する日付のデータを引っ張ってくるだけで良いと思うのですが・・・

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.11

ご希望の操作は「統合」の機能を利用するのが簡単です。 添付画像のように、項目名を「日付」と「値1」「値2」にして、F1セルにカーソルを置いて「データ」「統合」で統合元範囲の右のアイコンをクリックしてA列とB列全体を選択して「追加」で同様にC列とD列全体を選択し、上端行と左端列にチェックを入れて「OK」します。 日付の表示列がシリアル値で表示されますので、表示形式を日付に変更してください。

  • MASUKUBO
  • ベストアンサー率22% (4/18)
回答No.10

回答No2です。 関数のみで解決することもわりと簡単ですね。 シート1に元の表があるとしてシート2のAおよびB列を作業列としてA1セルには日付1とでも入力し、シート1でのそれぞれの列でのもっとも古い日付を表示させることとし、A2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(MIN(INDEX(Sheet1!$A:$ALM,2,ROW(A1)*2-1):INDEX(Sheet1!$A:$ALM,200,ROW(A1)*2-1))=0,"",MIN(INDEX(Sheet1!$A:$ALM,2,ROW(A1)*2-1):INDEX(Sheet1!$A:$ALM,200,ROW(A1)*2-1))) B1セルには日付2とでも入力しそれぞれの列での最新の日付を表示させることとし、B2セルには次の式を入力して下方にオートフィルドッグします。 =IF(MAX(INDEX(Sheet1!$A:$ALM,2,ROW(A1)*2-1):INDEX(Sheet1!$A:$ALM,200,ROW(A1)*2-1))=0,"",MAX(INDEX(Sheet1!$A:$ALM,2,ROW(A1)*2-1):INDEX(Sheet1!$A:$ALM,200,ROW(A1)*2-1))) C列から右側にはお求めの表を表示させるとしてC1セルには日付と入力したのちにC2セルには次の式を入力し下方にオートフィルドラッグします。 =IF(MIN(A:A)+ROW(A1)-1>MAX(B:B),"",MIN(A:A)+ROW(A1)-1) C列の表示形式を日付にすることでC列にはシート1でのもっとも古い日付から最新の日付までが連続した日付として表示されます。 D1セルには値1と文字を入力し右横方向にオートフィルドラッグします。 D2セルには次の式を入力したのちに右横方向にオートフィルドラッグしたのちに下方向にもオートフィルドラッグします。 =IF($C2="","",IF(COUNTIF(INDEX(Sheet1!$A$1:$ALM$200,1,COLUMN(A1)*2-1):INDEX(Sheet1!$A$1:$ALM$200,200,COLUMN(A1)*2-1),$C2)=0,"",INDEX(Sheet1!$A$1:$ALM$200,MATCH($C2,INDEX(Sheet1!$A$1:$ALM$200,1,COLUMN(A1)*2-1):INDEX(Sheet1!$A$1:$ALM$200,200,COLUMN(A1)*2-1),0),COLUMN(A1)*2))) 作業列のAおよびB列が目障りであればそれらの列を選択して右クリックし「非表示」を選択すればよいでしょう。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.9

 回答番号ANo.3です。 >実際は元データは以下の様な200行×1000列のファイルです。 >日付や値の行数はバラバラで200行まであるものもあれば、5行程度しかないものもあります。 >また、日付は飛び飛びの値になっています。 >    [A]  [B]  [C]  [D] … [ALK]  [ALM] > [1]日付1 値1  日付2 値2   日付500 値500  そうでしたか、それは失礼しました。  その場合は、適当な空きシートに作業列を設けるという方法が使えます。  今仮に、<元データ>が入力されているシートがSheet1、<変換後データ>を表示させるシートがSheet2であるものとし、Sheet3を作業用のシートとして使用するものとします。  まず、Sheet3のA1セルに、次の数式を入力して下さい。 =IF(LEFT(INDEX(Sheet1!$1:$1,COLUMN()),2)="日付",MIN(OFFSET(Sheet1!$A:$A,,COLUMN()-COLUMN(Sheet1!$A$1))),"")  次に、Sheet3のA2セルに、次の数式を入力して下さい。 =IF(LEFT(INDEX(Sheet1!$1:$1,COLUMN()),2)="日付",MAX(OFFSET(Sheet1!$A:$A,,COLUMN()-COLUMN(Sheet1!$A$1))),"")  次に、Sheet3のA1~A2の範囲をコピーして、同じ行のA列よりも右側にあるセルの範囲(<元データ>がALM列まで存在する場合はSheet3のB1~ALM2の範囲)に貼り付けて下さい。  次に、Sheet3のA3セルに、次の数式を入力して下さい。 =MAX($2:$2)  次に、Sheet2のA1セルに「日付」、B1セルに「値1」、C1セルに「値2」・・・・・、と言う具合に、各項目名を入力して下さい。  次に、Sheet2のA2セルとA3セルの書式設定を[日付]として下さい。  次に、Sheet2のA2セルに、次の数式を入力して下さい。 =IF(COUNT(Sheet3!$1:$1)=0,"",MIN(Sheet3!$1:$1))  次に、Sheet2のA3セルに、次の数式を入力して下さい。 =IF(A$2+ROW()-ROW(A$2)>Sheet3!$A$3,"",A$2+ROW()-ROW(A$2))  次に、Sheet2のB2セルに、次の数式を入力して下さい。 =IF($A2="","",IF(COUNTIF(OFFSET(Sheet1!$A:$A,,(COLUMNS($A:B)-2)*2),$A2)=0,"NA",VLOOKUP($A2,OFFSET(Sheet1!$A:$B,,(COLUMNS($A:B)-2)*2),2,FALSE)))  次に、Sheet2のB2セルをコピーして、Sheet2のB3セルに貼り付けて下さい。  次に、Sheet2のB2~B3の範囲をコピーして、同じ行のB列よりも右側にあるセルの範囲(<元データ>がALM列まで存在する場合はSheet3のC2~ALM3の範囲)に貼り付けて下さい。  次に、Sheet2の3行目全体をコピーして、Sheet2の4行目以下に貼り付けて下さい。  以上です。

  • sakuuuuu
  • ベストアンサー率32% (67/209)
回答No.8

一回こっきりの処理であれば手動でやったほうが早いです。 (定期的な作業であればマクロ化) ざっくり書くと ⇒ C行をA行の最下行の下に移動、D行はA行の最下行のC行に移動(ヘッダの項目名はいらない) ⇒ A行(日付)で並べ替え ⇒ A行(日付)をグループの基準とし、B行、C行は合計値を集計 ⇒ 集計行のみ別シートにコピペして「集計値」という文言を置換で消す   (完成形は別シートに作成します) CTRL+方向キーで入力行の最後にセルを移動できるので やり方が理解できれば数分の作業だと思います。 マクロ化する場合も、基本的には上記とほぼ同じ手順でしょうね。 A行に日付をそろえ、B行、C行に数値を設定し、 A行(日付)でソートしてからループ処理で上から集計していくという手順でしょうか。 もし可能であれば入力元のデータをエクセルに入力するときに 同じ属性のデータは1列にまとめるとよいと思います。(今回のデータでいうと「日付」) あとからの編集が楽です。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.7

No.6です! たびたびごめんなさい。 前回のコードでは同一日がある場合をまとめていませんでした。 ↓のコードに訂正してみてください。 Sub test() 'この行から Dim i, j, k, L As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("sheet1") '←「sheet1」の部分は実際のSheet名に! Set ws2 = Worksheets("sheet2") ws2.Cells(1, 1) = "日付" For j = 2 To ws1.Cells(1, Columns.Count).End(xlToLeft).Column Step 2 ws2.Cells(1, Columns.Count).End(xlToLeft).Offset(, 1) = ws1.Cells(1, j) Next j For j = 1 To ws1.Cells(1, Columns.Count).End(xlToLeft).Column Step 2 For i = 2 To ws1.Cells(Rows.Count, j).End(xlUp).Row If WorksheetFunction.CountIf(ws2.Columns(1), ws1.Cells(i, j)) = 0 Then With ws2.Cells(Rows.Count, 1).End(xlUp).Offset(1) .Value = ws1.Cells(i, j) .NumberFormatLocal = "yyyy/m/d" End With End If Next i Next j i = ws2.Cells(Rows.Count, 1).End(xlUp).Row Range(ws2.Cells(2, 1), ws2.Cells(i, 1)).Sort key1:=ws2.Cells(2, 1), order1:=xlAscending For i = ws2.Cells(Rows.Count, 1).End(xlUp).Row To 3 Step -1 If ws2.Cells(i, 1) - ws2.Cells(i - 1, 1) > 1 Then k = ws2.Cells(i, 1) - ws2.Cells(i - 1, 1) - 2 ws2.Rows(i & ":" & i + k).Insert End If Next i For i = 2 To ws2.Cells(Rows.Count, 1).End(xlUp).Row If ws2.Cells(i, 1) = "" Then ws2.Cells(i, 1) = ws2.Cells(i - 1, 1) + 1 End If Next i For j = 1 To ws1.Cells(1, Columns.Count).End(xlToLeft).Column Step 2 For i = 2 To ws1.Cells(Rows.Count, j).End(xlUp).Row For k = 2 To ws2.Cells(Rows.Count, 1).End(xlUp).Row For L = 2 To ws2.Cells(1, Columns.Count).End(xlToLeft).Column If ws1.Cells(i, j) = ws2.Cells(k, 1) And ws1.Cells(1, j + 1) = ws2.Cells(1, L) Then ws2.Cells(k, L) = ws1.Cells(i, j + 1) End If Next L Next k Next i Next j End Sub 'この行まで こんな感じではどうでしょうか?m(_ _)m

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.6

こんばんは! VBAでの一例です。 無理矢理って感じです。 Sheet1のデータをSheet2に表示するようにしてみました。 Alt+F11キー → 画面左下にある「This workbook」をダブルクリック → VBE画面が出ますので ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i, j, k, L As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("sheet1") '←「sheet1」の部分は実際のSheet名に! Set ws2 = Worksheets("sheet2") ws2.Cells(1, 1) = "日付" For j = 2 To ws1.Cells(1, Columns.Count).End(xlToLeft).Column Step 2 ws2.Cells(1, Columns.Count).End(xlToLeft).Offset(, 1) = ws1.Cells(1, j) Next j For j = 1 To ws1.Cells(1, Columns.Count).End(xlToLeft).Column Step 2 For i = 2 To ws1.Cells(Rows.Count, j).End(xlUp).Row With ws2.Cells(Rows.Count, 1).End(xlUp).Offset(1) .Value = ws1.Cells(i, j) .NumberFormatLocal = "yyyy/m/d" End With L = ws2.Cells(Rows.Count, 1).End(xlUp).Row For k = 2 To ws2.Cells(1, Columns.Count).End(xlToLeft).Column If ws1.Cells(i, j) = ws2.Cells(L, 1) And ws1.Cells(1, j + 1) = ws2.Cells(1, k) Then ws2.Cells(L, k) = ws1.Cells(i, j + 1) End If Next k Next i Next j i = ws2.Cells(Rows.Count, 1).End(xlUp).Row j = ws2.Cells(1, Columns.Count).End(xlToLeft).Column Range(ws2.Cells(2, 1), ws2.Cells(i, j)).Sort key1:=ws2.Cells(2, 1), order1:=xlAscending For i = ws2.Cells(Rows.Count, 1).End(xlUp).Row To 3 Step -1 If ws2.Cells(i, 1) - ws2.Cells(i - 1, 1) > 1 Then k = ws2.Cells(i, 1) - ws2.Cells(i - 1, 1) - 2 ws2.Rows(i & ":" & i + k).Insert End If Next i For i = 2 To ws2.Cells(Rows.Count, 1).End(xlUp).Row If ws2.Cells(i, 1) = "" Then ws2.Cells(i, 1) = ws2.Cells(i - 1, 1) + 1 End If Next i End Sub 'この行まで ※ For~Nextを多用していますので、時間がかかるかもしれません。 他に良い方法があればごめんなさいね。m(_ _)m

noname#204879
noname#204879
回答No.5

[No.1補足]へのコメント、 》 「1000列」で間違いありません。 そうですか。でも実際に試してみてください。 あのマンマの式で行けると思います。 縦が最大200行なら、提示式中の 10000 は 200 にしてもOKです。

関連するQ&A

  • エクセルで飛び飛びの日付をきちんと補完して並べ直すには?

    こんにちは。お世話になります。 エクセルの並び替えに関して質問です。 例えば下記のような情報があったとします。 日付        値 2007/12/7    1 2007/12/9    4 2007/12/11    3 こちらを、このように飛び飛びになっていた日付を補完して 値に0を入れることは可能でしょうか? 日付        値 2007/12/7    1 2007/12/8    0 2007/12/9    4 2007/12/10    0 2007/12/11    3 現在は原始的に目視して、空いている日付に行を挿入して ひとつひとつ0を入力しております。 処理する数が多いので、これが自動で出来たらどんなに効率が 良いだろう、、と思い初めて質問させて頂きました。 お詳しい方、ご助言頂けますと幸いです。 なにとぞよろしくお願い致します。

  • エクセルで日付行を補完したいと思います

    エクセルで予定表を印刷したいと思っています。 1のような、予定がある日付だけ表示された表に行を補完して 2のような表にしたいと思います。(手書き用の表を印刷できるように) どうしたらいいでしょうか? かなり大量のデータになるのでマクロか関数で処理できれば ありがたいと思います。 よろしくお願いいたします。 1 A        B     C 1 12008年8月1日  18:00  新人歓迎会 2 2008年8月4日     10:00   佐藤さん来社  3 2008年8月4日   14:30    ミーティング 4 2008年8月7日    13:30    山本さん訪問 2      A      B   C 1 2008年8月1日     18:00 新人歓迎会 2 2008年8月2日 3 2008年8月3日 4 2008年8月4日   10:00 佐藤さん来社    5 2008年8月4日    14:30 ミーティング 6 2008年8月5日 7 2008年8月6日 8 2008年8月7日   13:30 山本さん訪問

  • Excelファイルでの処理(関数について)

    excelファイルにデータが大量にあるのですがそれを整理したいと思っております。 データの中身は 日付   時間   値 20100212 0400 14294423 20100212 0401 58290342 20100212 0402 42424242 ・   ・   ・   ・   ・   ・   ・   ・   ・   20100212 1400 52380424 20100213 0400 13489242 20100213 0401 58290424 ・   ・   ・ ・   ・   ・ ・   ・   ・ 日付と時間と値が入ったCSVファイルがあります。 値は1分ごとに書き込まれ毎日必ず同じ時間(4時~14時まで)に書き込まれます。 このファイルを 0400 0401 0402 ・・・・・・・・・14:00 20100212 14294423 58290342 42424242 ・・・・・・・・52380424 20100213   ・    ・    ・           ・ 20100214   ・    ・    ・           ・   ・    ・    ・    ・           ・   ・    ・    ・    ・           ・   ・    ・    ・    ・           ・ 20100225   ・    ・    ・           ・ 上記のように縦に日付と横に時間でそれに対応した値が入ったファイルを作成したいと思っているのですがうまく処理させる方法はないでしょうか。 いろいろ調べて手動で行う方法はわかったのですが、データは50万行くらいあるため手でコピーしたりする方法がとれません。if文やfor文(excelにあるのかわかりませんが)などの関数を使って処理はできないでしょうか。 大変困っておりますので何かいい方法ありましたら教えていただけないでしょうか。以上よろしくお願いします。

  • エクセルVBA 日付の評価、大小を比べるには

    エクセルのセルに日付データーが入っています。 その値を取得して、他のセルに入っている日付と比べたいのですが、 日付データをどの形に変換して比べればいいか分かりません。 ___|_____A_________|_____B___________|______C_____ 1_|_2007/6/1__|__2007/7/1__|____________ 2_|_2007/7/1__|__2007/7/23_|____________ 例えば上の表があったとして、A列とB列にある日付を比べて、大きい 方をC列に記入するということをVBAでしようとするとき、セルに入って いるデーター形式をどの形に変換して評価すればいいでしょうか? 日付データーをシリアル値に変換する方法とかあるのでしょうか? どなたか教えていただけないでしょうか?

  • エクセルで日付データの比較/判定でカウント

    エクセルで日付データの比較/判定でカウント A1に 2006/2/22 A2に 2006/2/23 ---------- という日付データが入っている。 またc1~c4に c1:2006/2/24+時間  (例2006/2/24 07:18) c2:2006/2/23+時間 c3:2006/2/23+時間 c4:2006/2/22+時間 ---------- という時刻まで含む日付データが入っている。 (処理)A1とC列のデータの日付けが同じものは1つc4だけなのでカウントし1件とその横の B列(B1)にカウント件数を表示したい。 B1に書く式はどのようにすればよいか。よろしくお願いします。

  • Excel VBAでデータを自動処理したい

    Excelで大量のデータ処理をしなくてはならないのですが、以下の処理をExcel VBAで自動処理できないでしょうか? どなたかお知恵をお貸しください。 (1)A、B、C列からなるリストがあります。A,B列にはそれぞれオートフィルタが設定してあり、C列は空白です。A列、B列にそれぞれ条件を設定し、抽出したデータのC列(空白)に特定のデータを入力します。A列、B列2つの条件の組み合わせが100通りくらいあり、現在手動でオートフィルタを設定し、C列にデータを入力しております。例えばA,B列の条件の組み合わせと、それに対応するC列に入力するデータを表にしたテーブルを別に作り、A,B列の条件を自動に設定して、抽出し、C列にデータを自動に入力することを、テーブルの一番上の行から最後の行まで繰り返す、というようなことをVBAでExcelにしてもらいたいのです。自分でちゃんと勉強し、調べて、それでも分からなかったらお聞きするというのが筋だと思うのですが、今この仕事に追われて、時間がありません。(ほとんど毎日午前様です。)この仕事が片付いたら、じっくりVBAを勉強したいと思っております。どうぞよろしくお願いいたします。

  • エクセルグラフ 時系列軸で日付が補完されない

    エクセル(2010)で作成するグラフで、時系列軸について質問いたします。 元データにない日付を補完して散布図を作成したいのですが、 日付が保管されません。 元データにある日付のみが等間隔で表示されます。 検索すると日付軸の書式設定画面で、「テキスト軸」のオプションボタンで 切り替える方法があったのですが、使用しているエクセルバージョンには そのオプションボタンが見当たりませんでした(添付ファイル参照)。 どのように補完すればいいでしょうか。 よろしくお願いいたします。

  • excel:日付け処理

    Excelの表で、 B列には、C列のデータがある申請処理が済んでいる(1)か済んでいない(0)かのデータ、1,0が入っています。 C列の2行目から、所属期間が次のように入っています。 処理(B列):所属期間(C列) 1:2006/1/1~2/28 0:2006/1/1~3/1 1:2006/12/1~2006/1/31 0:2006/1/1~2/28 1:2006/1/1~3/1 1:2005/12/1~2006/1/31 1:2006/1/1~2/151:a~b(と説明のため表記) ------------------------- などの所属期間情報が日付の属性として入っているものとします。このときB列の値が0のものに対して、現在日を元に、(現在日-14)≦b値≦(現在日+14)を満足していれば、処理しなければいけないということでセルを黄色に表示するようにしたい。なおもし以上の処理をする前に色の付いたC列のセルがある場合は、いったん色をクリアしてから黄色付けするようにする。 以上をマクロで書くには、どうすればよいか。もしC列に対する処理が大変ならC列のa~bというデータが、最初からC列,D列に分離されているとしてもいいです。 よろしくお願いします。

  • Excel :日付け時間データ処理

    Excelのある列に日付け時間データが入っています。 このデータを判定して時間のみが、21時から5時までに入っていればその右のセルに1を、そうでなければ0を書き出すにはどんな式を書けばいいのかに対して =IF(OR(HOUR(A1)<5,HOUR(A1)>=21),1,0) なる式を使い処理できることがわかりましたが、日付け時間データがNULLになったときは、1が表示されることになります。データがNULLなら何もしないとするにはどうすればいいでしょうか。

  • 日付に対応した○と×の合計を求めたい。Excel 2003です。

    日付に対応した○と×の合計を求めたい。Excel 2003です。 ○と×の合計はCOUNTIFで求められるのですが、「4/1の」という条件はどのようにしたらよいのでしょうか。よろしくお願いします。 A列 B列 C列        4/1  ○  4/1       ←空白 4/1     × 4/1  ○ 4/2  ○ 4/2  ○ 4/2     ×   4/2       ←空白 4/2     × 4/3  ○ 4/3     ×       求めたい結果  4/1   4/2   4/3               3    4    2

専門家に質問してみよう