No.1
- 回答日時:
少々条件が・・・
ファイル名の日付(xxx6_19)の意味があいまい(xxxは?)なので月日5桁で考えています。(6月1日は06_01、12月1日は12_01)9月までが月1桁だと判定に苦しみそうです。ファイル名には年月日以外の数値がないとか別の条件があれば簡単ですが。
また、年をどうされているか分かりませんが、Left(Right(Dummy, 9), 5)を少し変形すれば対応できるでしょう。(今はファイル名から月日を切り取っています)
下記は、月日5桁で一番大きいファイル名を探し、開いています。別シートになります。
この後、
1.データ→並べ替えで上位5番目までを見る、または
2.データ→フィルタ→オートフィルタでトップテンを選んで上位または下位5を選択
1または2も自動にする?のはキー記録でできそうですが・・・
コントロールツールボックスのボタンのマクロ。「myDir」を合うように変更してください。
Private Sub CommandButton1_Click()
Dim myDir As String 'ファイルガあるドライブとフォルダ
Dim myFileName As String '探すファイル名(ワイルドカード)
Dim Dummy, mySchFileName As String '作業用ファイル名と見つかったファイル名
Dim chkMD As String 'ファイルがもつ月日
myDir = "C:\My Documents\" 'ご自分のフォルダを指定してください。\あり
myFileName = "*.csv" '月日は4桁
Dummy = Dir(myDir & myFileName)
While Len(Dummy) > 0
If chkMD < Left(Right(Dummy, 9), 5) Then
chkMD = Left(Right(Dummy, 9), 5)
mySchFileName = Dummy
End If
Dummy = Dir
Wend
If mySchFileName <> "" Then
Workbooks.Open Filename:=myDir & mySchFileName
Else
MsgBox "ファイルがありません"
End If
End Sub
回答ありがとうございます。内容不十分ですみません。日々更新されるファイル名は「000001-sdfghfj-2001-6-21」といった具合です。データ並び替えは上手くいったんですがフォルダ内より最新ファイル取り出し(検索)が上手くいかず・・
No.2
- 回答日時:
VBEのシート(Sheet1等)のコードウインドウに貼り付けてマクロを実行してください。
年4桁、月・日(1桁か2桁)の一番最近のファイルを開きます。 「myDir」はご自分のドライブ+フォルダに変更してください。
Excel2000だとSplit、InStrRev関数等を使って書けますが、Excel95、97でも動くようにしてあります。
Sub CommandButton1_Click()
Dim myDir As String 'ファイルガあるドライブとフォルダ
Dim myFileName As String '探すファイル名(ワイルドカード)
Dim Dummy As String '作業用ファイル名と見つかったファイル名
Dim mySchFileName As String '作業用ファイル名と見つかったファイル名
Dim YMD8old, YMD8new As Long 'ファイルがもつ年月日(比較用)
myDir = "C:\My Documents\" 'ご自分のフォルダを指定してください。\あり
myFileName = "*.csv" '月日は4桁
Dummy = Dir(myDir & myFileName)
While Len(Dummy) > 0
YMD8new = ymdHenkan(Dummy)
If YMD8old < YMD8new Then
mySchFileName = Dummy
YMD8old = YMD8new
End If
Dummy = Dir
Wend
If mySchFileName <> "" Then
Workbooks.Open Filename:=myDir & mySchFileName
Else
MsgBox "ファイルがありません"
End If
End Sub
'ファイル名の年月日を8桁にする
Function ymdHenkan(myFileName As String)
Dim wkFLname As String 'ワーク
Dim L As Integer 'カウンタ
Dim yy, mm, dd As String '年、月、日
Dim pot(4) As Integer '「-」の位置
Dim potIdx As Integer '「-」の位置の順
wkFLname = myFileName & "-"
For L = Len(wkFLname) To 1 Step -1
If Mid(wkFLname, L, 1) = "-" Then
potIdx = potIdx + 1
pot(potIdx) = L
End If
If potIdx = 4 Then Exit For
Next
yy = Mid(wkFLname, pot(4) + 1, pot(3) - 1 - pot(4))
mm = Right("0" & Mid(wkFLname, pot(3) + 1, pot(2) - 1 - pot(3)), 2)
dd = Right("0" & Mid(wkFLname, pot(2) + 1, pot(1) - 5 - pot(2)), 2)
ymdHenkan = Val(yy & mm & dd)
End Function
回答ありがとうございます。早速試みたところ”ファイルが見つかりません!”とダイアログ表示されてしまいました。初歩的な質問で大変申し訳ありませんが、 >myDir = "C:\My Documents\" 'ご自分のフォルダを指定してください。\あり’この1行だけ入れ替えればいいんですよね!?
No.3
- 回答日時:
修正する箇所は1箇所です。
フォルダをセットし、最後に\があればいいです。多分、そうされてのことだと思い、なぜ動かないか考えてみました。
私は、csvファイルということで、ファイルの拡張子がcsvだと決めて作っています。#1の「お礼」にあるファイル名から推測すると拡張子が無いような気がします・・・下記に拡張子が無いcsvファイルを読めるようにしてみました。拡張子が無ければこちらを試してください。
Sub CommandButton1_Click()
Dim myDir As String 'ファイルガあるドライブとフォルダ
Dim myFileName As String '探すファイル名(ワイルドカード)
Dim Dummy As String '作業用ファイル名と見つかったファイル名
Dim mySchFileName As String '作業用ファイル名と見つかったファイル名
Dim YMD8old, YMD8new As Long 'ファイルがもつ月日
myDir = "C:\My Documents\" 'ご自分のフォルダを指定してください。\あり
myFileName = "*.*"
Dummy = Dir(myDir & myFileName)
While Len(Dummy) > 0
If InStr(Dummy, ".") = 0 Then
YMD8new = ymdHenkan(Dummy)
If YMD8old < YMD8new Then
mySchFileName = Dummy
YMD8old = YMD8new
End If
End If
Dummy = Dir
Wend
If mySchFileName <> "" Then
Workbooks.OpenText Filename:=myDir & mySchFileName, DataType:=xlDelimited
Else
MsgBox "ファイルがありません"
End If
End Sub
'ファイル名の年月日を8桁にする
Function ymdHenkan(myFileName As String)
Dim wkFLname As String 'ワーク
Dim L As Integer 'カウンタ
Dim yy, mm, dd As String '年、月、日
Dim pot(4) As Integer '「-」の位置
Dim potIdx As Integer '「-」の位置の順
wkFLname = myFileName & "-"
For L = Len(wkFLname) To 1 Step -1
If Mid(wkFLname, L, 1) = "-" Then
potIdx = potIdx + 1
pot(potIdx) = L
End If
If potIdx = 4 Then Exit For
Next
yy = Mid(wkFLname, pot(4) + 1, pot(3) - 1 - pot(4))
mm = Right("0" & Mid(wkFLname, pot(3) + 1, pot(2) - 1 - pot(3)), 2)
dd = Right("0" & Mid(wkFLname, pot(2) + 1, pot(1) - 1 - pot(2)), 2)
Debug.Print ymdHenkan
ymdHenkan = Val(yy & mm & dd)
End Function
事細かく回答頂き本当にありがとうございます。
しかし解決されませんでした・・・前回と同じように「ファイルが見つかりません」と表示されます。おっしゃるように拡張子は表示していませんでした。で表示させて試みてもダメでした・
No.4
- 回答日時:
拡張子(.csv)があるようなのでANO.#2を使います。
確認ですが、ご自分のフォルダを指定してください。\あり」 の「ご自分のフォルダ」はcsvファイルがあるフォルダです。「\あり」は「C:\xxxxx\xxxxx\」のように登録して最後に「\」が必要ということです。
また、下記の様にしてみて下さい。実行した後、イミディエイトウインドウ(もしくはデバッグウインドウ)を開いて、開こうとしたファイル名を確かめてください。ドライブ名+フォルダ名+ファイル名になっていて、各々は\でつながっているでしょうか。何も表示されなかったら、拡張子が.csvではないか、指定したフォルダに.csvファイルがないような気がします。
最後のメセージを修正したのは、マクロからのメッセージかどうか確かめたいからです。確認をお願いします。また、マクロの先頭に「Option Explicit」が無ければ入力してください。スペルミスがあるかもしれません。マクロはコピーして貼り付けられました?
それと、Excelのバージョンは?
途中から・・・
myDir = "C:\My Documents\" 'ご自分のフォルダを指定してください。\あり
myFileName = "*.csv" '月日は4桁
:
:
If mySchFileName <> "" Then
Debug.Print myDir & mySchFileName '*** 追加します ***
Workbooks.Open Filename:=myDir & mySchFileName
Else
MsgBox "ファイルがありません(マクロのメセージ)" '*** 修正します ***
End If
End Sub
本当に事細かくアドバイスありがとうございます。
しかし、結論からいいますとダメでした。
アドバイス通り試みイミデイエイトウインドウで確認したところ、
なにも表示されていませんでした。
拡張子も表示していますし、ファイルのあるフォルダ名も入力ミスはないと思います。(ファイルのプロパティから{場所}をコピーしてあてはめています)
バージョンはExcel2000です。
尚、マクロはコピーできています。
コード等全くわからない為、応用が利かないのが現実です。
もう一度ファイル名を確認します「101010-keymans-2001-6-21.csv」
といった具合です。
度重なる内容不十分で大変申し訳ありません。
No.5
- 回答日時:
ANo#2に下記の4行を追加し実行結果のイミディエイトウインドウの内容を補足して下さい。
最初の2、3件と最後の2、3件を見たいので、途中はカットしてもらってかまいません。それに、ダイアログのメッセージは私の作ったダイアログの文言でしょうか。myDir = "C:\My Documents\" 'ご自分のフォルダを指定してください。\あり
myFileName = "*.csv" '月日は4桁
Debug.Print myDir & myFileName & ":初期値" '*** 追加 ***
Dummy = Dir(myDir & myFileName)
Debug.Print myDir & Dummy & ":検索1回目" '*** 追加 ***
While Len(Dummy) > 0
YMD8new = ymdHenkan(Dummy)
If YMD8old < YMD8new Then
mySchFileName = Dummy
YMD8old = YMD8new
End If
Dummy = Dir
Debug.Print myDir & Dummy & ":継続検索" '*** 追加 ***
Wend
Debug.Print myDir & mySchFileName & ":検索結果" '*** 追加 ***
If mySchFileName <> "" Then
アドバイス通りコード追加して実行したところ
イミディエイトウインドウに検索・検索結果が順に表示され・・
検索結果をよくみるとちゃんと指定したフォルダから
最新日時のファイルを検索していました。
なにかよくわからないまま解決したような感じで・・
本当にありがとうございます。
あつかましいですがその開いたファイルを次の処理として
更新日時でソートし昨日・今日の日付分の行を薄く塗りつぶす!
このようにしたいのですが、マクロをどこに書くのか分からず、
また書く場所によって違いますよね!?
ようは最新ファイルを開いたあとその処理をしたいのですが?
ファイルの内容は
A列 B列 C列・・・ AL列 AM列
名前 住所 TEL 登録日時 更新日時
といった具合に配列してあります。
No.6ベストアンサー
- 回答日時:
>更新日時でソートし昨日・今日の日付分の行を薄く塗りつぶす!
cvsファイルを呼び出すために使っているブックの標準モジュールに貼り付けます。
少し不明点が・・・。ソートは逆順にしています。(昇順はxlAscendingにします)
昨日、今日をどうつかむか・・・。今はパソコンの機械日付<Now()>を今日にしています。
薄く塗りつぶす・・・。カラーインデックス15等を適当に使っています。
csvデータの最初は表題と考えています。(ソートに関係します)
うまくいけばいいですね。では。
Public Sub CSVdataSort()
Const ksYMD = "AM" '更新日時の列名
Dim w As Workbook 'ブック
Dim CsvShtName As String 'csvファイルを読み込んだブック
Dim CsvFileCot As Integer 'csvファイルの個数
For Each w In Application.Workbooks
If Right(w.Name, 3) = "csv" Then
CsvShtName = w.Name: CsvFileCot = CsvFileCot + 1
End If
Next
If Len(CsvShtName) = 0 Then 'ファイルなしの場合
MsgBox "CVSファイルがありません": Exit Sub
End If
If CsvFileCot > 1 Then
MsgBox "CVSファイルが複数あります。中断します": Exit Sub
End If
'元のシートから読み込んだCVSファイルを操作
Windows(CsvShtName).Activate 'アクティブにする
Cells.Select 'シートを選択
Cells.EntireColumn.AutoFit '列幅を自動調整する
ActiveSheet.UsedRange.Select 'データ部分を選択
'更新日時で降順にソート
Dim sKey As Range 'ソートキー
Set sKey = Range(ksYMD & "2")
Selection.Sort Key1:=sKey, Order1:=xlDescending, Header:=xlGuess
'今日、昨日の行に色を付ける
Dim rg As Range '更新日時データ範囲
Dim rgRow As Long '色を付ける行
Dim rowNum As Integer 'データ範囲の行数
Dim colNum As Integer 'データ範囲の列数
With ActiveSheet
rowNum = .UsedRange.Rows.Count
colNum = .UsedRange.Columns.Count
For Each rg In .Range(ksYMD & "2:" & ksYMD & rowNum)
rgRow = rg.Row
With Range(Cells(rgRow, 1), Cells(rgRow, colNum))
If rg = Int(Now()) Then '今日
.Interior.ColorIndex = 15 'カラーインデックス15
End If
If rg = Int(Now() - 1) Then '昨日
.Interior.ColorIndex = 34 'カラーインデックス34(36も薄い色?)
End If
End With
Next
Range("A1").Select
End With
End Sub
パソコン復旧作業の為、少し空いてしまいました。その間に回答ありがとうございます。アドバイス通り作業すると順調にいきました!そこでしめとしてB、C、D列を非表示にしたいのですが・・・「もっと早言えよ!」と言われそうですが・・・それと基本的な事ですが現在メニュー画面としてボタンを2つ用意し,1つ目は検索用として特定フォルダから最新ファイルを選択、もう1つはそれを更新日時でソートし尚且つ今日昨日の行に色を付けるように出来ました。本当にありがとうございます。作業上、便宜を図るために1つ目のボタンをクリックし、最新ファイルを検索後”その表示したシート上に2つ目のボタン作成し実行、若しくは最新ファイル選択後、一旦メニュー画面に戻り2つ目のボタンをクリック!”ってな具合にしたいのですが。どちらかと言えば後者の方を・・・
意味分かります!?ようは処理させたところにボタンがあり連続して作業が出来るようにしたいのですが。もちろんワンクリックすべての処理が出来ればそれに越したことはありません。何も分からずして毎回ずうずうしくてすみません・・・非表示の分とあわせてよろしくお願いします。
~~~現在パソコンが不安定な状態でいつフリーズするかヒヤヒヤしながら作業している毎日です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数のCSVファイルを横に並べて...
-
複数のデータ系列の線の太さを...
-
ファイルリネームの良い知恵を...
-
エクセルでツールバーに「縮小...
-
アクセスでファイルを開いたと...
-
エクセルファイルを自身のファ...
-
Excelが勝手にシート移動してし...
-
Excel VBAで、実行時にsheet上...
-
コピーしたファイルのマクロを...
-
Pictures.Insertメソッド⇒Shape...
-
エクセル終了時の保存確認メッ...
-
Excelのマクロで最下行を選択し...
-
エクセルVBAでmeに相当するもの...
-
VBAを一度起動するとずっと出て...
-
エクセルで、ハイパーリンクを...
-
エクセルの単票を一覧表に
-
作成したマクロを共有
-
エクセルマクロで質問ですが、...
-
個人用マクロブックにマクロを...
-
VBAで他のブックのVBAを開く方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの指数を無効にしたい
-
excelインポート時の「実行時エ...
-
複数のCSVファイルを横に並べて...
-
VBAでCSVの1行目だけを書き換え...
-
「ほかのアプリケーションを無...
-
大量のCSVデータを1つのエ...
-
二つのCSVファイルを照らし合わ...
-
CSVファイルの結合(重複データ...
-
Excel VBAを使った複数のCSVフ...
-
EXCELにcsv形式の外部データを...
-
複数個のascファイルを1つ...
-
datファイル→csvファイル→datフ...
-
VBAでユーザーフォーム上に参照...
-
EXCELLの動きが遅い
-
【エクセル VBA】CSVファイルの...
-
EXCELで外部データの取り込みが...
-
複数のcsvファイルを1つのEXCEL...
-
【VBA初心者】同じフォルダ内の...
-
メディアプレイヤーのデータを...
-
fortranで読み込んだ複数ファイ...
おすすめ情報