3

ワークブックのセルの内容を更新したい。私のコードは次のようになります。

ProductionWorkBook.Sheets("Production Schedule").Cells(StartRow, 1).Value = EstJobName(i)

セルは次を使用して参照されます。Cells(StartRow, 1)ここで、StartRow は、行を指定する事前宣言および事前定義された整数変数であり、" 1" は列を示します。

編集: ここで、代わりに列 HEADERSで列を参照するようにこのコードを変更したいと思います。

たとえば、列のヘッダーは「Fab Hours Date」ですが、これを参照するにはどうすればよいですか?

4

4 に答える 4

3

はい、列の文字名を引用符で囲むだけで使用できます。

Cells(StartRow, "A")

さらなる質問に答えるために編集しました:特定の列名を探すには、これを試してください:

columnNamesRow = 1           ' or whichever row your names are in
nameToSearch = "Fab Hours"   ' or whatever name you want to search for
columnToUse = 0
lastUsedColumn = Worksheets("Foo").Cells(1, Worksheets("Foo").Columns.Count).End(xlToLeft).Column

For col = 1 To lastUsedColumn
   If Worksheets("Foo").Cells(columnNamesRow, col).Value = nameToSearch Then
      columnToUse = col
   End If
Next col


If columnToUse > 0 Then
' found the column you wanted, do your thing here using "columnToUse" as the column index
End If
于 2013-01-25T14:46:00.397 に答える
2

必要なものを取得するための 2 つの異なる関数を次に示します。それらを使用するには、それらをコードに入れる必要があります。

Function ColumnNumberByHeader(text As String, Optional headerRange As Range) As Long
    Dim foundRange As Range
    If (headerRange Is Nothing) Then
        Set headerRange = Range("1:1")
    End If

    Set foundRange = headerRange.Find(text)
    If (foundRange Is Nothing) Then
        MsgBox "Could not find column that matches header: " & text, vbCritical, "Header Not Found"
        ColumnNumberByHeader = 0
    Else
        ColumnNumberByHeader = foundRange.Column
    End If
End Function

Function ColumnNumberByHeader2(text As String, Optional headerRange As Range) As Long
    If (headerRange Is Nothing) Then
        Set headerRange = Range("1:1")
    End If
    On Error Resume Next
    ColumnNumberByHeader2 = WorksheetFunction.Match(text, headerRange, False)
    If Err.Number <> 0 Then
        MsgBox "Could not find column that matches header: " & text, vbCritical, "Header Not Found"
        ColumnNumberByHeader2 = 0
    End If
    On Error GoTo 0
End Function

呼び出しの例:

 ColumnNumberByHeader ("Extn")
 ColumnNumberByHeader("1718", Range("2:2"))

またはあなたの場合:

ProductionWorkBook.Sheets("Production Schedule"). _
Cells(StartRow, ColumnNumberByHeader("Fab Hours Date")).Value = EstJobName(i)
于 2013-01-25T15:40:59.483 に答える
1
ProductionWorkBook.Sheets("Production Schedule").Range("A" & StartRow).Value = EstJobName(i)

列が定義した名前付き範囲であるという意味でない限り?

于 2013-01-25T14:46:10.043 に答える
0
ProductionWorkBook.Sheets("生産スケジュール").Range("E"& StartRow).Value = ...

仕事をします。

ただし、列の文字などのハードコードされた参照を使用すると、シートが編集されたとき (列が挿入されたときなど) にマクロが壊れる危険性があることに注意してください。したがって、名前付き範囲を使用しOffsetて以下にアクセスすることをお勧めします。

ProductionWorkBook.Sheets("生産スケジュール").Range("StartCell").Offset(StartRow-1).Value

StartCellこれで、最初のセルに名前を指定するだけで済みます (名前マネージャーでローカル名であることを確認してください)。

于 2013-01-25T14:46:31.340 に答える