
エクセルファイルをダイヤログを表示させて名前を付けて保存したいのですが、
以下のコ-ド、' 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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでファイルの最終更新...
-
Excel VBAで作成したマクロをxl...
-
VBAでPDF作成をしたあと、指定...
-
VB.NETでEXCELファイルを開き、...
-
PHPで自動的にWEBページを保存...
-
意味不明のタグが挿入されてい...
-
Corel Digital Studioの動画をS...
-
コマンドプロンプトでデスクト...
-
html 保存できない
-
vlan internal allocation poli...
-
teratarmでコマンド入力すると...
-
Edgeでダウンロード状況表示画...
-
WindowsからSSHでサーバーにあ...
-
共有しているファイルを削除し...
-
PDFを結合すると語句検索できな...
-
copyコマンドについて
-
フォルダーをコピーするとファ...
-
YAHAMA RTXシリーズのコマンド...
-
ftpコマンドで再帰的にフォ...
-
ファイルのプロパティの属性の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAで作成したマクロをxl...
-
エクセルでファイルの最終更新...
-
Excel VBAでほかのアプリケーシ...
-
読み取り専用ファイルを上書き...
-
CImageのファイル名を指定して保存
-
VBAで、強制保存してブックを閉...
-
Corel Digital Studioの動画をS...
-
【Excel VBA】自動的にバックア...
-
VB.NETでEXCELファイルを開き、...
-
コマンドプロンプトでデスクト...
-
VSCodeの自動保存の2か所を無...
-
Pivot table で集計されたデー...
-
webページの特定の部分だけ消し...
-
VBAでPDF作成をしたあと、指定...
-
VBScriptで日本語が変です
-
メモ帳の保存場所
-
タイトルバーやメニューバーの...
-
ASPでファイルを保存するダイア...
-
至急教えてください!プログラ...
-
意味不明のタグが挿入されてい...
おすすめ情報