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

VBA初心者です。
標題のやり方を教えてください。
B列に日付、C列に時間、D列にデータがあるリストが有ります(データ数1000以上)
B列は、最高で14日間、C列は同じ時間が毎日あります。(同じ時間の繰り返し)
同シート別セル(例えばM1)に別の縦軸に時間を、横軸に日付の表を作成し、
その交差する場所にデータが来るようなものをVBAで作れないかと思うのですが、いかがでしょうか
ご存知の方、教えてください
宜しくお願いします

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

  • 具体例がなかったため、画像を添付します。
    こんな感じにできますでしょうか

    「VBAでリストから表を作りやり方を教えて」の補足画像1
      補足日時:2017/08/07 11:52
  • 画像が小さかったので再添付

    「VBAでリストから表を作りやり方を教えて」の補足画像2
      補足日時:2017/08/07 11:58

A 回答 (3件)

こんにちは



ご質問が具体的でないのでコード化はできませんが、以下の考え方で可能と思います。
(他にも方法はいろいろあることでしょう)

1)データの数だけループで2)~4)を繰り返す。
2)一つのデータに対して、別シートの日付欄から該当する列を探す。
 方法は各列をループで探査しても良いし、ワークシート関数(Matchなど)
 を利用するのもあり
3)同様に時間の欄から該当する行を探す。
4)見つかった行と列のセルにデータを記入
5)2)~4)を繰り返す

※ 2)、3)で該当する欄が見つからない場合の処理を記しておく必要がありそうです。
※ 4)で。同じセルに重ねてデータを記入する場合の処理を考えておく方が良さそう。
    • good
    • 0
この回答へのお礼

早々の回答ありがとうございます。
具体例がなく、申し訳ありませんでした。
捕捉として画像を添付させて頂きました。

お礼日時:2017/08/07 11:53

画像やはり小さくて読めないんですが


重複がないならピボットッテーブルで
出来ると思います。

先頭に見出し行があるなら
リスト内のセルを選択して
挿入ピボットテーブルで
列と行に日付と時刻を割り当て
値にデータを入れれば出来るのでは?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ピボットテーブルも考えたのですが、その後の表を用いて計算等をするために断念しました。
ご意見ありがとうございました。

お礼日時:2017/08/07 23:02

こんばんは!



元データはSheet1にあり、Sheet2のM1セル以降に表示するとします。
画像通り、Sheet1のデータは3行目以降にあるとします。
今回はオートフィルタを使っていますので、Sheet1の2行目は何らかの項目名が入っているという前提です。
画像では項目名が入っていませんが、ダミーでも良いので項目を入れておいてください。

標準モジュールです。

Sub Sample1()
Dim i As Long, k As Long, lastRow As Long
Dim lastCol As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
lastRow = wS.Cells(Rows.Count, "M").End(xlUp).Row
lastCol = wS.Cells(1, Columns.Count).End(xlToLeft).Column
Application.ScreenUpdating = False
If lastCol > 12 Then
Range(wS.Cells(1, "M"), wS.Cells(lastRow, lastCol)).Clear
End If
With Worksheets("Sheet1")
lastRow = .Cells(Rows.Count, "B").End(xlUp).Row
Range(.Cells(2, "B"), .Cells(lastRow, "B")).AdvancedFilter Action:=xlFilterCopy, copytorange:= _
wS.Range("M1"), unique:=True
For i = 3 To lastRow
If .Cells(i, "B") > .Cells(i - 1, "B") Then Exit For
.Cells(i, "C").Copy wS.Cells(1, Columns.Count).End(xlToLeft).Offset(, 1)
Next i
For k = 2 To wS.Cells(Rows.Count, "M").End(xlUp).Row
.Range("B:B").AutoFilter field:=1, Criteria1:=Format(wS.Cells(k, "M"), "yyyy/m/d") '//←表示形式に注意★//
Range(.Cells(3, "D"), .Cells(lastRow, "D")).SpecialCells(xlCellTypeVisible).Copy
wS.Cells(k, "N").PasteSpecial Paste:=xlPasteAll, Transpose:=True
Next k
.AutoFilterMode = False
wS.Range("M1").CurrentRegion.Columns.AutoFit
wS.Activate
wS.Range("M1").Select
Application.ScreenUpdating = True
MsgBox "完了"
End With
End Sub

※ 日付のフィルタはかなり厄介です。
コード内に記載している「★」の行のようにSheet1のB列(日付列)の表示形式は
実際の表示形式に合わせてください。m(_ _)m
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
コード化まで重ね重ねありがとうございました。

コピーさせて頂き、項目名を設定後使用させて頂きます。
ありがとうございました

お礼日時:2017/08/07 23:04

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