私は2つのスプレッドシートをマージするExcelマクロで作業しています - 企業のリストとそれらの企業に関連する電子メールのリスト。ある企業に複数の電子メールが関連付けられている場合、その電子メール用に別の行を作成する必要があります。Excel VBAマクロで新しい行を作成する(私は間違って何をしていますか)
マクロの最後に向かってコードRows(row).Resize(1).Insert
で新しい行を作成しようとするまで、すべて正常に進みます。この行になると、Excelは各行の最初の列広告を無限に複製します(列XEIまで)。
私のコードを変更して、100万の列ではなく新しい行を作成するにはどうしたらいいですか?次のように私のコードは次のとおりです。
Sub Commandbutton1()
ThisWorkbook.Sheets("company").Activate
Sheet2.Range("A1:A10000").Select
Selection.Copy
ThisWorkbook.Sheets("Sheet1").Activate
Sheet1.Range("A1:A10000").Value = Sheet2.Range("A1:A10000").Value
Sheet1.Range("B1").Value = "First Name"
Sheet1.Range("C1").Value = "Last Name"
Sheet1.Range("D1").Value = "Email"
Dim i As Integer
i = 1
Do While i <= 100
Dim companyName As String
companyName = Cells(i, 1).Value
firstname = Cells(i, 2).Value
lastname = Cells(i, 3).Value
'Query contacts list
'Find all rows containing companyName
'Find the email in those rows
'Add the email to row i
Dim slot As Integer
slot_email = 4
Dim result As String
Dim sheet As Worksheet
Set sheet = ActiveWorkbook.Sheets("contact")
Dim isFirstInstance As Integer
isFirstInstance = 0
Dim j As Integer
For j = 1 To sheet.Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count
Dim k As Integer
For k = 1 To 39
Dim cellVal As String
cellVal = ActiveWorkbook.Worksheets("contact").Cells(j, k).Value
If cellVal = "" Then
Exit For
ElseIf cellVal = companyName Then
Debug.Print ("For company " & companyName & ", found value on row " & j & " col " & k)
Cells(i, 4).Value = ActiveWorkbook.Worksheets("contact").Cells(j, 4).Value
Cells(i, 2).Value = ActiveWorkbook.Worksheets("contact").Cells(j, 2).Value
Cells(i, 3).Value = ActiveWorkbook.Worksheets("contact").Cells(j, 3).Value
isFirstInstance = isFirstInstance + 1
Debug.Print (isFirstInstance & " on column " & k)
If isFirstInstance > 1 Then
Debug.Print ("Found a duplicate contact!")
Dim row As String
row = i
Rows(row).Resize(1).Insert
i = i + 1
End If
End If
Next k
Next j
i = i + 1
Loop
End Sub
は、それが意図したとおりに働いていた(それは行番号SOME_CONSTANTに新しい行を挿入し)、任意の列を挿入しませんでした。 この行を別の行に置き換えて(またはコメントアウトして)、何が起こるかを見てください。とにかくこれらの行を挿入する必要があるのはなぜですか? –
こんにちはMaciej、私は同じ会社で働いているかもしれない別の連絡先を反映するために行が必要です。この場合、会社名は別のメールアドレスで次の行に複製されます。 – alpacapaca
しかし、コード内のこれらの追加行には決してアクセスしません。 'isFirstInstance> 1 'のセルをハイライトすることができます。その色を変更することで、行を挿入する必要がなくなります。 –