none
VBA 1004の対処法について RRS feed

  • 質問

  • VBAの画面を掲載しております。

    VBA初心者で、現在

    オートフィルを行えるものを作成しています。

    そこで、1004のエラーが出てきてしまい

    どうしたものかと頭を抱えております。

    エラーを解消するには、どうしたらよいでしょうか。

    下線を引いてある箇所がエラーとなっている箇所です。

    -------------------------------------------------------------

    Private Sub CommandButton2_Click()

        Dim shtWORef As Worksheet
        Dim shtSummary As Worksheet
        
        Set shtWORef = Sheets("WORef")
        Set shtSummary = Sheets("SummarySheet")
        
        Dim s As Integer
        s = shtWORef.Cells(2, 5).Value
        
       Range(shtSummary.Cells(2, 1), shtSummary.Cells(s, 26)).Select   
        Selection.FillDown
        Range("A2").Select
        
    End Sub


    2019年6月13日 8:57

回答

  •     s = shtWORef.Cells(2, 5).Value
       
       Range(shtSummary.Cells(2, 1), shtSummary.Cells(s, 26)).Select   

    変数 s の値を確認してみてください。この値が 0 や -1 などの場合、Cells へのアクセスが失敗することになります。

    それと Range プロパティの対象シートも明示しておいた方が良いでしょう。

    shtSummary.Range(shtSummary.Cells(2, 1), shtSummary.Cells(s, 26)).Select
    • 回答としてマーク Hidepi 2019年6月14日 11:09
    2019年6月13日 9:06
  •    Range(shtSummary.Cells(2, 1), shtSummary.Cells(s, 26)).Select   
        Selection.FillDown
        Range("A2").Select

    ここの部分は以下のようにすればいいのでは?

        ' shtSummary.Cells(2, 1) を基準にセル範囲を s - 1 行、26 桁まで拡張して下にフィル
        ' (s が 2 以下の場合の対策済)
        If s > 2 Then
            shtSummary.Cells(2, 1).Resize(s - 1, 26).FillDown
        End If
        ' Range("A2") セルを選択
        Range("A2").Select


    • 編集済み infade 2019年6月13日 11:17 処理が間違っていたので修正
    • 回答としてマーク Hidepi 2019年6月14日 11:08
    2019年6月13日 11:02

すべての返信

  •     s = shtWORef.Cells(2, 5).Value
       
       Range(shtSummary.Cells(2, 1), shtSummary.Cells(s, 26)).Select   

    変数 s の値を確認してみてください。この値が 0 や -1 などの場合、Cells へのアクセスが失敗することになります。

    それと Range プロパティの対象シートも明示しておいた方が良いでしょう。

    shtSummary.Range(shtSummary.Cells(2, 1), shtSummary.Cells(s, 26)).Select
    • 回答としてマーク Hidepi 2019年6月14日 11:09
    2019年6月13日 9:06
  •    Range(shtSummary.Cells(2, 1), shtSummary.Cells(s, 26)).Select   
        Selection.FillDown
        Range("A2").Select

    ここの部分は以下のようにすればいいのでは?

        ' shtSummary.Cells(2, 1) を基準にセル範囲を s - 1 行、26 桁まで拡張して下にフィル
        ' (s が 2 以下の場合の対策済)
        If s > 2 Then
            shtSummary.Cells(2, 1).Resize(s - 1, 26).FillDown
        End If
        ' Range("A2") セルを選択
        Range("A2").Select


    • 編集済み infade 2019年6月13日 11:17 処理が間違っていたので修正
    • 回答としてマーク Hidepi 2019年6月14日 11:08
    2019年6月13日 11:02