dポイントプレゼントキャンペーン実施中!

先日質問いたしました件2010/12/25 10:43(日付時刻編集して保存)
下記ihyou_Pさまに教えて頂いたマクロです。
(1)データ降順を昇順して保存する。
(2)マクロブックとは別のブックで開き別名でCSV保存し最初に開いたファイルは保存しないで閉じる。
以上
ihyou_Pさまお時間がございましたらどうぞよろしくお願いします。m(__)m

Sub テスト2()
Sheet1.Select
Range("A1").Select
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\TEST.csv", Destination:= _
Range("A1"))
.TextFileCommaDelimiter = True
.TextFileColumnDataTypes = Array(5, 1, 1, 1)
.Refresh BackgroundQuery:=False
End With
cnt = Application.WorksheetFunction.Count(Range("A:A"))
Sheet2.Select
Range("A1").Formula = "=(day(Sheet1!A1)*10000)+(HOUR(Sheet1!B1)*100)+minute(Sheet1!B1)"
Range("B1").Formula = "=Sheet1!C1*10"
Range("C1").Formula = "=Sheet1!D1*10"

Range("A1:C1").Select
Selection.Copy

For X = 2 To cnt
Cells(X, 1).Select
ActiveSheet.Paste
Next

Cells.Select
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Range("A1").Select
End Sub

A 回答 (2件)

別に面倒ではありませんが,思いつきでダラダラ次々あれもこれもと継ぎ足しの質問を垂れ流すのは,マナー違反と考えてください。


新たな課題問題は新しいご相談投稿として,何が判らない出来ないのか明確にして質問を出し直すようにしてください。

#なお,その際に「誰か名指し」して回答を求めるのは,こちらの質問掲示板ではルール違反なので注意してください。つまり新しく改めて皆さんに回答を求めるべく質問内容を書き直し,前の質問を見ていた人だけにしか判らない書きぶりをしてはいけませんという事に配慮してください。


それで
>上記データは1時間毎のデータですが13:30が抜けています。

13:30が抜けていると判るのは,それが判っているあなたが見ているからです。
抜けているという意味では13:00も14:00も13:15だって抜けていて,データがありません。そういった屁理屈ではなく「どうあるべき(ロジック・機能)」をまずご自分のアタマを使って明確にして,はじめてマクロを書く事ができると承知してください。


それで結局の所,元データのA列B列は実はあんまりどうでもよくて,最初から決め打ちの
ある日付区間 の 0時半から23時半まで
という枠組みが先にあって,そこに得られたデータを埋めていきたいというのが本当にやりたかった事なのだとしたら,そういう方向でまたやり直しでマクロを組み立てていった方が正解じゃないかなと思います。


マクロの作成の基本方針の例:
1.日付区間を決定する
2.区間の日数×24行ごとに「日時分」形式の表の枠組を作成する ←ここが追加ご質問の説明不足
3.得られている元データから,用意した枠組みの該当セルに値を転記する
4.データが入らなかったセルに,それぞれ一つ上のデータを補填する

という具合に,もう一度「どうすればいいのかどうしたいのか,そしてここまでに教わった内容を勉強してなおどこが自分では出来ないのか」キチンと作戦を考えて,ご質問を書き直して改めて投稿してみてください。
    • good
    • 0
この回答へのお礼

ご指摘頂きありがとうございます。
知りたい一心で思うままに書き込みしたことをとても反省しています。
本当に身勝手な書き込みを親切な皆様どうかお許しくださいませ。
少し勉強しあらためて出直したいと思います。
またその時はご協力よろしくお願いいたします。(拝)

お礼日時:2010/12/27 08:27

C\TESTフォルダにあるTEST.csvを開いて処理し,同じフォルダにresult.csvという名前で保存し直します。


元のTEST.csvは保存せずに閉じます。


Sub macro1()
 Dim w As Workbook
 Dim r As Long

 Set w = Workbooks.Open(Filename:="C:\TEST\TEST.csv")
 w.Worksheets(1).Name = "csv"
 r = w.Worksheets(1).Range("A65536").End(xlUp).Row

 w.Worksheets.Add before:=w.Worksheets(1)
 Range("A1:A" & r).Formula = "=DAY(SUBSTITUTE(csv!A1,""."",""/""))&TEXT(csv!B1,""hhmm"")"
 Range("B1:C" & r).Formula = "=CSV!C1*10"

 Application.DisplayAlerts = False
 Range("A:C").Sort key1:=Range("A1"), order1:=xlAscending, header:=xlNo
 ActiveSheet.SaveAs Filename:="c:\test\result.csv", FileFormat:=xlCSV
 w.Close False

End Sub
    • good
    • 0
この回答へのお礼

素晴らしいです。バッチリ出来ました。
もうひとつ無理言っていいですか。

2010.12.24     16:30   13.8   11.9
2010.12.24     15:30   14.2   12.3
2010.12.24     14:30   15.6   13.4
2010.12.24     12:30   13.8   11.9
2010.12.24     11:60   14.2   12.3
2010.12.24     10:30   15.6   13.4
2010.12.24     09:30   16.2   14.2

上記データは1時間毎のデータですが13:30が抜けています。
その場合は下記のように12:30のデータをそのまま13:30に持ってくることは可能でしょうか?
(2時間抜けましても同じデータを挿入)
241630   138   119
241530   142   123
241430   156   134
241330   138   119
241230   138   119
241160   142   123
241030   156   134
240930   162   142

ご面倒でしょうが何卒よろしくお願いいたします。

お礼日時:2010/12/26 21:52

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