
エクセルファイルをダイヤログを表示させて名前を付けて保存したいのですが、
以下のコ-ド、' A列の最終行の数字を取得
lastRow = ThisWorkbook.Sheets(1).Cells(ThisWorkbook.Sheets(1).Rows.Count, 1).End(xlUp).Valueの部分で型が一致しませんとエラーメッセージが出ます。
エラーメッセージを出さずに保存するにはどこを修正すればよいのでしょうか?
どなたかご教示願います。
よろしくお願いいたします。
Sub ファイル保存()
Dim folderPath As String
Dim fileName As String
Dim dateStr As String
Dim c3Content As String
Dim d3Content As String
Dim e3Content As String
Dim f3Content As String
Dim customName As String
Dim lastRow As Long
Dim formattedF3Content As String
Dim formattedCombinedContent As String
' 保存先フォルダのパスをダイアログで選択
folderPath = "C:\Users\t-tai\OneDrive\デスクトップ\図番"
' A列の最終行の数字を取得
lastRow = ThisWorkbook.Sheets(1).Cells(ThisWorkbook.Sheets(1).Rows.Count, 1).End(xlUp).Value
' 今日の日付を文字列に変換
dateStr = Format(Date, "yyyymmdd")
' 各セルの内容を取得
c3Content = ThisWorkbook.Sheets(1).Range("C3").Value
d3Content = ThisWorkbook.Sheets(1).Range("D3").Value
e3Content = ThisWorkbook.Sheets(1).Range("E3").Value
f3Content = ThisWorkbook.Sheets(1).Range("F3").Value
' F3セルの内容をフォーマット(4桁の内容があるが左から2行目の後に-を挿入)
If Len(f3Content) >= 4 Then
formattedF3Content = Left(f3Content, 2) & "-" & Mid(f3Content, 3, 2)
Else
MsgBox "F3セルの内容が正しくありません。4桁の内容を含めてください。"
Exit Sub
End If
' C3、D3、E3、F3セルの内容をフォーマット
formattedCombinedContent = c3Content & "-" & d3Content & "-" & e3Content & "-" & formattedF3Content
' カスタムファイル名を作成
customName = dateStr & "(" & formattedCombinedContent & ")他" & lastRow & "件"
' ファイルの保存先パスを作成
fileName = folderPath & "\" & customName
' ファイルを保存
With Application.fileDialog(msoFileDialogSaveAs)
.Title = "保存先フォルダを選択してください"
.InitialFileName = fileName & ".xlsm"
.AllowMultiSelect = False
If .Show <> -1 Then
MsgBox "保存先フォルダが選択されませんでした。", vbExclamation
Exit Sub
End If
.Execute
MsgBox "ファイルが保存されました。", vbInformation
End With
End Sub
No.1ベストアンサー
- 回答日時:
>A列の最終行の数字を取得
かかれているコードだと、A列最終行のセルの値(内容) を取得しています。
例えば最終行が50だった場合、lastRowにはセルA50の値が入ります。
それでよい場合は、
lastRow = ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Value
で取得できます。
ただ、lastRowは先にlong型が宣言してありますが、その上で型に関するエラーが出ているところを見ると、あなたが取得したいのは、セルの値(内容)ではなく、行数(先の例でいうならば50)ではないかと思いますが、いかがでしょうか?
その場合は、
lastRow = ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
となります。
補足として、繰り返しシートオブジェクトである、ThisWorkbook.Sheets(1)を毎回書くのは面倒なので、オブジェクト変数にしておいた方が良いと思います。
Set WS = ThisWorkbook.Sheets(1)
とすればよいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) xmlドキュメントから別拡張子で保存したい 4 2023/09/12 11:08
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) Excel VBA マクロ あるフォルダー内の複数のファイルを統合したいです 1 2024/02/19 21:37
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) VBA 1 2024/02/03 22:51
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/08 15:45
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAでほかのアプリケーシ...
-
VBAで、強制保存してブックを閉...
-
別名で保存し、元の名前で中身...
-
至急教えてください!プログラ...
-
度々すみません。(動画縦横変...
-
リンクを右クリックした時のメ...
-
エクセルで「名前を付けて保存...
-
Excel VBAで作成したマクロをxl...
-
コマンドプロンプトでデスクト...
-
cygwinでのvim??の使い方
-
エクセルでファイルの最終更新...
-
エクセル:マクロ:保存時に連...
-
VBSでHPを保存するにはど...
-
【Excel VBA】自動的にバックア...
-
エクセルが開けませんっっっ!...
-
プログラムについて
-
【VC++】CDC→WMFファイルに保存...
-
EXCEL VBA Workbook_BeforeSave...
-
ExcelVBAでテキスト保存
-
読み取り専用ファイルを上書き...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでファイルの最終更新...
-
Excel VBAでほかのアプリケーシ...
-
Excel VBAで作成したマクロをxl...
-
VBAで、強制保存してブックを閉...
-
読み取り専用ファイルを上書き...
-
AccessVBAでレポートをPDFで出力
-
Pivot table で集計されたデー...
-
EclipseでJavaScriptファイルの...
-
エクセルで「名前を付けて保存...
-
VBAでPDF作成をしたあと、指定...
-
VBScriptで日本語が変です
-
【Excel VBA】自動的にバックア...
-
VBScriptでのSaveAsについて
-
webページの特定の部分だけ消し...
-
タイトルバーやメニューバーの...
-
ASPでファイルを保存するダイア...
-
vbaでIEの名前を付けて保存(A)...
-
ExcelVBAでデスクトップのPATH...
-
エクセル:マクロ:保存時に連...
-
Corel Digital Studioの動画をS...
おすすめ情報