• ベストアンサー

エクセルVBAで作成できますか(2)

質問No.9506691に関連して添付ファイルのようなVBAを作成したい。 1:日付と時刻が同じセルで10分毎に合計を出すことはできますか。  それとも日付と時刻は別々のセルにして算出する方がいいのでしょうか。 2:抽出する項目は先に作成しておいた方がいいのでしょうか。  VBAで表示させることはできますか。 どなたかアドバイスお願いします。

この投稿のマルチメディアは削除されているためご覧いただけません。

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.1

出力先の1列目、1行目を利用者が用意しない場合と 出力先の1列目、1行目を利用者が用意する場合をサンプル掲示します。 Sub sample1()  Dim inTblSh As Worksheet '入力シート  Dim otTblSh As Worksheet '出力シート  Dim wkRow As Long  Dim PutRow As Long  Dim ColCout As Long  Dim STime As Date   '1行目の日時  Set inTblSh = ThisWorkbook.Sheets(1)  Set otTblSh = ThisWorkbook.Sheets(2)  '開始行日時算出  STime = inTblSh.Cells(2, 1).Value    wkRow = 2   'データが2行目から    '出力先クリアー  otTblSh.Cells.ClearContents ' otTblSh.Range(Cells(2, 2), Cells(2000, 4)).ClearContents  '出力先1行目編集  otTblSh.Cells(1, 1).Value = "10分単位"  For ColCout = 2 To 4    otTblSh.Cells(1, ColCout).Value = inTblSh.Cells(1, ColCout).Value  Next ColCout  Do   If inTblSh.Cells(wkRow, 1).Value = "" Then Exit Sub '終了判定   '出力行番号算出   PutRow = Int((inTblSh.Cells(wkRow, 1).Value - STime) / TimeSerial(0, 10, 0)) + 2     '1列目出力   otTblSh.Cells(PutRow, 1).Value = _    Format(STime + (PutRow - 2) * TimeSerial(0, 10, 0), "YYYY/MM/DD HH:NN~") & _    Format(STime + (PutRow - 2) * TimeSerial(0, 10, 0) + _     TimeSerial(0, 9, 0), "YYYY/MM/DD HH:NN")   For ColCout = 2 To 4  'データが2列目から4列目    otTblSh.Cells(PutRow, ColCout).Value = _    otTblSh.Cells(PutRow, ColCout).Value + _    inTblSh.Cells(wkRow, ColCout).Value   Next ColCout     wkRow = wkRow + 1  '行カウントアップ  Loop End Sub '//----------------------------------------- '//出力先の1列目、1行目を利用者が用意する場合 '//----------------------------------------- Sub sample2()  Dim inTblSh As Worksheet '入力シート  Dim otTblSh As Worksheet '出力シート  Dim wkRow As Long  Dim PutRow As Long  Dim ColCout As Long  Dim STime As Date   '1行目の日時  Set inTblSh = ThisWorkbook.Sheets(1)  Set otTblSh = ThisWorkbook.Sheets(2)  '開始行日時算出  STime = inTblSh.Cells(2, 1).Value    wkRow = 2   'データが2行目から    '出力先クリアー ' otTblSh.Cells.ClearContents  otTblSh.Range(Cells(2, 2), Cells(2000, 4)).ClearContents ' '出力先1行目編集 ' otTblSh.Cells(1, 1).Value = "10分単位" ' For ColCout = 2 To 4 '   otTblSh.Cells(1, ColCout).Value = inTblSh.Cells(1, ColCout).Value ' Next ColCout  Do   If inTblSh.Cells(wkRow, 1).Value = "" Then Exit Sub '終了判定   '出力行番号算出   PutRow = Int((inTblSh.Cells(wkRow, 1).Value - STime) / TimeSerial(0, 10, 0)) + 2   '  '1列目出力 '  otTblSh.Cells(PutRow, 1).Value = _ '   Format(STime + (PutRow - 2) * TimeSerial(0, 10, 0), "YYYY/MM/DD HH:NN~") & _ '   Format(STime + (PutRow - 2) * TimeSerial(0, 10, 0) + _ '    TimeSerial(0, 9, 0), "YYYY/MM/DD HH:NN")   For ColCout = 2 To 4  'データが2列目から4列目    otTblSh.Cells(PutRow, ColCout).Value = _    otTblSh.Cells(PutRow, ColCout).Value + _    inTblSh.Cells(wkRow, ColCout).Value   Next ColCout     wkRow = wkRow + 1  '行カウントアップ  Loop End Sub

blackcat77
質問者

お礼

2パターン教示ありがとうございました。 sample1は大変有り難いです。

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

関連するQ&A

  • VBAの作成で困ってます。

    VBAの作成で困ってます。 あるフォルダに複数のファイルがあるのですが、 そのファイル名をあるファイル「A」のシートに一覧として作成し、 さらに複数あるファイルのシート「1」のセル「A1」と「C3」を 作成したファイル名一覧のファイル名のセルの右側に抽出されるようにしようと思っています。 (複数あるファイルの書式は全て統一されています) ファイル名一覧の作成まではできたのですが、 セルの値の抽出については、 ファイルを一度開いてコピペを繰り返す方法しか(知識が未熟で)作成することができません。。。 しかしこの方法だと時間がかなりかかってしまいます。 ファイルを開くことなく、値だけを抽出してくるにはどうしたらよいでしょうか? ちなみにファイル名は毎月変わるので、特定のファイルをしてすることはできません。 ファイル名一覧で作成したファイル名をもとに、そのファイルの値を抽出しようと思っています 説明が下手で判りにくかったらすいません。。。 どなたかアドバイスいただけませんでしょうか?よろしくお願いします。

  • エクセルVBAで作成できますか。

    1分毎のデータが1時間分、項目別にあります。10分毎に各項目の合計を求めたい(Sheet2に合計を表示希望)のですが、どのように作成したらよいのか困っています。行数、列数はかなり増えるためVBAで作成したいです。どなたか教示よろしくお願いします。

  • EXCEL VBAについて

    VBAでCSVファイルをテンプレートのBBOKに読込むコードを 作り、CSVファイルから読込んだBOOK1データを集計する BOOK2を作成しています。 BOOK1・11/21・・・11/21・・・11/22・・・11/23と続きます      A     B     C      D 1  ID     店名   売上    日付 2 1104567   渋谷店  190,809   11/21 3 1102031   新宿店  209,808   11/21 4 1103450   横浜店  108,765   11/21 BOOK2・集計      A    B    C       D       E 1  ID   店名   11/21    11/22     11/23 2 1104567  渋谷店  190,809   203,487 3 1102031  新宿店  209,808   340,876 4 1103450  横浜店  108,765   547,627 ※BOOK1とBOOK2のIDの並び順は一致していません。 上記のBOOK1のデータをBOOK2に読込ませたいと考えています。 VLOOKUPやINDEX関数を使用しようかと考えたのですが、日付毎に ファイル名が違うのと、集計のファイルには外部参照をさせたくないと 考えています。 VBAで作成したいコードはBOOK1からBOOK2の日付のセルにIDを検索条件として日付毎のファイルを読込ませたいです。 フォームで日付を入力し、コピーするBOOK2のセルを指定後、BOOK1を選択するためにダイアログボックスを出したいです。 BOOK2のIDを検索条件としてBOOK1から一致する売上セルを抽出するコードだけでもわかれば何とか作成できそうなのですが、 ご教授いただけませんでしょうか?

  • 結合したセルの並び替え(エクセルVBA)

    いつもお世話になっております。 エクセルVBAについてお尋ねします。 仕事でエクセルによって、各担当者ごとの業務報告書を作成しております。 仕様を簡単に説明させていただくと。 Sheet2以降に各担当者ごとの業務報告書があり、その集計をSheet1の総括にて行っております。 各担当者のシート様式は、日付ごとにAAA項目、BBB項目、CCC項目等の項目があり、それぞれに対して担当者が記載していくようになっております(添付ファイル参照) 総括のシートも様式は担当者の様式と同じです。 VBAによって、Sheet2以降の項目を総括に転記するところまでは出来たのですが(ちょうど添付ファイルのように日付がランダムに並んでいる状態です) この後の、並び替え作業の方法が分かりません。セルの結合を行っている箇所もあるのでSortも出来そうに無いですし・・・。 現在は、添付ファイルのようにA列に日付順の順位を表記した状態で止まっております。 並び替えの方法をご指導願います。 また、並び替えが完了した後で、重複する行(添付ファイルの4月2日の箇所)を削除する方法があれば、一緒にご指導をお願いいたします。 初歩的な質問で申し訳ありませんが、よろしくお願いいたします。

  • エクセルで勤務シフト作成教えてください。

    画像を添付していますが、見えにくいかもしれないです。 プルダウンリストで10項目ほど作成し(早、遅、夜、ラ、有1、有2など)、セルB7からセルB30までそれぞれの氏名を入れセルC6からセルAG6まで日付を入力。セルAH7からセルAH30までそれぞれの合計時間を出したいのですが、計算式とプルダウンリストのたとえば早に8時間、遅に6時間と関連付けて、一人一人の合計時間を求めたいです。Sheetはすべてで1枚にしたいので、シフトの表の片隅に早 8:00、遅 6:00、夜 6:00など縦に早、遅、夜その横縦に8:00、6:00、6:00と表を作っています。休みは空白にしています。 どのようにすればいいのか教えてください。お願いいたします。

  • excel vba 作成について教えて下さい。

    excel VBAを使ってあるブックのセル範囲を別のブック(日報.XLS)のシートへコピー貼り付けをしたいのですが、コピーする側のブックがランダムに取り込まれ(例 8時間ピッチにて自動的にブックが作成される)そのブックを日にちごとに集計し、一か月ごとにまとめるということをやらなければなりません。 例)8時間ごとにフォルダが作成されます。   000001.XLS 000002.XLS   00000F.XLS ・・・・・・・・16進数にて   上記ブックのSheet1のA2:A11までの数値を別のブック(日報月報集計)のに貼り付ける。 別のブック(日報月報集計)は項目ごとに10個のシートがあり 8時間ごとのファイルのセルA2は別ブックのSheet1の日付けに対応するセルへ貼り付け B2は       Sheet2 上記操作を8時間ごと(可変可能)に自動的にコピー貼り付けをやりたいのですが ブック間のコピー貼り付け等わからないことが(初心者です。)多々あり、いろいろ調べてはいるのですが、STOPした状態です。 出来れば、初心者にも理解しやすい解説等あれば宜しくお願いします。

  • VBAでの質問

    エクセルVBAにて下記のようなことを行うにはどのようにしたら良いのでしょうか? (1)テキストデータ取り込み (2)取り込んだデータから、あるフレーズ(文字)の後に続く文字を抽出 セルに挿入 (3)その文字から次の同じフレーズまでにある特定のフレーズの後ろに続く数字を取り出し、日付と時刻に分けてセルに挿入 フレーズは 2つあります。start finish (4)間の不要な行の削除して体裁を整える。不要な項目がある為 テスト環境にてPCよりログとして出力されるデータをエクセルで 加工し結果が直ぐに分かるような表をマクロorVBAにて作成したいのです。 出来れば順序良く、ここまでだったらこの方法で、とういう風に教えて いただければ助かります。 宜しくお願いします。

  • エクセルVBA作成に関して

    VBA作成についてお願いいたします. たとえば各セルに以下のような数値があるとします    A   B  C 1 150 2 2 145 6 3 237 7 4 254 6 5 結果としてC5セルに A1*B1+A2*B2+A3*B3+A4*B4の計算をし表示するVBAを作りたいと思っています. このくらい少ない場合はよいのですが,列が多くなるといちいち計算式を書くのは大変ですし,このあたりをVBAで作れないかと悩んでいます. つまり 例表示すると Range("A1").Value とあった場合("A1")の1を2,3,...と増やしていく(あるいは減らしていく)VBAは作成可能ですか? どうも調べたかぎりでは見あたらないようなので. この表現で質問の意図は伝わったでしょうか? ご存じの方よろしくお願いいたします.

  • エクセルVBAでのスケジュール作成

    いつも大変お世話になっております。 本日も質問させてください。 会社指定の異なる2つのブックのエクセル表に自分の部署の社員全員のスケジュールを入れなければいけません。 (1つは月間、もう1つは週間で、それぞれ各月、各週毎にシートがあります。) VBAのフォームを作成し、週間スケジュールは自動でセットできるようになりました。 ですが、月間のスケジュールがうまくいかなくて困っています。 (入力フォームは共通のものを使用します。) スケジュールの表はシートが月別になっていてA列に社員名、1行目に日付、2行目に曜日、3行目に祝日が表示されるようになっています。 4行目からが各社員のスケジュールですが、1人の1日分のスケジュール入力のセルは2列×3行=6セルです。 (わかりにくいので図で表現したかったのですが、ずれて表示されてしまって余計にわかりにくいのでやめてみました。ちなみに、1人目の1日目のスケジュールのセル範囲はB4:C6となります。) そして、各セルには入力する項目が決まっています。 (この項目についてはフォームで作成済みです。) セルが多いため、Rangeを使おうと思っても指定するのが困難です。 個人的にはRangeのセルの値を別シートに作成した表からindexで検索できたらなぁ。と思っています。 できるかどうかすらわかっていませんが。(汗) もちろん、もっと効率的な方法があればそちらを教えていただきたいです。 週間スケジュールのセルから入力値をもってくる事も考えたのですが、月間は1日から必ず始まっていますが、週間は月曜日からのため、月や週によって日付が異なることなどから、やはり私には難しいのです。 よろしくお願いします。

  • Excel VBA セルの指定方法について

    Excell2013です。 次のような表(一部)があります。   日   項目      額       分類   12 ノート 250 3 この、250を、別表の分類3の列(H列)の12日の行(15行)のセルに、そこにすでに値があれば250との合計値として入力したいのです。 データによって日付も分類も違いますので、マクロで自動的に入力したいのですが、どうもよくわかりません。 このような場合のVBAでの入力先セルの指定のしかたをどうすればよいのかどなたかご教示ください。

専門家に質問してみよう