- ベストアンサー
VB6のMSFlexGridでセルをマージする方法 | マージがうまくいかない原因とは?
- VB6のMSFlexGridでセルをマージしたいがうまくいかない。セルをマージして結合したい場合、MergeCellsプロパティやMergeRowメソッドを使用するが、マージがうまくいかない原因は順番の記述にある可能性がある。
- セルをマージする手順として、先頭セルに値を設定し、次の行の先頭セルに同じ値を設定する。その後、マージ処理を行う。しかし、記述順番が正しくないとマージがうまくいかないことがある。
- VB6のMSFlexGridでセルをマージするには、セルの値を設定する前に、マージの設定を行う必要がある。具体的には、MergeCellsプロパティを使用してマージの方式(MergeFreeやMergeRow、MergeCellsでの指定)を設定し、正しい順番でセルの値を設定する。これにより、セルのマージが正しく動作する。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
列をマージするのだからMergeRow()ではなくMergeCol()ですね。 No1さんも書かれていますが、マージは隣接するセルの内容が同じならくっつけちゃうので 1行目~4行目、5行目~8行目までの4行がマージの対象になります。 回避策は空白行を挿入します、今回の場合は2行毎です。 With oObjGrid .Rows = 1 .MergeCells = flexMergeRestrictColumns .MergeCol(0) = True .AddItem "AA" & vbTab & "1" & vbTab & "2" & vbTab & "3" .AddItem "AA" & vbTab & "A" & vbTab & "B" & vbTab & "C" .AddItem "" '空白行を挿入 .RowHeight(.Rows - 1) = 0 '空白行の高さを0に(非表示) .AddItem "AA" & vbTab & "4" & vbTab & "5" & vbTab & "6" .AddItem "AA" & vbTab & "D" & vbTab & "E" & vbTab & "F" .AddItem "" '*** .RowHeight(.Rows - 1) = 0 '*** .AddItem "BB" & vbTab & "1" & vbTab & "2" & vbTab & "3" .AddItem "BB" & vbTab & "A" & vbTab & "B" & vbTab & "C" .AddItem "" .RowHeight(.Rows - 1) = 0 .AddItem "BB" & vbTab & "4" & vbTab & "5" & vbTab & "6" .AddItem "BB" & vbTab & "D" & vbTab & "E" & vbTab & "F" .AddItem "" '*** .RowHeight(.Rows - 1) = 0 '*** End With '***の行は無くてもかまいませんが、セルの位置を計算する場合に規則性がないと困りますからね。
その他の回答 (1)
- MARU4812
- ベストアンサー率43% (196/452)
どううまくいかないのか、 ' ※ここでマージ処理を試したつもり ↑どういう意味なのか不明です。処理?何の? コードが無いなら処理とは言わないですが。 マージの仕様が同じデータが連続してたらセルを くっつけちゃう設定だから、"AA"が連続してたら 全部くっつくという話?そういう仕様だったと 思いますが?ヘルプとかは読んだんですか? 順番???プロパティに最後に設定した値しか 有効じゃないでしょう??? 非表示の空白行を2行ごとにはさんでおくとか 工夫した事はありますね。。。インデックス指定は 通常通り指定しても空白行を計算して該当のセル から値をとってくる関数を自作して。 もはやVB6の開発環境が残ってないですが。
お礼
回答ありがとうございました かなり勘違いしていたようで てっきり.Colで指定した列の MergeRow番目がマージされるのだと思っていました。 おかげさまですっきりした状態で、解決する事が出来ました。 追伸 空白行ではなく、文字の後ろにスペースを追加で、余計なマージも回避できました