• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel2007 VBA 最終行の特定セルの取得)

Excel2007 VBA 最終行の特定セルの取得

mu2011の回答

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.5

NO3です。 Withを理解されていない、各オブジェクトコードの先頭にはピリオド「.」が必要です。 With Activesheet .Range("A3:E50").ClearContents .Range("B3") = "繰越残高" .Range("C1") = Sheets("月リスト").Cells(i + 1, 1).Text .Range("A3").Value = Format(DateSerial(Year(Date), Month(Date) + 1, Day(Date)), "m月") & "1日" .Range("F3") = Worksheets(i).Range("F" & Rows.Count).End(xlUp) End With

dradra33
質問者

お礼

mu2011様 ご回答ありがとうございます。 お礼が遅くなり申しわけございません。 Withステートメントにおいてピリオド「.」が 必要でしたね。VBAの参考書等を読みこむようにします

関連するQ&A

  • EXCEL VBA 取得したセルの列の最終行

    お客さんからいただいたEXCELフォーマットに沿って、集計ツールを作成していますが 下記でつまってしまいました。 Wb.Worksheets("Sheet1").Cells.Find("実施日").Select Sel_Col = Selection.Column Last_Row = Wb.Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row ※1 For i = Last_Row To 2 Step -1 If Wb.Worksheets("Sheet1").Cells(Sel_Col, i).Value = Day Then ※2 If Wb.Worksheets("Sheet1").Cells(Sel_Col, i).Offset(-5).Value = "A" Then A_count = A_count + 1 ElseIf Wb.Worksheets("Sheet1").Cells(Sel_Col, i).Offset(-5).Value = "B" Then B_count = B_count + 1 ElseIf Wb.Worksheets("Sheet1").Cells(Sel_Col, i).Offset(-5).Value = "C" Then C_count = C_count + 1 End If Else End If Next i まず※1の箇所ですが、Sheet1の実施日と入力されているセルの列番号を取得して その列の最終行を取得したいのですが、上記作成したものですと入力されている列全部の 中での最終行が取得されてしまいます。 この場合、Sel_Col をどのように使えばよろしいでしょうか? 次に※2ですが、※1で取得した列の最終行から1つずつ上に上がりながら 日付が今日であれば、そのセルから5つ左のセルのA、B、Cいずれかを カウントするという造りにしたいと思っています。 実行すると1004エラーでアプリケーション定義、オブジェクト定義のエラーと 出てしまいます。 Wbはset Wbとして開いたブックを定義しています。 DayはDay = Dateで今日の日付を取得しています。 独学で無茶苦茶なコードですが、 どなたか詳しい方、ご教示お願いいたします。

  • エクセルのvba(最終行を取得する並び替え)

    初めまして、エクセルのvbaについて質問をさせてください。 マクロの記録を使って、以下の通りF列→M列→J列の順に優先して、A列からAL列を昇順に並び替えるvbaを作成したのですが、10000行までとう不恰好な書き方になっています。最終行までという書き方に変えたいのですが、色々試したもののうまくいきません…!この場合、最終行を取得するにはどのような書き方にすれば良いのでしょうか…??(T-T) '並び替え ActiveWorkbook.Worksheets("当月").Sort.SortFields.Clear ActiveWorkbook.Worksheets("当月").Sort.SortFields.Add Key:=Range("F2:F10000"_ ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortTextAsNumbers ActiveWorkbook.Worksheets("当月").Sort.SortFields.Add Key:=Range("M2:M10000"_ ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("当月").Sort.SortFields.Add Key:=Range("J2:J10000"_ ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("当月").Sort .SetRange Range("A1:AL10000") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With

  • 【Excel VBA】データの最終行について

    Excel2003を使用しています。 ある一覧表形式のデータSheet1をSheet2に値のみコピーして、このSheet2を“印刷用”として、ページ設定等をして、印刷のみに使用しようと思っています。 Sheet2のI列、J列、K列には数値が入力されていて、I列、J列、K列のデータの最終行の1行下に、それぞれ6行目からデータ最終行までの合計の数式が入力されるよう、コードを追加したのですが、数式は入力されるものの、入力したい行に数式が入力されません。 マクロを実行して、数式が入力された行を見てみると、301行目に入力されていました。 Sheet1は別のシートのデータを数式により表示していて、数式が300行まで入力されているので、Sheet2の元になっているSheet1の影響(?)なのかな~?と…。こういう場合、どうすればいいでしょうか? コードは下記のようになっています。 よろしくお願いします。 ---------------------------------------- Sub 印刷用作成() Dim i As Integer Dim j As Long Sheets("Sheet1").Activate Range("B6:L6", Range("L6").End(xlDown)).Select Selection.Copy Sheets("Sheet2").Select Range("B6").PasteSpecial xlPasteValues Application.CutCopyMode = False For i = 9 To 11 j = Application.Max(j, Cells(65536, i).End(xlUp).Row + 1) Next For i = 9 To 11 Cells(j, i).FormulaR1C1 = "=SUM(R2C[0]:R[-1]C[0])" Next i End Sub

  • VBAで最終行の取得について

    UserFormのConboBoxで「○○」を選んで、 UserFormのTextBoxで『あいう』と入力すると、ワークシートに A      B 1 ○○   ×× 2 あいう と表示され、 UserFormのConboBoxで「××」を選んで、 UserFormのTextBoxで『アイウ』と入力すると A      B 1 ○○   ×× 2 あいう  アイウ 3 :    : と表示されるようにしたいと思います。 以下のプログラムまではできています。 ********************************************* Private Sub UserForm_Initialize()  Dim lasClm As Integer, i As Integer  lasClm = Sheet1.Range("A1").End(xlToRight).Column   For i = 1 To lasClm   ComboBox1.AddItem Sheet1.Cells(1, i).Value   Next i End Sub ********************************************* Private Sub CommandButton1_Click()  Select Case ComboBox1.Text  Case Sheet1.Cells(1, 1).Value '「○○」が選択  Sheet1.Cells(2, 1).Value = TextBox1.Text ・・・(1)  Case Sheet1.Cells(1, 2).Value '「××」が選択  Sheet1.Cells(2, 2).Value = TextBox1.Text ・・・(2)  End Select  UserForm1.Hide End Sub ********************************************** 今は(1)、(2)のように直接セルを指定しているのですが、 この部分を各列(A列、B列)の最終行の値を取得して、 最終行+1のセルに順次TextBoxに入力された値を代入していきたいのですが、 どのようにしたらよいのでしょうか。 しかし、A列とB列は同じように値が増えていくとは限りません。 例)    A     B 1 ○○   ×× 2 あいう  アイウ 3 かきく 4 さしす となる場合もあるので、A列とB列それぞれの最終行の値を取得したいと思っています。

  • VBA 最終行の値を取得

    Excel2007です。 印刷用シートに、用紙を4分割して、4件分のカードを印刷できるようにしてあります。 A1, F1, A10, F10の入力セルに、それぞれデータシートのNo.を入れると、vlookupで連動されるようになっています。 No.の入力セルは、4ずつ加算されるようにVBAを書きました。 さらに、データシートの最終No.を超えた場合に、メッセージボックスを出したいのですが、うまくいきません。 例えば、データシートが200件まで入力されているとして、印刷シートのNo.に「201」を入力すると、「これ以上データがありません」というメッセージを表示させたいです。 Sub 次データ() Dim 最終行 As Long, 最終値 As Long Dim my As String 最終行 = Worksheets("データ").Range("A1048576").End(xlUp).Row 最終値 = Cells(最終行, 1) Worksheets("印刷用").Select Range("A1").Value = Range("A1") + 4 Range("F1").Value = Range("F1") + 4 Range("A10").Value = Range("A10") + 4 Range("F10").Value = Range("F10") + 4 If Range("A1") > 最終値 Or Range("F1") > 最終値 Or Range("A10") > 最終値 Or Range("F10") > 最終値 Then my = MsgBox("これ以上データがありません", vbOKOnly + vbExclamation, "注意!") End If End Sub このように書いてみましたが、これだと「次データ」を実行する度にメッセージボックスが出てしまいます。 どこを直せばいいのでしょうか。 分かりづらい文章ですみません。 なにぶん、VBAをかじりかけたばかりで、ド素人ですのでよろしくお願いします。

  • 日付から特定の行のセル内データを取得したい。

    列に日付、行に時間を入力データの内容は商品の販売個数です。 要するに日付毎の時間別販売数を調べたいのですが、 列の日付の下に各品名を数項目並べております。 この様なデータを個人別のシートで入力しています。 行いたい事は、そのデータを別シートで日付毎に参照したいのです。 あるセルに18と入力すれば、18日分の売り上げデータを一枚のシートに表示させたいのです。 これが一商品だけの集計なら「HLOOKUP」関数で普通に参照できるのですが、列に日付と商品、行に時間を入れているためどの様に参照すればよいのか判りません。 =HLOOKUP(A1,'名前'!A3:AF20,6,0) コレではその日の一番左の列の商品データしか参照できませんでした。 日付を入力するだけで複数の商品を時間帯毎に参照出来るような上手いやり方はありませんでしょうか? 宜しくお願い致します。

  • EXCEL2003出納帳残高欄の、計算結果がある最終行の数値を取り出し

    EXCEL2003出納帳残高欄の、計算結果がある最終行の数値を取り出したいのですが     A     B     C     D 1  日付   入出金   残高 2  繰越          30 3 8/1   100   130 4 8/2  -130     0 5 8/2    40    40 6               - 7               - 8               - 9                現在残高 40        途中には空白行はなく順に入力します 入力する行数は未確定です 残高は"0" の場合もあります C列2行目は 数式「=B2」  C列3行目から8行目までは 数式「=IF(B3=0,0,C2+B3)」 現在残高を表示したいのですが、 ここD列9行目には数式 「=LOOKUP(10^5,C3:C8)」 としてますが、 C列の6~8行目までは計算式が入ってるので、 その値”0”となってしまうようです。 また、 数式「=INDIRECT(ADDRESS(COUNT(C2:C8)+1,3))」 という式も入れてみましたが、”0”となってしまいます。 計算結果のある最終行の値 "40" にするにはどうしたらよいでしょうか?

  • Excel2007VBA セル範囲の選択について

    ●質問の主旨 任意に変わる、最終行でデータ入力がされているセルを取得し、 かつそのセルを別のセルと組み合わせて範囲選択するためには どうすれば良いでしょうか? 具体的には1.の記述と同じにするためには,2.の記述を どのように変えたらいいでしょうか?ご存知のかたよろしくお願いします。 1. Range("A3:E50").ClearContents 2. Range("A3:Range("A1").End(xlDown).Offset(0, 4)").ClearContents ●質問の詳細 1. 現在現金出納帳を作成しています。 当月が終わったら次月用として当月用のシートをコピーします。 2. コピーするシートの雛型は同じですが、収支項目、収支金額等は、 一旦クリアします。 3. "A3:E50"は収支項目、収支金額の範囲で、 E50はシートの体裁を合わせるための名目的なセルです。 ※ 現金出納帳なだけにE50の位置は毎月変わります。 収支項目の多い月は月中に行を挿入して、 最終セルがE60やE75になるかもしれません。

  • vbaで最終行に張り付け

    Excelマクロについて教えてください。 sheet2にsheet1から選択した範囲を貼り付けております sheet2のC列が連続した値になっておりそれを軸に貼り付けをしたいのです。 sheet1のA1:g40の範囲をcutしたものを sheet2のC列の最終入力行の一段下の行に A列から貼り付けしたいのです。 よろしくお願いします

  • VBA Excel 特定の記号を含んだ行

    Excel VBAにて、質問します。お手数ですが宜しくお願いします。 画像の様に、E列に特定の記号"●"や"▲"含んだ行以外、抽出し 印刷のシート名に貼り付けしたいと思います。 ですが、条件がありまして、その条件とは、InputBoxを使って 抽出したい日付を入力し、入力した日付、時刻までの記号"●"や"▲"以外 を抽出できる様にしたいです。 例えば実行時の日付が8/21日ならば InputBoxに、8/28 20:00と入力したら、入力した日付、時刻までの 記号"●"や"▲"以外を抽出となります。 画像の様に、1行目の見出し名も貼り付けできる様に、VBAを使って できませんでしょうか? ※ 画像ではSheet1のみ載せましたが、 Sheet2とSheet3とSheet4とSheet5とSheet6まで似た内容のデータがあるので シート名を指定して動作できると良いです。 Array("Sheet1","Sheet2","Sheet3","Sheet4","Sheet5","Sheet6")見たいな 感じでできますでしょうか? 御面倒お掛けしますが宜しくお願いします。