セルがマージされるときのVBAの列の選択(Microsoft Excel)
空白のワークシートがあり、範囲A1:F1に「マージアンドセンター」形式が適用されているとします。列見出しをクリックして列Bを選択すると、Excelは列Bを忠実に選択し、セルB2をアクティブセルにします。この動作は、Excel2000またはExcel2002のいずれかで変更されました。以前のバージョンのExcelでは、結合されたセル(A1:F1)を取得します
選択に含まれています。
どうやら、列B全体を選択すると、AからFまでのすべての列も選択されるため、VBAはユーザーインターフェイスの動作にいくらか遅れをとっています。
Sub TestMacro1() Range("B3").EntireColumn.Select End Sub
この動作を回避する方法はないようです。 entireColumnメソッドを削除して列Bを選択した場合でも、AからFまでのすべての列を取得できます。
Sub TestMacro2() Range("B:B").Select End Sub
その列に対して何らかのアクションを実行する準備として列を選択するのではなく、アクションを直接実行する方が、おそらくより良いプログラミングアプローチです。たとえば、列Bのすべてのセルを太字にしたいとします。あなたはこの方法でそうすることができます:
Sub TestMacro3() Range("B3").EntireColumn.Font.Bold = True End Sub
これは、列Bのセルにのみ影響し、AまたはCからFのセルには影響しません。同様に、反復アプローチを使用して、目的の列のセルを処理できます。
Sub TestMacro4() Dim rCell As Range Dim X As Long X = 1 For Each rCell In Range("B:B") rCell.Value = X X = X + 1 Next End Sub
これにより、列Bの各セルに値が詰め込まれ、列Bのセルを含むマージは無視されます。
セルが結合されているために列を追加せずに列全体を選択できることが必須の場合は、MergeCellsプロパティを使用して結合されたセルを確認したくなる場合があります。 VBAオンラインヘルプによると、以下は選択範囲内のマージされたセルを検出してから、マクロからダンプする必要があります。
Sub TestMacro5() Range("B3").EntireColumn.Select If Selection.MergeCells Then Exit Sub End If ' ' Perform rest of macro ' End Sub
残念ながら、テストでは、このコードが機能しないことが示されています。 MergeCellsプロパティは、選択全体がマージされたセルで構成されている場合にのみTrueを返すようであり、選択にいくつかのマージされたセルのみが含まれている場合は返しません。つまり、マージされたセルが目的の選択を変更したかどうかを判断するには、次のような他の方法が必要になります。
Sub TestMacro6() Range("B3").EntireColumn.Select If Selection.Columns.Count > 1 Then Exit Sub End If ' ' Perform rest of macro ' End Sub
このアプローチでは、選択範囲内の列の数を調べ、Excelが複数の列があることを報告した場合はダンプします。
注:
このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(3093)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。
linkセルがマージされたときのVBAの列の選択。