1

いくつかのアイテム1、2、3 ...を含むExcelテーブルがあり、それぞれにサブアイテム1.1、1.2などがあります。サブアイテムのリストをキー列として使用し、vlookupを使用してメインアイテムにデータを入力していますが、各主要アイテムを1回表示します。

/|    A    |    B     |    C     |
-+---------+----------+----------+
1| Item1   |  1.Note  |  Item1.1 |
2|         |          |  Item1.2 |
3|         |          |  Item1.3 |
4| Item2   |  2.Note  |  Item2.1 |
5|         |          |  Item2.2 |
6|         |          |  Item2.3 |
7|         |          |  Item2.4 |
8| Item3   |  3.Note  |  Item3.1 |
9|         |          |  Item3.2 |
0|         |          |  Item3.3 |

Cは生データです。ABは数式です。

Bにメモがあるため、テキストが長くなる可能性があります。利用可能なすべての行を占めるようにメモをラップしたいと思います。これらを選択B1:B3してマージすることで手動でこれを行うことができますが、列にアイテムを追加しても更新されませんC

セルがマージされているのか、単にラップされてオーバーラップしているのかは関係ありません。

これは数式またはVBAで実行できますか?

4

2 に答える 2

1

Jon Fournier の回答を拡張して、空白以外のセルを探すように範囲計算を変更し、Merge がスローする警告ダイアログをオフにするコードを追加しました。また、マクロ ダイアログから実行できるように、関数を Public に変更しました。

Public Sub AutoMerge()

Dim LastRowToMergeTo As Long
Dim i As Long
Dim LastRow As Long

Application.DisplayAlerts = False

LastRow = Range("S" & CStr(Rows.Count)).End(xlUp).Row

For i = 2 To LastRow

    LastRowToMergeTo = i
    Do While (Len(Range("D" & CStr(LastRowToMergeTo + 1)).Value) = 0) And (LastRowToMergeTo <> LastRow)
        LastRowToMergeTo = LastRowToMergeTo + 1
    Loop

    With Range("D" & CStr(i) & ":D" & CStr(LastRowToMergeTo))
        .Merge
        .WrapText = True
        .VerticalAlignment = xlVAlignTop
    End With

    i = LastRowToMergeTo

Next i

Application.DisplayAlerts = True

End Sub

再計算のたびにマクロを実行する必要がある Jon の 2 番目の部分は、機能していないように見えますが、私が行っている少量の更新では問題になりません。

于 2008-12-04T01:09:24.093 に答える
0

これは VBA を使用して可能ですが、VBA なしでできるかどうかはわかりません。基本的に、ワークシートが計算するたびに、コードを実行してセルを再マージします。

あなたのような単純なスプレッドシートを作成し、次のコードをシートのコード モジュールに入れました。

Private Sub AutoMerge()

Dim LastRowToMergeTo As Long
Dim i As Long
Dim LastRow As Long

LastRow = Range("C" & CStr(Rows.Count)).End(xlUp).Row

For i = 2 To LastRow

    LastRowToMergeTo = Range("B" & CStr(i)).End(xlDown).Row - 1
    LastRowToMergeTo = Application.WorksheetFunction.Min(LastRowToMergeTo, LastRow)

    With Range("B" & CStr(i) & ":B" & CStr(LastRowToMergeTo))
        .Merge
        .WrapText = True
        .VerticalAlignment = xlVAlignTop
    End With

    i = LastRowToMergeTo

Next i

End Sub

Private Sub Worksheet_Calculate()
    AutoMerge
End Sub
于 2008-12-03T20:21:09.557 に答える