質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

13363閲覧

最終行の取得がエラーになる

Naoko_Coco

総合スコア54

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/09/10 08:44

ファイルを開き、ある列の最終行を取得したいのですが、「アプリケーション定義またはオブジェクト定義のエラーです」と表示されます。
Sheetモジュールに書いてます。
Bookを開きr = sh.Cells(Rows.Count, 3).End(xlUp).Rowでとるのですが、sh.cells
にすると上記エラーになります。
sh.を外すとどっからとってきているのか、まったく関係ない値をとってきてしまいます。
ドツボにはまってます。。。
ご教示ください。

VBA

1Private Sub openJKZ1(fp As String) 2 '本部 3 Dim i As Long 4 Dim r As Long 5 Dim c As Long 6 Dim iLine As Long 7 Dim wb As Workbook 8 Dim sh As Worksheet 9 Dim sData(4) As String 10 11 Set wb = Workbooks.Open(Filename:=fp, ReadOnly:=True) 12 Set sh = wb.Sheets(1) 13 iLine = 14 14 r = sh.Cells(Rows.Count, 3).End(xlUp).Row 15 16 For i = 2 To r 17 18' If sh.Cells(i, 3) <> "" Then 19 20 sData(0) = Left(sh.Cells(i, 3), 2).Value 21 sData(1) = sh.Cells(i, 4).Value 22 sData(2) = Right(sh.Cells(i, 3), 1).Value 23 sData(3) = sh.Cells(i, 16).Value 24 sData(4) = sh.Cells(i, 17).Value 25 26 Me.Cells(iLine, 3).Value = Trim$(StrConv(sData(0), vbNarrow)) '講座 27 Me.Cells(iLine, 4).Value = Trim$(sData(1)) '人数 28 Me.Cells(iLine, 5).Value = Trim$(StrConv(sData(2), vbNarrow)) '方式 29 Me.Cells(iLine, 6).Value = Trim$(StrConv(sData(3), vbNarrow)) '修了証書 30 Me.Cells(iLine, 7).Value = Trim$(sData(4)) '連絡網 31 32 iLine = iLine + 1 33' Else 34' Exit For 35' End If 36 37 Next 38 39 Me.Range("C13:L" & CStr(iLine - 1)).Borders.LineStyle = xlContinuous 40 wb.Close 41 42 'エラーチェック 43 r = Me.Cells(Rows.Count, 3).End(xlUp).Row 44 iLine = 14 45 For c = 3 To 5 46 If Me.Cells(iLine, c) = "" Then 47 Me.Cells(iLine, c).Interior.Color = RGB(255, 255, 0) 48 End If 49 iLine = iLine + 1 50 Next 51 52 53 For iLine = 14 To r 54 If Me.Cells(iLine, 3) = 16 And Me.Cells(iLine, 4) = 1 Then 55 Me.Cells(iLine, 3).Interior.coler = RGB(255, 255, 0) 56 ElseIf Me.Cells(iLine, 3) = 27 And Me.Cells(iLine, 4) = 2 Then 57 Me.Cells(iLine, 3).Interior.coler = RGB(255, 255, 0) 58 ElseIf Me.Cells(iLine, 3) = 28 And Me.Cells(iLine, 4) = 2 Then 59 Me.Cells(iLine, 3).Interior.coler = RGB(255, 255, 0) 60 End If 61 62 Next 63 64End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Rowsプロパティ参照時もshを指定しましょう。
worksheetオブジェクトの指定を省略した場合は、ActiveSheetが対象になります。

r = sh.Cells(Rows.Count, 3).End(xlUp).Row

r = sh.Cells(sh.Rows.Count, 3).End(xlUp).Row

投稿2019/09/10 09:07

Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Naoko_Coco

2019/09/10 09:15

ありがとうございます。できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問