- ベストアンサー
Excel マクロ 最終セルが毎回違う場合
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>Range("G3:J71") Range("G3:J" & Range("A5").End(xlDown).Row) でしょうか?
その他の回答 (1)
- popesyu
- ベストアンサー率36% (1782/4883)
最終行の取り方は複数あります。 [CTRL]+[↓]や最終行(65536行)から[CTRL]+[↑]を行うのと同じことをマクロ上で行うか、UsedRangeプロパティを使うかなどです。 http://www.happy2-island.com/excelsmile/smile03/capter00702.shtml そのシートの構成にあわせて向き不向きがありますのでいろいろと試してください。
補足
早速ご回答ありがとうございます。 説明が下手でした。 コピーしたい列はJのままで、行がA列の最終行になります。 Selection.AutoFill Destination:=Range("G3:J71"), ここの J71 の71を変数にしたいのです。 たぶん71のところに Range("A5").End(xlDown).Row が入ると思うのですが、どう入れたらいいのでしょうか? よろしくお願いします。
関連するQ&A
- エクセルのマクロ
こんばんは、宜しくお願いします。 エクセルで行を挿入し前行の数式をコピーするマクロの記録を行ったのが下記の内容です。 Sub Sounyu() ' ' Sounyu Macro ' Rows("4:4").Select Selection.Insert Shift:=xlDown Range("B3:C3").Select Selection.AutoFill Destination:=Range("F3:F4"), Type:=xlFillDefault Range("F3:F4").Select Range("G3").Select Selection.AutoFill Destination:=Range("G3:G4"), Type:=xlFillDefault Range("G3:G4").Select Range("A2").Select End Sub 最後の Range("A2").Selectを挿入した行のAのセルへ カーソルがいくようにするにはどのように変更したら 良いのでしょうか? 教えてください。
- ベストアンサー
- オフィス系ソフト
- マクロについて教えてください
マクロ初心者です。 A~D列の表が少ない時100行、多い時400行あり、同じ操作を何回か繰り返すため、できればマクロで処理したいと思っています。 マクロ記録で作成したのですが、最終行が一定ではないため行数が増えると上手く作動しません。 どこを修正したらいいでしょうか。ご教示いただければ幸いです。 Sub Macro1() ' ' Macro1 Macro ' ActiveCell.FormulaR1C1 = "=SUBSTITUTE(RC[-1],""集計"","""")" Range("G2").Select Selection.AutoFill Destination:=Range("G2:G4"), Type:=xlFillDefault Range("G2:G4").Select Range("H2").Select ActiveCell.FormulaR1C1 = "=SUMIF(R2C1:R13C1,RC[-1],R2C2:R13C2)" Range("H2").Select Selection.AutoFill Destination:=Range("H2:H4"), Type:=xlFillDefault Range("H2:H4").Select Range("H5").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" Range("H6").Select End Sub ちなみに作成したいマクロ 1.F列にA列の「集計」を取り出して、G列にF列の「集計」文字を取り除く。 2.H列にB列「数」を計算する 3.H列の最終行に合計を出す。
- ベストアンサー
- Excel(エクセル)
- マクロの編集方法を教えて下さい。
自分で記録したマクロを親切な方に編集してもらいました。実行スピードが格段に速くなったのですが、さらに処理したい項目が出来たので、別に記録してコピー、適切な箇所に挿入したのですが、実行時エラーが出ます。どう直していいのか分かりません。分かる方教えて下さい。 Sub Incert12() Dim wRow As Long Dim i As Integer Dim tbl(1 To 12, 1 To 1) As Integer wRow = Range("A65536").End(xlUp).Row Rows(CStr(wRow) & ":" & CStr(wRow + 11)).Insert Range(Cells(wRow + 1, "B"), Cells(wRow + 11, "B")).FormulaR1C1 = "=R[-1]C" '↑(1)これの代わりにB列を12行全て結合したい For i = 1 To 12 tbl(i, 1) = i Next i Range(Cells(wRow, "C"), Cells(wRow + 11, "C")).Value = tbl '↑(2)これに加えてA列に以下の処理も加えたい 'ActiveCell.Offset(-2, -8).Range("A1").Select 'ActiveCell.FormulaR1C1 = "=R[-1]C+1" 'ActiveCell.Select 'Selection.AutoFill Destination:=ActiveCell.Range("A1:A12"), Type:= _ ' xlFillDefault 'ActiveCell.Range("A1:A12").Select '↓(3)F列ではなく、FからK列までにしたい。 Cells(wRow + 12, "F").AutoFill Range(Cells(wRow, "F"), Cells(wRow + 12, "F")) 'これが私が作ったマクロ。(2行目に問題ありとの事) 'ActiveCell.Offset(-1, 5).Range("A1:F1").Select 'Selection.AutoFill Destination:=ActiveCell.Range("A1:F13"), Type:= _ ’ xlFillDefault 'ActiveCell.Range("A1:F13").Select Cells(wRow, 1).Select End Sub 以上(1)~(3)を直したいのです。どなたかよろしくお願い致します。
- ベストアンサー
- オフィス系ソフト
- エクセルマクロでA欄に値がある行までのC列の範囲を指定したい。?
エクセルマクロでA欄に値がある行までのC列の範囲を指定したい。? ●エクセルマクロのVBAで次のように記述しています。 Range("C2").FormulaR1C1 = "=VLOOKUP(LEFT(RC[-2],4),C[-2]:C[-1],2,FALSE)" Range("C2").Select Selection.AutoFill Destination:=Range("C2:C148"), Type:=xlFillDefault A列に文字が入っている最終行は A148なので、C2: C148 の範囲にオートフィルで貼り付けるように しています。 しかし、A列に文字が入っている最終行は、変動します。 なお、貼り付ける範囲はいつでも C2から始まります。 A列に文字が入っている最終行が A200であれば、C2: C200の範囲、 A列に文字が入っている最終行が A321であれば、C2: C321の範囲といったように、 C2の値を貼り付ける範囲を設定したいと思っています。 ●そこで、次のように記入してみました。 With Worksheets(2) Dim lRow As Long, lRow = .Cells(Rows.Count, 1).End(xlUp).Row Range("C1").Formula = "名称" Range("C2").FormulaR1C1 = "=VLOOKUP(LEFT(RC[-2],4),C[-2]:C[-1],2,FALSE)" Range("C2").Select Selection.AutoFill Destination:=Range(Cells(3, 2), Cells(lRow, 3)), Type:=xlFillDefault 変数を使って最終行を指定しても上手くいきませんでした。 (C2:C150)や(C2:C160)といったように「C2」のセルを「C2のセル」から「A列に文字が 入っている行のC列」まで貼り付けたいと思っています。 どのようにVBAを記述したら良いのか教えていただけないでしょうか。
- ベストアンサー
- オフィス系ソフト
- excel: マクロ表記について
マクロ表記について Range("E2").Select Selection.AutoFill Destination:=Range("E2:E2153"), Type:=xlFillDefault 上記はEXCELのマクロの式なのですが、この2153という数字が d = Range("A65536").End(xlUp).Rowのdという値と同じ場合、2153という数字をださないでdを使った表現ができますか。
- ベストアンサー
- オフィス系ソフト
- 毎回最終セルを探す。
お世話になります。 マクロは組めないので、 マクロの記録で作ってみましたが、 ActiveCell.SpecialCells(xlLastCell).Select Range("A8356").Select これは、ctrl+end で、最終行を選び、 Home で、A列に行き、カーソルで1行下げました。 そうすると、("A8356")と、固定されてしまい、 次の『Book2』のデータは、下に蓄積されずに、 同じところから上書きをされてしまいます。 ちなみに、全文を載せさせていただきます。 どうすればよいのでしょうか? よろしくお願い致します。 ActiveCell.SpecialCells(xlLastCell).Select Range("A8356").Select Workbooks.Open Filename:= _ "C:\Documents and Settings\t.t\My Documents\Book2.xls" Range("A1").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.Copy Windows("6965.xls").Activate ActiveSheet.Paste ActiveWindow.SmallScroll ToRight:=8 Columns("T:T").Select Range("T8327").Activate Application.CutCopyMode = False Selection.Style = "Comma [0]" ActiveWorkbook.Save Windows("Book2.xls").Activate ActiveWindow.Close ActiveCell.SpecialCells(xlLastCell).Select Range("A8409").Select End Sub
- ベストアンサー
- Visual Basic
- ExcelVBAでのオートフィルの使い方
Excel2003です。 Bセルに入っている値をHセルまで右方向にオートフィルするマクロを組んでいるのですが、うまく動きません。 Bセルの最終行は変動し、オートフィルはBセルの最終行と最終行の1つ手前の2つ分をオートフィルしたいのです。 Range("B1").End(xlDown).Offset(-1, 0).Select Range(ActiveCell, ActiveCell.Offset(0, 7)).AutoFill Type:=xlFillDefault Range("B1").End(xlDown).Offset(0, 0).Select Range(ActiveCell, ActiveCell.Offset(0, 7)).AutoFill Type:=xlFillDefault これで、オートフィルしようと思っていたのですが、 Range(ActiveCell, ActiveCell.Offset(0, 7)).AutoFill Type:=xlFillDefault この式の実行で、 実行時エラー'1004' RangeクラスのAutoFillメソッドが失敗しました と、出てしまいます。 Selection.AutoFill Destination:=Range("B23:H23"), Type:=xlFillDefault こういうマクロなら動くので、AutoFillの後に明確な範囲指定をしていないせいなのでしょうか? 最終行が変動してしまう為、このような明確な範囲指定をする事ができません。 いい解決方法はないでしょうか?
- ベストアンサー
- オフィス系ソフト
- Excel 簡潔
Sub 問10率() Range("AY994").Select ActiveCell.FormulaR1C1 = "=RC[-49]/R1007C[-49]" Range("AY994").Select Selection.AutoFill Destination:=Range("AY994:CT994"), Type:=xlFillDefault Range("AY994:CT994").Select Selection.AutoFill Destination:=Range("AY994:CT1007"), Type:=xlFillDefault Range("AY994:CT1007").Select Range("AY1011").Select ActiveCell.FormulaR1C1 = "=RC[-49]/R1020C[-49]" Range("AY1011").Select Selection.AutoFill Destination:=Range("AY1011:CT1011"), Type:=xlFillDefault Range("AY1011:CT1011").Select Selection.AutoFill Destination:=Range("AY1011:CT1020"), Type:=xlFillDefault Range("AY1011:CT1020").Select End Sub ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー A B 中略 AV AW 993行 ラベル 北海 ~ 沖 合計 994行 魚 21 ~ 9 110 中略 1006行 他 60 ~ 空欄 200 1007行 合計 11 ~ 148 590 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー AX AY 中略 CS CT 993行 ラベル 北海 ~ 沖 合計 994行 魚 0.2% ~ 0.0% 0.2% 中略 1006行 他 0.3% ~ 0.0% 0.3% 1007行 合計 100.0% ~ 100.0% 100.0% ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー AX AY 中略 CS CT 993行 ラベル 北海 ~ 沖 合計 994行 魚 B994/B$1007 ~ AV994/AV$1007 AW994/AW$1007 中略 1006行 他 B1006/B$1007 ~ AV1006/AV$1007 AW1006/AW$1007 1007行 合計 B1007/B$1007 ~ AV1007/AV$1007 AW1007/AW$1007 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー このコードをもっと短くする方法を教えてください。よろしくお願いします。 1個目と2個目の表は横につながっています。3個目は2個目の表の%を出した計算です。 値でなく式が入っています。空白のところは0.0%と表します。 3個目は実際はありません。
- ベストアンサー
- Excel(エクセル)
- エクセルVBAでボタンを作ったシートとVBAを実行するシートを変えたい
シート1にボタンを作成し、 そのボタンを押すと実行するVBAを作成しました。 そこで、VBAを実行するシートの指定はできるのでしょうか。 例えば、ボタンを押すと、 10行から20行まではシート2で実行させ、 30行から40行まではシート3で実行させたいと考えています。 可能でしょうか。 どうぞ宜しくお願いします。 *********************************************** 作成したVBA。ボタンはシート1にあります。 *********************************************** Private Sub CommandButton1_Click() *********************************************** ここからはシート2で実行させたい *********************************************** Range("E2").Select ActiveCell.FormulaR1C1 = "10" Range("E2").Select Selection.AutoFill Destination:=Range("E2:E101"), Type:=xlFillDefault Range("E2:E101").Select *********************************************** ここからはシート3で実行させたい *********************************************** Range("A2").Select ActiveCell.FormulaR1C1 = "100" Range("A2").Select Selection.AutoFill Destination:=Range("E2:E101"), Type:=xlFillDefault Range("A2:A101").Select End Sub
- ベストアンサー
- Visual Basic
- VBAで関数式の値をセルに入力できるようにしたい。
こんなマクロをマクロの記録で作ったのですが SUMIF関数の数式をセルに入力するのでなく 値だけを入力するしたいのですがどのように すればいいでしょうか? Sub Macro4() Columns("O:O").Select Selection.Insert Shift:=xlToRight Range("N3").Select Selection.AutoFill Destination:=Range("N3:O3"), Type:=xlFillDefault Range("N3:O3").Select Range("O5").Select ActiveCell.FormulaR1C1 = "=SUMIF(出荷貼付け!C1,RC1,出荷貼付け!C5)" ←ここのところを値だけをセルに入力したい。 Selection.AutoFill Destination:=Range("O5:O978") Range("O5:O978").Select Range("O4").Select End Sub
- ベストアンサー
- オフィス系ソフト
お礼
できました! ありがとうございました。大変助かりました。