web-dev-qa-db-ja.com

列の最後の行まで式を埋めるVBA

だから私はプロジェクトに取り組んでおり、VBAコードを取得して、セルM3にある式をデータセットの最後まで描画するようにしています。列Lをベースとして使用して、データが含まれる最後のセルが何であるかを判断しています。私の式は、2つのセルをテキストコンマで連結したものです。したがって、Excelでの式は= G3& "、"&L3です

セルM4で= G4& "、"&L4セルM5が= G5& "、"&L5などになるように、Excelでこの式を作成します。

私のコードは次のようになります:

Range("$M$3").Formula = Range("G3") & (",") & Range("L3")

Dim Lastrow As Long

Application.ScreenUpdating = False

Lastrow = Range("L" & Rows.Count).End(xlUp).Row
Range("M4").FormulaR1C1 = Range("G4") & (",") & Range("L4")
Range("M4").AutoFill Destination:=Range("M4:M" & Lastrow)
ActiveSheet.AutoFilterMode = False
Application.ScreenUpdating = True

私の出力は、セルM3からデータセットの最後までテキスト値をプルダウンするだけです。修正を探すために数時間検索しましたが、目的を達成しようとしているものを見つけることができないようです。

13
MatTtT

それは実際には1つのライナーです。 .Autofillを使用する必要はありません

Range("M3:M" & LastRow).Formula = "=G3&"",""&L3"
34
Siddharth Rout

または、FillDownを使用することもできます

Range("M3") = "=G3&"",""&L3": Range("M3:M" & LastRow).FillDown

同様の質問がある人のために、この投稿を見つけてください(私がしたように)。データセットがテーブルとしてフォーマットされている場合、lastrowがなくてもこれを行うことができます。

Range("tablename[columnname]").Formula = "=G3&"",""&L3"

真のワンライナーに。それが誰かを助けることを願っています!

9
Monthy

素晴らしい答えです!次のタイトルセルまで、下の空のセルに適用されるセルにタイトルがあった列の空のセルを埋める必要がありました。

上記のコードを使用して、ここのサンプルシートの下にあるコードを開発しました。このコードをマクロctl/shft/Dとして適用し、タイトルをコピーして列をすばやく実行しました。

---スプレッドシートの例------------ Title1は行2と3にコピーされます。 Title2は、行5および6の下のセルにコピーされます。マクロの2回目の実行後、アクティブセルはTitle3セルになります。

 ' **row** **Column1**        **Column2**
 '    1     Title1         Data 1 for title 1
 '    2                    Data 2 for title 1
 '    3                    Data 3 for title 1
 '    4     Title2         Data 1 for title 2
 '    5                    Data 2 for title 2
 '    6                    Data 3 for title 2
 '    7   Title 3          Data 1 for title 3

----- CopyDownコード----------

Sub CopyDown()
Dim Lastrow As String, FirstRow As String, strtCell As Range
'
' CopyDown Macro
' Copies the current cell to any empty cells below it.   
'
' Keyboard Shortcut: Ctrl+Shift+D
'
    Set strtCell = ActiveCell
    FirstRow = strtCell.Address
' Lastrow is address of the *list* of empty cells
    Lastrow = Range(Selection, Selection.End(xlDown).Offset(-1, 0)).Address
'   MsgBox Lastrow
    Range(Lastrow).Formula = strtCell.Formula

    Range(Lastrow).End(xlDown).Select
 End Sub
0
SteveG