2

セルの名前ボックスに、隣接するセルの値を入力したいと考えています。このマクロは機能します。

Sub NameBox()
   ' populates name box w/ value from adjacent cell
   ActiveCell.Name = ActiveCell.Offset(0, -1).Value
   ' steps down to next cell
   ActiveCell.Offset(1, 0).Select
End Sub

キーストロークを割り当て、列の各セルを反復処理するのは非常に簡単ですが、ループで改善できると思います。

これを試しました。

Sub NameBoxLoop()
   Dim cel As Range
   For Each cel In Range("C:C").Cells
      If cel.Value <> "" Then
         cel.Name = cel.Offset(0, -1).Value
      End If
   Next cel
End Sub

しかし、次のデバッグエラーが発生します

cel.Name = アプリケーション定義またはオブジェクト定義のエラー

変数 cel.Name を cel.Value に置き換えると、ループが完了します。

検索では、cel.Name エラーに対する回答が得られませんでした。このエラーを解決するための助けをいただければ幸いです。

4

1 に答える 1

2

あなたの式は機能します。しかし、エラー修正がなく、名前に制限があるため、環境が最適ではない可能性があります。

したがって、列 B に値がないか、列 B に他のセルの名前として既に使用されている値があると推測しています。

どちらの場合も、ループが壊れます。

とにかくループするためにこれを試してください。ただし、コードのエラーを証明することを検討してください。

Sub NameBoxLoop()
   On Error Resume Next
   Dim cel As Range
   For Each cel In Range("C:C").Cells
      If cel.Value <> "" Then
         cel.Name = cel.Offset(0, -1).Value
      End If
   Next cel
end sub

編集:

提案として、Namesリストの使用を検討することをお勧めします。

以下は、Excel ヘルプの例です。

ActiveWorkbook.Names.Add Name:="test", RefersTo:="=sheet1!$a$1:$c$20"

そして、ここにいくつかのオブジェクトメンバーがあります:

  • 追加
  • アイテム
  • カウント
于 2012-11-08T13:15:09.700 に答える