• 締切済み

excel時間データを抽出+countifsの応用

(1) ●● XX 12:00 △△ ■■ ★★ ** ○○ XX 00:04 ▲▲ □□ ☆☆ ** ○● XX 23:34 △▲ □□ ★☆ ** ・ ・ という様なデータがあります。 23:00台~05:00台までの1時間ずつの、7つの枠に分け、上記データ(横一列が1データ)から必要な情報だけ別シートに表示させたいです。 例) 23:00台 23:34 △▲ ○● XX ★☆ 00:00台 00:04 ▲▲ ○○ XX ☆☆ (2) 条件のセル A1セルにDと入力してある。 ↓最後のセルを表示 ↓1文字1セル ↓数字  E    ABCDE       2 W    EXRDW      1 D  JOWPRD      2 N   DUQKLN      3 上記のようなデータがあります。 横一列のデータを1データとみて、最初と最後の文字(=セル)以外で、 条件のA1セル(D)があれば、右端の数字を足し算したい。 e.g. 条件がD、両端の数字はカウントしないので、答えは2+1です。 本当に困っています。。。宜しくお願い致します。

みんなの回答

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

(1)、(2)の二つともVBAで処理致します。 ①Alt+F11でVBEを開く ②挿入→標準モジュールを選択して新規標準モジュールを作成 ③下記のVBAコードを貼付 ④右上の×または、Alt+F11でVBEを閉じる ⑤Alt+F8または、表示→マクロから「sample1」または、「sample2」を実行 ▼マクロの動作について 「sample1」は、ご提示の(1)の処理をするマクロ  → 設定したシート及び値に対してデータを取得・出力を行います。 「sample2」は、ご提示の(2)の処理をするマクロ  → 現在表示されているシートに対してご提示の処理を行います。     出力結果をB1セルに書き出して、該当のセルを選択した状態にします。 ▼マクロの設定について 「sample1」はコード内の「設定」と書かれたコードを修正することで、ある程度の設定を変更できます。 必要に応じて変更してください。(出力先シートはあらかじめ作成してください) 【Set mySt(0) = Worksheets("Sheet1")】 ← データシート 【Set mySt(1) = Worksheets("Sheet2")】 ← 出力先シート  → 初期の状態ではデータが記載されているシート「Sheet1」を     「Sheet2」に書出します。 【tList = Array(23, 0, 1, 2, 3, 4, 5)】  → 23時~5時までの順番で「00:00台」を集計します。 【outCol = Array(3, 4, 1, 2, 6)】  → 見つかった行の3,4,1,2,6列の順番でデータを書出します。 ■VBAコード '(1)のコード―――――――――――――――――――――― Sub sample1() Dim i As Long, j As Integer, k As Integer Dim tList As Variant, outCol As Variant Dim cnt As Long, flag As Boolean, mySt(1) As Worksheet '///////////////設定/////////////// 'データのシートを指定 Set mySt(0) = Worksheets("Sheet1") '出力先のシートを指定 Set mySt(1) = Worksheets("Sheet2") '出力する時間帯及び順番をカンマ区切りで指定 tList = Array(23, 0, 1, 2, 3, 4, 5) '出力する列の順番をカンマ区切りで指定 outCol = Array(3, 4, 1, 2, 6) '////////////////////////////////// mySt(1).Cells.ClearContents With mySt(0)   For j = 0 To UBound(tList)     flag = False     cnt = cnt + 1     mySt(1).Cells(cnt, "A") = Format(tList(j), "00") & ":00台"     For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row       If Hour(.Cells(i, "C")) = tList(j) Then         flag = True         cnt = cnt + 1         For k = 0 To UBound(outCol)           mySt(1).Cells(cnt, k + 1) = .Cells(i, outCol(k)).Text         Next k       End If     Next i     If flag = False Then       Cells(cnt, "A").ClearContents       cnt = cnt - 1     End If   Next j End With End Sub '(2)のコード―――――――――――――――――――――― Sub sample2() Dim i As Long, j As Long, ans As Integer, myRow As Range For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row   For j = 3 To Cells(i, Columns.Count).End(xlToLeft).Column - 2     If Cells(i, j) = Range("A1") Then       If myRow Is Nothing Then         Set myRow = Cells(i, j)       Else         Set myRow = Union(myRow, Cells(i, j))       End If       ans = ans + Cells(i, Columns.Count).End(xlToLeft)       Exit For     End If   Next j Next i If Not myRow Is Nothing Then myRow.Select Range("B1") = ans If ans = 0 Then Range("A1").Select End Sub

関連するQ&A

  • エクセルで困ってます

    現在家計簿的なものを作っています。 足し算のところで調べてもお手上げ状態です。 現在わからないところは下記になります。 1、セル5つ(横一列) (数値は一つのセルに1文字まで入力可能。 つまり1~5セルの数字を入力できます。) 2、セル5つ (ここにも上と同じように1~5桁の数字を入力します) 3、セル6つ (ここに1と2の合計を一セル一文字づつ表示させたいです。) つまり1+2=3にしたいです。 一セルなら普通にSUMとやってできるのですが、1~5のセルにそれぞれ 数字を入力していくのでどうやって計算したらいいかわからないです・・・。

  • エクセルでデータから文字を抽出には?

    仕事で非常に困っています。補足は月曜日にさせていただきます。 シート1に下記のデータがあり、シート2にシート1のデータをもってきたいのです。 シート2の数字は自動で別シートからリンクさせてあります。 シート2の数字の横にシート1のデータと一致する文字を表示させたいです。 シート1      A     B     C ・ ・ L  1    1    0     0     0 あ 2    1    1     0     0 い 3    1    1     1     0 う ・ ・ 3000 Aは1から30まで、Bは1から50までCからLは3桁台まであります。 シート2    A  B  C  D   E  F ・・・・ 1  1 あ  1  い  1  う         2 3 ・ ・

  • エクセルのデータ抽出

    今エクセルのデータ抽出に困っています。 14:00:00.862072 文字列(以下すべて数字、英字混合) 14:00:00.862114 文字列 14:00:00.862359 文字列 14:00:00.862367 文字列 というデータがあり、 14:00:00.[この部分!!] 文字列 だけを抽出したいのです。 しかし、コピー&ペーストを行って貼り付けたので この長い1行が1つのセルにすべて入ってしまっています。 どこのサイトも、セルが違うと、抽出はできるように書いてあるのですが....。 このデータはすべて1つのセルに長い1文が入ってしまっています。 この場合、抽出することは不可能でしょうか? やりかたがあったら、ぜひ教えてください。

  • excelのデータ抽出

    縦軸の条件と横軸の条件からデータを抽出する方法を教えてください。 以下のような表があります。    A  B   C   D   E  ・・・・ 1    0.5  2.5  3.1  5.5 2 40   2  5   10  3 3 55 4 35 1行およびA列の値を別セルに入力して、クロスするデータを出したいのですが、例えば別セル(1)に40と入力し別セル(2)に5.5と入力すれば、別セル(3)に3と抽出したいです。 また、出来れば別セル(2)に入力する値が表にない場合、入力した値より大きな値で一番近い値を読み取れればベストなんですか。 例えば別セル(2)に5.4と入力した場合には5.5の列を抽出 なにか良い方法はありますか? よろしくお願い致します。

  • エクセル2007 一覧表よりデータを抽出したい

    下記のデータ表から、 A列が同じ数字のC列の文字列を別のセルに間を開けずに結合したいのです。 A列 B列 C列 9   0   い 9   1   し 11  0   あ 12  0   す 13  0   こ 13  1   か 13  2   え 17  0   あ 数値の条件: A列:番号(0から1000くらいまでで昇順で並びます。連続していません) B列:A列番号の枝番号(0から20くらいまで) C列:文字列で、いろいろな文字が入り、文字数は一定しません この表から、D列にA列の番号がダブらずに入り、E列に結合した文字列を 空き行が出ないように表示させたいのです。 D列 E列 9  いし 11 あ 12 す 13 こかえ 17 あ なんとか試してみましたが、枝番号の数だけ空きが出来てしまう方法しか 私の知恵では考えられませんでした。 ↓このような感じです… D列 E列 9  いし 11 あ 12 す 13 こかえ 17 あ ご教授のほどよろしくお願いします。

  • Excel VBAでオートフィルタで抽出したデータの一部だけ貼り付けるには(第2弾)

    今週質問タイトルの件で回答いただき解決したのですが、更なる操作を希望したく質問させていただきました。内容は Sheet2にあるデータに複数条件でソートをかけ、ある数字(1から18まで)を入れたら、オートフィルタでE列のデータの選択部をSheet1のある部分に1行貼り付けるという作業です。以下のInputBoxに数字を入れるところからです。 (ソート後、どの数字を入れるか判断) ↓ InputBoxにある数字"○"(1から18まで)を入れる ↓ オートフィルタE列「"○-"で始まる」or「"-○"で終わる」 ↓ 抽出されたデータの右隣のF列(1列だけ)のデータ(上から17個分)を選択 ↓ 選択部をコピー ↓ Sheet1を選択。Sheet1の"K5"セルに行列を入れ替えて貼り付け というものでしたが、これはできました。ここから先です。 Sheet1のU5セルに先ほどインプットした数字"○"(1から18までのどれか)を入れる ↓ Sheet2にてオートフィルタE列「"○-"で始まる」or「"-○"で終わる」によって抽出されたデータの一番上の文字列から「"○-"」もしくは「"-○"」を除いて残った数字(○を除く1から18までの数字)をSheet1のW5セルに(先ほどのセルとは1個飛ばして)入れる ↓ 以下抽出されたデータの上から2番目の文字列を同様に操作し、1個飛ばしのセルY5に入れる。これがBC5セルまで続く というものです。難しいとは存じますが、どなたか教えていただけませんか? よろしくお願いいたします。

  • エクセルでのデータ抽出について

    エクセルでのデータ抽出について質問です。 現在、エクセルで以下のようなシートがあります。 *アルファベットと数字はエクセルシートの座標です。データではないです。 _|__A___|__B___|__C___|__D__|  1|_太郎_|_次郎_|_三郎_| 2|__@___|__@___|__ ___| 3|__@___|__@___|__ ___| 4|__@___|__ ___|__@___| 5|__@___|__ ___|__@___| 上記のように1行目には人の名前が入っていて、二行目以降には@が入っているシートです。 現在、私のやりたいことはDセルの2~5行目までに何かしら数式を入れて、シートを行で見たときに@が入っている人の名前をDセルに表示をさせたいです。 具体的に言うと、D2には『太郎・次郎』、D5には『太郎・三郎』といった具合です。 どなたかこの処理が簡単にできる関数や方法をご存知の方はいらっしゃいませんでしょうか? 実際にはデータシートが1000行ほどあって手打ちだとなかなか骨が折れる仕事です。。。 どなたかご助言お願いいたします。 よろしくお願いいたします。

  • RSSのデータをエクセルに効率的に表示させたい

    現在楽天証券のリアルタイムスプレッドシートという物を使っております これをもう少し効率良く使いたいのですがエクセル初心者のため どうも応用が効きません ご協力をお願いします 仮にセルに以下のように記述したとします =RSS|'4755.Q'!現在値 すると”楽天”の株価の現在値が表示されます これは"4755"という数字が楽天の証券番号をあらわしているからです この他に =RSS|'4755.Q'!出来高 と入れれば楽天のその日の出来高が表示され =RSS|'4755.Q'!前日比 と入れれば楽天の前日比を見ることができます これをセルに横一列に表示させたとします すると 現在値,出来高,前日比 の数字が横一列に表示されます しかし、このデータを楽天のデータでなく 別の会社のデータに変更したいとします 仮にそれがYahooだとしたら証券番号は4689になります しかし既に楽天のデータが横一列に並んでおります =RSS|'4755.Q'!現在値, =RSS|'4755.Q'!出来高, =RSS|'4755.Q'!前日比, これら横一列全ての4755という数字を4689の数字に置き換えるのは 非常に手間です (実際もっと多数の銘柄を扱うため) そこでこの横一列にならんだセルの一番左に証券番号を入れ その番号に応じて横一列全てのデータが変化するように設定できませんか? つまり、横一列の関数が =RSS|'4755.Q'!現在値, =RSS|'4755.Q'!出来高, =RSS|'4755.Q'!前日比, であっても そのセルの一番左(Aのセル)に異なる証券番号を入れれば 関数の証券番号を表す部分だけが変化するということです かなりややこしい質問で申し訳ないのですが よろしくお願いします

  • Excelで抽出、書き出しを繰り返すマクロ

    ExcelのD列に下記のように記載されたExcelの表があります D1 20(150) D2 300(100) D3 40(60) D4 月 10 / 火 15 / 水 200 / 木 50 / 金 52 / 土 20 / 日 100 / D5 空欄 D6 全角文字 D7 半角数字 D8 10(50) D9 200(200) D10 30(90) D11 月 30 / 火 18 / 水 100 / 木 150 / 金 352 / 土 120 / 日 150 / D12 全角文字 ・ ・ ・ これを、下記のように横一列に書き出したいです E1=20,F1=300,G1=40 (D1~D3の()の左側の数値) H1=150,I1=100,J1=60 (D1~D3の()の中の数値) K1=10,L1=15,M1=200,N1=50,O1=52,P1=20,Q1=100 (D4の曜日と/の間の数値) D1~D3(D8~D10)は全て半角です D4(D11)は曜日以外のスペースや数字、/は全て半角です D5~D7のようなセルが何個か間に入りますが(上の例では3個ですが、4個だったり5個だったりランダムです) D1~D4と同じ書式のセルが何度もでてきます。 その都度、横の欄に書き出せればと思っています。 (D8~D11のように同じ書式が出てきた場合はE8~Q8に書き出す形) 上手く説明できなくて申し訳ないのですが この作業を繰り返してくれるマクロを作成していただく事は可能でしょうか? 色々と指定が多いので、不可能でしょうか… もし可能なようでしたら、大変ご面倒おかけしますが 作成していただけますと助かります。よろしくお願いします。

  • Excel ある条件で大量のデータを計算するには

    Excelで、縦は500行からそれ以上あるデータを下記の条件で計算を行いたいのですが、どのようにしたら宜しいでしょうか。 大量のデータであっても、簡単に計算が可能な方法をご教授頂けると有難いです。 1)A+Bでマイナス200で計算されたセル(Bが-200のセル)は、ここで完了するので、C'とD'とFでは計算しません。 2)Bが0で尚且つCが-200以下のセルのみ、A+Cで計算し、ここで完了するので、D'とFでは計算しません。 3)上記1)2)でマイナスされず、Dに-200の数値が入っているもののみ、A+Dで計算し、ここで完了するので、Fでは計算しません。 4)上記1) 2) 3)でマイナスされなかったセルのみ、FでE-Aの値を計算します(B’, C’, D’の数値は特に残す必要がなくFの結果だけ分かれば良いです)。Fでは、上記 1) 3)でマイナスされた場合-200の数値、また上記 2)でマイナスされた場合その数値(例えば-300、-500など)をセルに表示させる必要があります。 ※ BとDは、0か-200の値が入っています ※ Cは全て0かマイナスの値ですが、様々な数字が入っています ※ Eにも様々な値が入っています ※ B,C,Dには既に計算式が入っています 分かりづらく申し訳ありません。 具体的には、このように計算を行いたいです。  A    B   B’   C   C’    D   D’   E    F 15750 ー200 15550 ー450 15550  ー200 15550 15600 ー200 15680    0 15680 ー200 15480  ー200 15480 15550 ー200 15550 ー200 15350  ー30 15350    0 15350 15480 ー200 15460   0 15460  ー300 15160 ー200 15160 15260 ー300 15380 ー200 15180 ー130 15180 ー200 15180 15300 ー200 15550   0 15550 ー500 15050 ー200 15050 15000 ー500 15540   0 15540  ー20 15540 ー200 15340 15550 ー200 15530   0 15530  ー10 15530   0  15530 15630 100 15620   0 15620  ー80 15620   0  15620 15600 ー20 B’(上記1)の条件) C’(上記2)の条件) D’(上記3)の条件) F (上記4)の条件) Windows 8.1でして、Excelのバージョンは2013です。 大変申し訳ございませんが、解り易いご回答をお待ちしております。 どうぞ宜しくお願い申し上げます。

専門家に質問してみよう