- ベストアンサー
コピー元ファイル名を自動入力する方法
- コピー元ファイル名で毎回コピペを月に数回csvファイルからマクロ登録エクセルへデータをコピーしている場合、ファイル名をマクロ編修で毎回書き換えるのを自動化する方法はありますか?
- コピー元ファイル名を自動入力するか、ユーザーがコピー元ファイル名を指定することで、以下のマクロを動かす方法があれば教えてください。
- Dim 最終行 As Integerのコードを使用して、コピー元ファイルを自動入力する方法を知りたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
既に開いているCSVファイル名を取得したいのでしたら下記方法でも取得可能です。必ずファイル名を取得したいCSVファイルがアクティブの状態でマクロを実行する事が前提です。 仮にabc.csvというファイル名の場合。 Dim Mybook, FName As String Dim MaxRow As Long Mybook = ActiveWindow.Caption FName = Replace(Mybook, ".csv", "") MaxRow = Cells(Rows.Count, 2).End(xlUp).Row mybookには"abc.csv"という変数名になります。 FNameには"abc"という変数名になります。 MaxRowは最終行取得です、数値の2はB列ですので2番目の列という意味です。 エクセルはバージョン2007から列数が2003の約倍になりました。最終行を取得するには上記方法であればバージョンが変わっても取得可能です。
その他の回答 (2)
- chie65536(@chie65535)
- ベストアンサー率44% (8742/19841)
手で入力させるのが面倒な場合は、ファイル選択ダイアログを用います。 ファイル選択ダイアログの「初期フォルダの位置」は、カレントドライブ、カレントディレクトリで決まりますから、ダイアログを呼び出す前に、カレントを変更してあげましょう。 Dim 最終行 As Integer '表の最終行を変数として定義するコード 'ダイアログボックス用の変数を宣言 Dim Fn As Variant 'ファイル名用の変数を宣言 Dim FileName As String 'カレントドライブをC:にする ChDrive "C" 'カレントディレクトリをC:\TEMPにする ChDir "C:\TEMP" 'ファイル選択ダイアログの表示 Fn = Application.GetOpenFilename("CSVファイル(*.csv),*.csv", 1, "CSVファイル選択", "開く", False) 'ダイアログで「キャンセル」をおされた場合の処理 If Fn = False Then MsgBox ("処理を中断しました") Exit Sub End If 'ダイアログからファイル名を受け取る FileName = Fn Range("A2").Select Windows(FileName).Activate 以下コピー範囲.... 最終行 = Range("B65536").End(xlUp).Row 'エクセル表の最終行↓からデータの最終行↑を検索
- chie65536(@chie65535)
- ベストアンサー率44% (8742/19841)
Dim 最終行 As Integer '表の最終行を変数として定義するコード 'ファイル名用の文字列変数の宣言 Dim FileName As String '今日の日付からデフォルトのファイル名を生成する FileName = Format(Now(), "yyyymmdd") & ".csv" 'デフォルトのファイル名を書き換える、または、ユーザーに別の名前を指定させる処理 FileName = InputBox("ファイル名を入力して下さい", "ファイル名入力", FileName) Range("A2").Select Windows(FileName).Activate (以下略)
お礼
日付の指定がユーザーに易しいと思います。 ありがとうございました。
お礼
詳しい回答ありがとうございます。 確認してやってみます。