0

既存のリスト (列 B) に値を追加するマクロ (VBA の新規作成/コードの作成) を作成しようとしています。値は InputBox によって定義され、アルファベット順にリストに追加されます。マクロを動作させることはできますが、行全体ではなく範囲内にセルを追加したいと考えています。

私のスプレッドシートには、列 A から K までのデータがあります。これは、「行」を挿入したい領域です。ただし、落とし穴があります。行を追加したくない列 L から AF に別のデータ セットがあります。完全な行しか挿入できないため、ここで失敗しました。

これを行う方法はありますか?リスト内の新しい値の位置に基づいて (アルファベット順で) 挿入を行う必要があるため、挿入する場所を選択できないため、機能しているように見えるメソッドに遭遇したことはありません。コードを表示するためにマクロを記録しようとしましたが、値によって選択が定義されているため、その入力を操作できません。

ここに私がこれまでに持っているコードがあります...私はまだ学んでいるので少しぎこちないかもしれません.

Sub Add_Project()
Dim NewProject As String, iRow As Long, ProjRng As Range, RowRng As Range
'The ProjRng MUST represent the project column!
    Set ProjRng = Range("B:B")
'Defines the range of columns to add a row to
    Set RowRng = Range("B:K")
'Create message box for user input on project name
    NewProject = InputBox("Enter Project Name")
    If NewProject = "" Then Exit Sub
'Determines if the New Project name already exists
    iRow = Application.WorksheetFunction.Match(NewProject, ProjRng)
    If Cells(ProjRng.row + iRow - 1, ProjRng.Column) = NewProject Then
        MsgBox ("Project already exists")
Exit Sub
    End If
'Inserts a new row with containing the new Project name
    With Cells(ProjRng.row + iRow, ProjRng.Column)
        .EntireRow.Insert
        .Offset(-1, 0).Value = NewProject
    End With
Exit Sub
End Sub

マクロは、私が指示したことを実行していることに気づきました。列 A:K の範囲にのみ追加する何かで「EntireRow」を追加するセクションを操作したいと思います。どこから始めればよいかについての提案や指針をいただければ幸いです。ありがとう!

4

1 に答える 1

1
Sub Add_Project()

    Dim strNewProject As String
    Dim iRow As Long

    strNewProject = InputBox("Enter Project Name")
    If Len(strNewProject) = 0 Then Exit Sub 'Pressed cancel

    If WorksheetFunction.CountIf(Columns("B"), strNewProject) > 0 Then
        MsgBox "Project already exists"
        Exit Sub
    End If

    iRow = WorksheetFunction.Match(strNewProject, Columns("B")) + 1
    Intersect(Range("A:K"), Rows(iRow)).Insert xlShiftDown
    Cells(iRow, "B").Value = strNewProject

End Sub
于 2013-08-08T22:03:24.120 に答える