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

エクセルファイルをダイヤログを表示させて名前を付けて保存したいのですが、
以下のコ-ド、' 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

A 回答 (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)

とすればよいです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
確認いたします。

お礼日時:2024/05/23 07:13

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A