プロが教える店舗&オフィスのセキュリティ対策術

お世話になります

VB6のMSFlexGridでセルをマージしたいのですがうまくいきません

行イメージは以下になります。
------------------
| AA | 1 | 2 | 3 |
   -------------
|   | A | B | C |
------------------
| AA | 4 | 5 | 6 |
   -------------
|   | D | E | F |
------------------
| BB | 1 | 2 | 3 |
   -------------
|   | A | B | C |
------------------
| BB | 4 | 5 | 6 |
   -------------
|   | D | E | F |
------------------


1行目と2行目の先頭をマージしてtext="AA"
3行目と4行目の先頭をマージして上と同じtext="AA"
5行目と6行目の先頭をマージしてtext="BB"
7行目と8行目の先頭をマージして上と同じtext="BB"

flexMergeFreeもMergeRowも試したつもりなのですが、うまくいきませんでした。
記述の順番なのかな?

With oObjGrid
.Col = 0
.Row = 0
.Text = "AA"
.Row = 1
.Text = "AA"
' ※ここでマージ処理を試したつもり

.Row = 2
.Text = "AA"
.Row = 3
.Text = "AA"
' ※ここでマージ処理を試したつもり

.Row = 4
.Text = "BB"
.Row = 5
.Text = "BB"
' ※ここでマージ処理を試したつもり

.Row = 6
.Text = "BB"
.Row = 7
.Text = "BB"
' ※ここでマージ処理を試したつもり
End With

※以下を色々な順番で試したのですが、だめでした
.MergeCells = flexMergeFree
.MergeRow(0) = True
.MergeRow(1) = True
.MergeCells = 2 'マージの指定
.MergeCells = 3 'マージの指定

A 回答 (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

'***の行は無くてもかまいませんが、セルの位置を計算する場合に規則性がないと困りますからね。
    • good
    • 0
この回答へのお礼

回答ありがとうございました
かなり勘違いしていたようで
てっきり.Colで指定した列の
MergeRow番目がマージされるのだと思っていました。

おかげさまですっきりした状態で、解決する事が出来ました。
追伸
空白行ではなく、文字の後ろにスペースを追加で、余計なマージも回避できました

お礼日時:2013/10/04 10:07

どううまくいかないのか、


' ※ここでマージ処理を試したつもり
↑どういう意味なのか不明です。処理?何の?
コードが無いなら処理とは言わないですが。

マージの仕様が同じデータが連続してたらセルを
くっつけちゃう設定だから、"AA"が連続してたら
全部くっつくという話?そういう仕様だったと
思いますが?ヘルプとかは読んだんですか?
順番???プロパティに最後に設定した値しか
有効じゃないでしょう???

非表示の空白行を2行ごとにはさんでおくとか
工夫した事はありますね。。。インデックス指定は
通常通り指定しても空白行を計算して該当のセル
から値をとってくる関数を自作して。

もはやVB6の開発環境が残ってないですが。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています