Excelでコードを短くする方法について教えてください

このQ&Aのポイント
  • Excelのコードを短くする方法について教えてください
  • 質問者はExcelのコードを短くしたいと思っています。現在、質問文章には長いコードが記載されており、それを短くする方法を教えてもらいたいとのことです。
  • 質問者はExcelのコードを効率的に短くする方法を知りたいと考えています。具体的には、コードの中にある繰り返し処理や冗長な部分を削減する方法を教えてほしいとのことです。
回答を見る
  • ベストアンサー

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個目は実際はありません。

質問者が選んだベストアンサー

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

Sub 問10率_整理() Range("AY994:CT1007").FormulaR1C1 = "=RC[-49]/R1007C[-49]" Range("AY1011:CT1020").FormulaR1C1 = "=RC[-49]/R1020C[-49]" End Sub

meronsodanomu
質問者

お礼

ありがとうございます。 2行になるんですね。

その他の回答 (1)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 セルの書式設定の表示形式が最初は[標準]となっていたものを0.0%表示に変更する事も同時に行う場合には、次の様になります。 Sub 問10率_整理改() With Range("AY994:CT1007") .FormulaR1C1 = "=RC[-49]/R1007C[-49]" .NumberFormatLocal = "0.0%" End With With Range("AY1011:CT1020") .FormulaR1C1 = "=RC[-49]/R1020C[-49]" .NumberFormatLocal = "0.0%" End With End Sub 或は Sub 問10率_整理改2() Range("AY994:CT1007").FormulaR1C1 = "=RC[-49]/R1007C[-49]" Range("AY1011:CT1020").FormulaR1C1 = "=RC[-49]/R1020C[-49]" Range("AY994:CT1007,AY1011:CT1020").NumberFormatLocal = "0.0%" End Sub

meronsodanomu
質問者

お礼

ありがとうございます。 Rangeを使わずセルを指定できるマクロを組めるよう考えます。

関連するQ&A

  • excel2010 簡単にするコード

    Sub 問10SUM() ' ' 問10SUM Macro ' Range("B1007").Select ActiveCell.FormulaR1C1 = "=SUM(R[-13]C:R[-1]C)" Range("B1007").Select Selection.AutoFill Destination:=Range("B1007:AW1007"), Type:=xlFillDefault Range("B1007:AW1007").Select Range("AW994").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-47]:RC[-1])" Range("AW994").Select Selection.AutoFill Destination:=Range("AW994:AW1007"), Type:=xlFillDefault Range("AW994:AW1007").Select ActiveWindow.ScrollColumn = 20 ActiveWindow.ScrollColumn = 19 ActiveWindow.ScrollColumn = 18 ActiveWindow.ScrollColumn = 17 ActiveWindow.ScrollColumn = 16 ActiveWindow.ScrollColumn = 14 ActiveWindow.ScrollColumn = 13 ActiveWindow.ScrollColumn = 12 ActiveWindow.ScrollColumn = 11 ActiveWindow.ScrollColumn = 10 ActiveWindow.ScrollColumn = 9 ActiveWindow.ScrollColumn = 8 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 1 Range("B1020").Select ActiveCell.FormulaR1C1 = "=SUM(R[-9]C:R[-1]C)" Range("B1020").Select Selection.AutoFill Destination:=Range("B1020:AW1020"), Type:=xlFillDefault Range("B1020:AW1020").Select Range("AW1011").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-47]:RC[-1])" Range("AW1011").Select Selection.AutoFill Destination:=Range("AW1011:AW1020"), Type:=xlFillDefault Range("AW1011:AW1020").Select ActiveWindow.ScrollColumn = 22 ActiveWindow.ScrollColumn = 21 ActiveWindow.ScrollColumn = 18 ActiveWindow.ScrollColumn = 15 ActiveWindow.ScrollColumn = 10 ActiveWindow.ScrollColumn = 9 ActiveWindow.ScrollColumn = 8 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 1 End Sub これはマクロの記録で作ったものです。AWにオートサムでBからAVを選択して右下の+を下に引っぱりました。。 ドラッグして選択せずにすむコード、もっと短くする方法を教えてください。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー      A     B    中略   AV     AW 993行  ラベル  北海   ~     沖     合計 994行  魚    2    ~     9     1100 中略  1006行  他    6    ~     空欄    2000 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 簡単に載せると表はこうなっています。

  • エクセルのマクロ

    こんばんは、宜しくお願いします。 エクセルで行を挿入し前行の数式をコピーするマクロの記録を行ったのが下記の内容です。 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のセルへ カーソルがいくようにするにはどのように変更したら 良いのでしょうか? 教えてください。

  • エクセル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

  • エクセルVBAの保存

    毎月異なった新しいエクセルファイルに同じような加工を施すため、VBAを書きました。対象はActivesheetとしています。 で、質問は、この新しいエクセルファイルの標準モジュールにいちいちこのVBAをコピーペーストせずに実行する方法です。 きっと何かあるとは思うのですが・・・・。 VBAは次のような簡単なものです。 Sub 加工1() Dim e As Integer, s As String, n As String e = Range("A4").End(xlDown).Row s = Replace(Mid(Range("A2"), 8, 5), "年", "") & "-" n = Replace(Mid(Range("A2"), 19, 5), "年", "") & "-" Range("A1:C2").MergeCells = False Columns("B:B").Select Selection.Insert Shift:=xlToRight Columns("A:A").Select Selection.Insert Shift:=xlToRight Columns("C:C").Select Selection.NumberFormatLocal = "G/標準" Range("B3").Select Selection.AutoFill Destination:=Range("B3:C3"), Type:=xlFillDefault Range("B3").Select ActiveCell.FormulaR1C1 = "商品番号1" Range("C4").Select ActiveCell.FormulaR1C1 = "=LEFT(RC[-1],10)" Range("C4").Select Selection.AutoFill Destination:=Range("C4:C" & e), Type:=xlFillDefault Range("A3").Select ActiveCell.FormulaR1C1 = "抽出年月日" Range("A4").Select ActiveCell.FormulaR1C1 = s & n & 1 Range("A4").Select Selection.AutoFill Destination:=Range("A4:A" & e), Type:=xlFillDefault Rows("3:3").Select Selection.Insert Shift:=xlDown Range("B1:E1").MergeCells = True Range("B2:E2").MergeCells = True ActiveSheet.Name = "提出用" End Sub

  • EXcelでオートフィルのパラメータを変数化

    お世話になります。 [変更前]マクロで「("A3:B72")」を変数化したくて[変更後]のようにした。 結果エラーになります。 実行時エラー'91' オブジェクト変数またはWithブロック変数が設定されていません。 [変更前] Sub 賞与明細MCR() Range("A3:B4").Select Selection.AutoFill Destination:=Range("A3:B72"), Type:=xlFillDefault Range("A3:B72").Select End Sub [変更後] Sub 賞与明細MCR() Dim 処理 As Characters 処理 = "A3:" & CStr(Range("d1")) Range("A3:E4").Select Selection.AutoFill Destination:=Range(処理), Type:=xlFillDefault Range(処理).Select End Sub

  • 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 マクロ 最終セルが毎回違う場合

    マクロ初心者です。 自動記録でマクロを作りました。 最終行が毎回違うので、「コピー(オートフィル)をA列の最終行にあわせてする」と作りたいです。 自動記録ではJ71までコピーになっていますが、J71をA列の最終行にしたいです。 よろしくお願いします。 Range("G3:J3").Select Selection.AutoFill Destination:=Range("G3:J71"), Type:=xlFillDefault Range("G3:J71").Select

  • rangeからcellsに帰る場合の書式

    Sub Macro1() Range("A1").Activate Selection.AutoFill Destination:=Range("A1:A10"), Type:=xlFillDefault End Sub をRangeではなくCellsに変えたいのですが、 Sub Macro2() Range("A1").Activate Selection.AutoFill Destination:=Range(Cells(1, 1) & ";" & Cells(10, 1)), Type:=xlFillDefault End Sub だと、 実行時エラー1004になってしまいます。 Sub Macro3() Range("A1").Activate Selection.AutoFill Destination:=Range(Cells(1, 1), Cells(10, 1)), Type:=xlFillDefault End Sub だとうまくいくのですが、 なぜRengeの時は、「;」なのに、cellsの時は、「、」でいいのでしょうか?

  • VBAでオートフィルができません

    エクセル2007です。 画像のようにA列に値を入れて、B列に半角にする関数を入れて、最終行までオートフィルをしたいのですが、 --------------------------------------------------------- Sub test() Dim 最終行 As Long 最終行 = Cells(65536, 1).End(xlUp).Row ActiveCell.FormulaR1C1 = "=ASC(RC[-1])" Selection.AutoFill Destination:=Range("b1:b" & 最終行), Type:=xlFillDefault End Sub --------------------------------------------------------- をすると、 Selection.AutoFill Destination:=Range("b1:b" & 最終行), Type:=xlFillDefault の部分で、 [実行時エラー'1004'アプリケーション定義またはオブジェクト定義エラー] になってしまいます。 原因と対策を教えてください。ご回答よろしくお願いします。

  • vlookupで参照するシート名と範囲を変えたい

    お世話になります。 vlookup関数について質問です。 新規作成する表の列B2からF2(1行目は項目行)に別のブック 「商品マスタ」からvlookupで必要なデータを検索して入力 B2からFのデータのある最終行までコピーするというマクロを作りました。 Range("B2").Select ActiveCell.FormulaR1C1 = _ "=VLOOKUP(RC1,[商品マスタ.xlsx]商品マスタ2017.10.5!R2C1:R430C6,COLUMN(RC),0)" Range("B2").Select Selection.AutoFill Destination:=Range("B2:F2"), Type:=xlFillDefault Range("B2:F2").Select Range("B2").Select Selection.AutoFill Destination:=Range("B2:F2"), Type:=xlFillDefault Range("B2:F2").Select Selection.AutoFill Destination:=Range("B2:F" & Cells(Rows.Count, "A").End(xlUp).Row) On Error Resume Next With Range("B:F").SpecialCells(xlCellTypeFormulas) .Value = .Value End With ★商品マスタの内容を更新時に新規シートを追加しているので 《商品マスタ2017.10.5!R2C1:R430C6》この部分のシート名と参照範囲を 毎回手動で書き直していますが、シート名と参照範囲を自動で切り替える 方法がありましたら教えてください。 シートは最新版のデータが入ったものを常に使用します。 よろしくお願いします。

専門家に質問してみよう