6

さまざまなツールを使用して長い Excel シートを生成しています。これを確認して、ワークフローのさらに下の入力として使用する必要があります。一部のセルが、含まれるテキストに対して小さすぎるという問題。そのため、ワークシートを読んでいる人間とプログラムは同じデータを見ることはありません。

Excel が行の高さを適切に調整しない場合、これは通常、自動折り返しテキストを含む結合セルに当てはまります。ただし、他のケースもあります。たとえば、一部の列に幅が明示的に設定されている場合、長い値には十分ではありません。

|Group|Def1 |Subgroup|Definition| Id   |Data |Comment   |
|-------------------------------------------------------|
| G1  |     | G1-1   |Important |G1-1-1|...  |          |
|     |Long |        |about G1-1|G1-1-2|.....|........  |
|     |text |-------------------------------------------|
|     |about| G1-2   |Another   |G1-2-1|...  |          |
|     |group|        |important |G1-2-2|...  |long comme|
|     |G1.  |        |text about|G1-2-3|     |          |
|-------------------------------------------------------|

ここでは、「定義」と「コメント」の一部のセルが完全に表示されていません。そのようなセルをプログラムで見つける方法はありますか?

4

4 に答える 4

6

これらのセルを検出するには(問題の修正については話していません)、RangeオブジェクトのTextメソッドを使用できます。

たとえば、Range("A1").Value123456789の場合がありますが、数値としてフォーマットされていて、列の幅が十分でない場合Range("A1").Textは、「###」になります(または、セルに#記号が多数収まります)。

于 2012-11-12T15:22:10.587 に答える
5

これが私が以前に使用したトリックです:

With Columns("B:B")
    oldWidth = .ColumnWidth ' Save original width

    .EntireColumn.AutoFit
    fitWidth = .ColumnWidth ' Get width required to fit entire text

    .ColumnWidth = oldWidth ' Restore original width

    If oldWidth < fitWidth Then
        ' Text is too wide for column.
        ' Do stuff.
    End If
End With

もちろん、これは一度に列全体に適用されます。セルを1つずつダミー列にコピーしてAutoFitそこでテストを行うことで、これを引き続き使用できます。

しかし、おそらくあなたにとってもっと役立つのは、この質問に対する私の以前の答えです。列幅に従って複数の行にテキストを分割します。任意のセルのテキストの幅を決定する方法を説明します(そして、それをセルの実際の幅と比較して、テキストが収まるかどうかを決定します)。

編集コメントへの返信:セルの一部が2行以上のテキストを表示するのに十分な高さである場合は、前の回答で説明したのと同様のアプローチを使用できます。最初.EntireRow.AutoFitにフォントの高さを決定し、.RowHeight方法を決定します。多くの行がセルに収まり、前の質問の方法を使用して、テキストがその幅のセルのその行数に収まるかどうかを判断します。

于 2012-06-08T06:50:17.897 に答える
1

ワークブック内のすべてのセルのマージを解除し、Thisworkbook.sheets("Name").rows(index).entirerow.autofit を使用します。列についても同じです。審美的な理由を除いて、マージされたセルを保持することの用途は何ですか? 「基本セル」の値のみが考慮されます (左上)。

于 2012-06-07T13:08:44.887 に答える
1

今日も同じ問題に遭遇しました。それを回避するためにこのトリックを試しています。おそらく、それはあなたにとって役立つかもしれません。1 列幅のマージ領域を処理するようにコーディングされています。

'Sheet2 is just merely support tool no data sheet in ThisWorkbook
With Sheet2.Range(target.Address)
    target.Copy
    .PasteSpecial xlPasteAll
    .UnMerge
    If .MergeArea.Count > 1 Then .UnMerge
    .ColumnWidth = target.ColumnWidth
    .Value = target.Value
    .EntireRow.AutoFit
    target.MergeArea.EntireRow.RowHeight = _
         1.05 * .RowHeight / target.MergeArea.Rows.Count
    .ClearContents
    .ClearFormats
End With

残念ながら、このようにセルが結合された複数の列がある場合、相互に必要な高さが互いに衝突し、調和を復元するための追加のコードが必要になる可能性があります。興味深いコードのように見えます。これがお役に立てば幸いです。

于 2016-04-27T10:51:05.353 に答える